Chromium Code Reviews| 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..cd958341eda94a8b3398e4175abe4df6f06c954a 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,118 @@ 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_]; |
| + 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_]; |
| + 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. |
|
Mark Mentovai
2012/10/11 16:04:03
I like this comment. You should put it into the ot
Robert Sesek
2012/10/11 16:06:54
Yeah, mock expectations are strict. An unexpected
|
| + 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 |