| 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
|
|
|