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

Unified 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: '' 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_cocoa.mm ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm
diff --git a/chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm b/chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm
index 5f6d5c25a223d8d4af68b1c1e6a411c4bf42c8c2..c7b68fcf6921f86bfb275b69eff592b76710074b 100644
--- a/chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm
+++ b/chrome/browser/ui/cocoa/browser_window_cocoa_unittest.mm
@@ -6,13 +6,15 @@
#include "base/memory/scoped_ptr.h"
#include "base/string_util.h"
#include "chrome/browser/bookmarks/bookmark_utils.h"
-#include "chrome/browser/ui/cocoa/browser_window_cocoa.h"
-#include "chrome/browser/ui/cocoa/browser_window_controller.h"
+#import "chrome/browser/ui/cocoa/browser_window_cocoa.h"
+#import "chrome/browser/ui/cocoa/browser_window_controller.h"
#include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/pref_names.h"
#include "content/public/browser/notification_details.h"
#include "testing/gtest/include/gtest/gtest.h"
+#import "third_party/ocmock/gtest_support.h"
+#import "third_party/ocmock/ocmock/OCMock.h"
// A BrowserWindowCocoa that goes PONG when
// BOOKMARK_BAR_VISIBILITY_PREF_CHANGED is sent. This is so we can be
@@ -126,4 +128,120 @@ TEST_F(BrowserWindowCocoaTest, TestFullscreen) {
[fake_controller close];
}
+// Tests that BrowserWindowCocoa::Close mimics the behavior of
+// -[NSWindow performClose:].
+class BrowserWindowCocoaCloseTest : public CocoaProfileTest {
+ public:
+ BrowserWindowCocoaCloseTest()
+ : controller_(
+ [OCMockObject mockForClass:[BrowserWindowController class]]),
+ window_([OCMockObject mockForClass:[NSWindow class]]) {
+ [[[controller_ stub] andReturn:nil] overlayWindow];
+ }
+
+ void CreateAndCloseBrowserWindow() {
+ BrowserWindowCocoa browser_window(browser(), controller_);
+ browser_window.Close();
+ }
+
+ id ValueYES() {
+ BOOL v = YES;
+ return OCMOCK_VALUE(v);
+ }
+ id ValueNO() {
+ BOOL v = NO;
+ return OCMOCK_VALUE(v);
+ }
+
+ protected:
+ id controller_;
+ id window_;
+};
+
+TEST_F(BrowserWindowCocoaCloseTest, DelegateRespondsYes) {
+ [[[window_ stub] andReturn:controller_] delegate];
+ [[[controller_ stub] andReturn:window_] window];
+ [[[controller_ stub] andReturnValue:ValueYES()] windowShouldClose:window_];
+ [[window_ expect] close];
+ CreateAndCloseBrowserWindow();
+ EXPECT_OCMOCK_VERIFY(controller_);
+ EXPECT_OCMOCK_VERIFY(window_);
+}
+
+TEST_F(BrowserWindowCocoaCloseTest, DelegateRespondsNo) {
+ [[[window_ stub] andReturn:controller_] delegate];
+ [[[controller_ stub] andReturn:window_] window];
+ [[[controller_ stub] andReturnValue:ValueNO()] windowShouldClose:window_];
+ // Window should not be closed.
+ CreateAndCloseBrowserWindow();
+ EXPECT_OCMOCK_VERIFY(controller_);
+ EXPECT_OCMOCK_VERIFY(window_);
+}
+
+// NSWindow does not implement |-windowShouldClose:|, but subclasses can
+// implement it, and |-performClose:| will invoke it if implemented.
+@interface BrowserWindowCocoaCloseWindow : NSWindow
+- (BOOL)windowShouldClose:(id)window;
+@end
+@implementation BrowserWindowCocoaCloseWindow
+- (BOOL)windowShouldClose:(id)window {
+ return YES;
+}
+@end
+
+TEST_F(BrowserWindowCocoaCloseTest, WindowRespondsYes) {
+ window_ = [OCMockObject mockForClass:[BrowserWindowCocoaCloseWindow class]];
+ [[[window_ stub] andReturn:nil] delegate];
+ [[[controller_ stub] andReturn:window_] window];
+ [[[window_ stub] andReturnValue:ValueYES()] windowShouldClose:window_];
+ [[window_ expect] close];
+ CreateAndCloseBrowserWindow();
+ EXPECT_OCMOCK_VERIFY(controller_);
+ EXPECT_OCMOCK_VERIFY(window_);
+}
+
+TEST_F(BrowserWindowCocoaCloseTest, WindowRespondsNo) {
+ window_ = [OCMockObject mockForClass:[BrowserWindowCocoaCloseWindow class]];
+ [[[window_ stub] andReturn:nil] delegate];
+ [[[controller_ stub] andReturn:window_] window];
+ [[[window_ stub] andReturnValue:ValueNO()] windowShouldClose:window_];
+ // Window should not be closed.
+ CreateAndCloseBrowserWindow();
+ EXPECT_OCMOCK_VERIFY(controller_);
+ EXPECT_OCMOCK_VERIFY(window_);
+}
+
+TEST_F(BrowserWindowCocoaCloseTest, DelegateRespondsYesWindowRespondsNo) {
+ window_ = [OCMockObject mockForClass:[BrowserWindowCocoaCloseWindow class]];
+ [[[window_ stub] andReturn:controller_] delegate];
+ [[[controller_ stub] andReturn:window_] window];
+ [[[controller_ stub] andReturnValue:ValueYES()] windowShouldClose:window_];
+ [[[window_ stub] andReturnValue:ValueNO()] windowShouldClose:window_];
+ [[window_ expect] close];
+ CreateAndCloseBrowserWindow();
+ EXPECT_OCMOCK_VERIFY(controller_);
+ EXPECT_OCMOCK_VERIFY(window_);
+}
+
+TEST_F(BrowserWindowCocoaCloseTest, DelegateRespondsNoWindowRespondsYes) {
+ window_ = [OCMockObject mockForClass:[BrowserWindowCocoaCloseWindow class]];
+ [[[window_ stub] andReturn:controller_] delegate];
+ [[[controller_ stub] andReturn:window_] window];
+ [[[controller_ stub] andReturnValue:ValueNO()] windowShouldClose:window_];
+ [[[window_ stub] andReturnValue:ValueYES()] windowShouldClose:window_];
+ // Window should not be closed.
+ CreateAndCloseBrowserWindow();
+ EXPECT_OCMOCK_VERIFY(controller_);
+ EXPECT_OCMOCK_VERIFY(window_);
+}
+
+TEST_F(BrowserWindowCocoaCloseTest, NoResponseFromDelegateNorWindow) {
+ [[[window_ stub] andReturn:nil] delegate];
+ [[[controller_ stub] andReturn:window_] window];
+ [[window_ expect] close];
+ CreateAndCloseBrowserWindow();
+ EXPECT_OCMOCK_VERIFY(controller_);
+ EXPECT_OCMOCK_VERIFY(window_);
+}
+
// TODO(???): test other methods of BrowserWindowCocoa
« no previous file with comments | « chrome/browser/ui/cocoa/browser_window_cocoa.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698