Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(840)

Side by Side Diff: chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm

Issue 11090029: [Mac] In BrowserWindowCocoa::Close() do not use -[NSWindow performClose:]. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ask the window, too Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/memory/scoped_nsobject.h" 5 #include "base/memory/scoped_nsobject.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "chrome/browser/bookmarks/bookmark_utils.h" 8 #include "chrome/browser/bookmarks/bookmark_utils.h"
9 #include "chrome/browser/ui/cocoa/browser_window_cocoa.h" 9 #import "chrome/browser/ui/cocoa/browser_window_cocoa.h"
10 #include "chrome/browser/ui/cocoa/browser_window_controller.h" 10 #import "chrome/browser/ui/cocoa/browser_window_controller.h"
11 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h" 11 #include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
12 #include "chrome/common/chrome_notification_types.h" 12 #include "chrome/common/chrome_notification_types.h"
13 #include "chrome/common/pref_names.h" 13 #include "chrome/common/pref_names.h"
14 #include "content/public/browser/notification_details.h" 14 #include "content/public/browser/notification_details.h"
15 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
16 #import "third_party/ocmock/gtest_support.h"
17 #import "third_party/ocmock/ocmock/OCMock.h"
16 18
17 // A BrowserWindowCocoa that goes PONG when 19 // A BrowserWindowCocoa that goes PONG when
18 // BOOKMARK_BAR_VISIBILITY_PREF_CHANGED is sent. This is so we can be 20 // BOOKMARK_BAR_VISIBILITY_PREF_CHANGED is sent. This is so we can be
19 // sure we are observing it. 21 // sure we are observing it.
20 class BrowserWindowCocoaPong : public BrowserWindowCocoa { 22 class BrowserWindowCocoaPong : public BrowserWindowCocoa {
21 public: 23 public:
22 BrowserWindowCocoaPong(Browser* browser, 24 BrowserWindowCocoaPong(Browser* browser,
23 BrowserWindowController* controller) 25 BrowserWindowController* controller)
24 : BrowserWindowCocoa(browser, controller) { 26 : BrowserWindowCocoa(browser, controller) {
25 pong_ = false; 27 pong_ = false;
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 scoped_ptr<BrowserWindowCocoaPong> scoped_bwc(bwc); 121 scoped_ptr<BrowserWindowCocoaPong> scoped_bwc(bwc);
120 122
121 EXPECT_FALSE(bwc->IsFullscreen()); 123 EXPECT_FALSE(bwc->IsFullscreen());
122 bwc->EnterFullscreen(GURL(), FEB_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION); 124 bwc->EnterFullscreen(GURL(), FEB_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION);
123 EXPECT_TRUE(bwc->IsFullscreen()); 125 EXPECT_TRUE(bwc->IsFullscreen());
124 bwc->ExitFullscreen(); 126 bwc->ExitFullscreen();
125 EXPECT_FALSE(bwc->IsFullscreen()); 127 EXPECT_FALSE(bwc->IsFullscreen());
126 [fake_controller close]; 128 [fake_controller close];
127 } 129 }
128 130
131 // Tests that BrowserWindowCocoa::Close mimicks the behavior of
Mark Mentovai 2012/10/11 15:44:57 mimics
Robert Sesek 2012/10/11 15:58:39 Done.
132 // -[NSWindow performClose:].
133 class BrowserWindowCocoaCloseTest : public CocoaProfileTest {
134 public:
135 BrowserWindowCocoaCloseTest()
136 : controller_(
137 [OCMockObject mockForClass:[BrowserWindowController class]]),
138 window_([OCMockObject mockForClass:[NSWindow class]]) {
139 [[[controller_ stub] andReturn:nil] overlayWindow];
140 }
141
142 void CreateAndCloseBrowserWindow() {
143 BrowserWindowCocoa browser_window(browser(), controller_);
144 browser_window.Close();
145 }
146
147 id ValueYES() {
148 BOOL v = YES;
149 return OCMOCK_VALUE(v);
150 }
151 id ValueNO() {
152 BOOL v = NO;
153 return OCMOCK_VALUE(v);
154 }
155
156 protected:
157 id controller_;
158 id window_;
159 };
160
161 TEST_F(BrowserWindowCocoaCloseTest, DelegateRespondsYes) {
162 [[[window_ stub] andReturn:controller_] delegate];
163 [[[controller_ stub] andReturn:window_] window];
164 [[[controller_ stub] andReturnValue:ValueYES()] windowShouldClose:window_];
165 [[window_ expect] close];
166 CreateAndCloseBrowserWindow();
167 EXPECT_OCMOCK_VERIFY(controller_);
168 EXPECT_OCMOCK_VERIFY(window_);
169 }
170
171 TEST_F(BrowserWindowCocoaCloseTest, DelegateRespondsNo) {
172 [[[window_ stub] andReturn:controller_] delegate];
173 [[[controller_ stub] andReturn:window_] window];
174 [[[controller_ stub] andReturnValue:ValueNO()] windowShouldClose:window_];
175 CreateAndCloseBrowserWindow();
176 EXPECT_OCMOCK_VERIFY(controller_);
177 EXPECT_OCMOCK_VERIFY(window_);
178 }
179
180 // NSWindow does not implement |-windowShouldClose:|, but subclasses can
181 // implement it, and |-performClose:| will invoke it if implemented.
182 @interface BrowserWindowCocoaCloseWindow : NSWindow
183 - (BOOL)windowShouldClose:(id)window;
184 @end
185 @implementation BrowserWindowCocoaCloseWindow
186 - (BOOL)windowShouldClose:(id)window {
187 return YES;
188 }
189 @end
190
191 TEST_F(BrowserWindowCocoaCloseTest, WindowRespondsYes) {
192 window_ = [OCMockObject mockForClass:[BrowserWindowCocoaCloseWindow class]];
193 [[[window_ stub] andReturn:nil] delegate];
194 [[[controller_ stub] andReturn:window_] window];
195 [[[window_ stub] andReturnValue:ValueYES()] windowShouldClose:window_];
196 [[window_ expect] close];
197 CreateAndCloseBrowserWindow();
198 EXPECT_OCMOCK_VERIFY(controller_);
199 EXPECT_OCMOCK_VERIFY(window_);
200 }
201
202 TEST_F(BrowserWindowCocoaCloseTest, WindowRespondsNo) {
203 window_ = [OCMockObject mockForClass:[BrowserWindowCocoaCloseWindow class]];
204 [[[window_ stub] andReturn:nil] delegate];
205 [[[controller_ stub] andReturn:window_] window];
206 [[[window_ stub] andReturnValue:ValueNO()] windowShouldClose:window_];
207 CreateAndCloseBrowserWindow();
208 EXPECT_OCMOCK_VERIFY(controller_);
209 EXPECT_OCMOCK_VERIFY(window_);
210 }
211
Mark Mentovai 2012/10/11 15:44:57 Can you also have a test where the delegate says Y
Robert Sesek 2012/10/11 15:58:39 Done, and the inverse
212 TEST_F(BrowserWindowCocoaCloseTest, NoResponseFromDelegatAndWindow) {
Mark Mentovai 2012/10/11 15:44:57 Delegate is missing an E.
Robert Sesek 2012/10/11 15:58:39 Done.
213 [[[window_ stub] andReturn:nil] delegate];
214 [[[controller_ stub] andReturn:window_] window];
215 [[window_ expect] close];
216 CreateAndCloseBrowserWindow();
217 EXPECT_OCMOCK_VERIFY(controller_);
218 EXPECT_OCMOCK_VERIFY(window_);
219 }
220
129 // TODO(???): test other methods of BrowserWindowCocoa 221 // TODO(???): test other methods of BrowserWindowCocoa
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698