Index: chrome/browser/cocoa/browser_window_controller_unittest.mm |
=================================================================== |
--- chrome/browser/cocoa/browser_window_controller_unittest.mm (revision 29973) |
+++ chrome/browser/cocoa/browser_window_controller_unittest.mm (working copy) |
@@ -6,6 +6,7 @@ |
#include "base/scoped_nsautorelease_pool.h" |
#include "base/scoped_ptr.h" |
#include "chrome/browser/browser_process.h" |
+#include "chrome/browser/browser_window.h" |
#include "chrome/browser/cocoa/browser_test_helper.h" |
#include "chrome/browser/cocoa/browser_window_controller.h" |
#include "chrome/browser/cocoa/cocoa_test_helper.h" |
@@ -14,7 +15,6 @@ |
#include "chrome/common/pref_service.h" |
#include "chrome/test/testing_browser_process.h" |
#include "chrome/test/testing_profile.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
@interface BrowserWindowController (JustForTesting) |
// Already defined in BWC. |
@@ -57,21 +57,23 @@ |
} |
@end |
-class BrowserWindowControllerTest : public testing::Test { |
+class BrowserWindowControllerTest : public CocoaTest { |
+ public: |
virtual void SetUp() { |
- controller_.reset([[BrowserWindowController alloc] |
- initWithBrowser:browser_helper_.browser() |
- takeOwnership:NO]); |
+ CocoaTest::SetUp(); |
+ Browser* browser = browser_helper_.browser(); |
+ controller_ = [[BrowserWindowController alloc] initWithBrowser:browser |
+ takeOwnership:NO]; |
} |
+ virtual void TearDown() { |
+ [controller_ close]; |
+ CocoaTest::TearDown(); |
+ } |
+ |
public: |
- // Order is very important here. We want the controller deleted |
- // before the pool, and want the pool deleted before |
- // BrowserTestHelper. |
- CocoaTestHelper cocoa_helper_; |
BrowserTestHelper browser_helper_; |
- base::ScopedNSAutoreleasePool pool_; |
- scoped_nsobject<BrowserWindowController> controller_; |
+ BrowserWindowController* controller_; |
}; |
TEST_F(BrowserWindowControllerTest, TestSaveWindowPosition) { |
@@ -89,70 +91,12 @@ |
EXPECT_TRUE(prefs->GetDictionary(prefs::kBrowserWindowPlacement) != NULL); |
} |
-@interface BrowserWindowControllerFakeFullscreen : BrowserWindowController { |
- @private |
- // We release the window ourselves, so we don't have to rely on the unittest |
- // doing it for us. |
- scoped_nsobject<NSWindow> fullscreenWindow_; |
-} |
-@end |
-@implementation BrowserWindowControllerFakeFullscreen |
-// Override fullscreenWindow to return a dummy window. This isn't needed to |
-// pass the test, but because the dummy window is only 100x100, it prevents the |
-// real fullscreen window from flashing up and taking over the whole screen.. |
-// We have to return an actual window because layoutSubviews: looks at the |
-// window's frame. |
-- (NSWindow*)fullscreenWindow { |
- if (fullscreenWindow_.get()) |
- return fullscreenWindow_.get(); |
- |
- fullscreenWindow_.reset( |
- [[NSWindow alloc] initWithContentRect:NSMakeRect(0,0,400,400) |
- styleMask:NSBorderlessWindowMask |
- backing:NSBackingStoreBuffered |
- defer:NO]); |
- [fullscreenWindow_ setReleasedWhenClosed:NO]; |
- return fullscreenWindow_.get(); |
-} |
-@end |
- |
-TEST_F(BrowserWindowControllerTest, TestFullscreen) { |
- // Note use of "controller", not "controller_" |
- scoped_nsobject<BrowserWindowController> controller; |
- controller.reset([[BrowserWindowControllerFakeFullscreen alloc] |
- initWithBrowser:browser_helper_.browser() |
- takeOwnership:NO]); |
- EXPECT_FALSE([controller isFullscreen]); |
- [controller setFullscreen:YES]; |
- EXPECT_TRUE([controller isFullscreen]); |
- [controller setFullscreen:NO]; |
- EXPECT_FALSE([controller isFullscreen]); |
- |
- // Confirm the real fullscreen command doesn't return nil |
+TEST_F(BrowserWindowControllerTest, TestFullScreenWindow) { |
+ // Confirm the fullscreen command doesn't return nil. |
+ // See BrowserWindowFullScreenControllerTest for more fullscreen tests. |
EXPECT_TRUE([controller_ fullscreenWindow]); |
} |
-TEST_F(BrowserWindowControllerTest, TestActivate) { |
- // Note use of "controller", not "controller_" |
- scoped_nsobject<BrowserWindowController> controller; |
- controller.reset([[BrowserWindowControllerFakeFullscreen alloc] |
- initWithBrowser:browser_helper_.browser() |
- takeOwnership:NO]); |
- EXPECT_FALSE([controller isFullscreen]); |
- |
- [controller activate]; |
- NSWindow* frontmostWindow = [[NSApp orderedWindows] objectAtIndex:0]; |
- EXPECT_EQ(frontmostWindow, [controller window]); |
- |
- [controller setFullscreen:YES]; |
- [controller activate]; |
- frontmostWindow = [[NSApp orderedWindows] objectAtIndex:0]; |
- EXPECT_EQ(frontmostWindow, [controller fullscreenWindow]); |
- |
- // We have to cleanup after ourselves by unfullscreening. |
- [controller setFullscreen:NO]; |
-} |
- |
TEST_F(BrowserWindowControllerTest, TestNormal) { |
// Force the bookmark bar to be shown. |
browser_helper_.profile()->GetPrefs()-> |
@@ -163,18 +107,15 @@ |
EXPECT_TRUE([controller_ isBookmarkBarVisible]); |
// And make sure a controller for a pop-up window is not normal. |
- scoped_ptr<Browser> popup_browser(Browser::CreateForPopup( |
- browser_helper_.profile())); |
- controller_.reset([[BrowserWindowController alloc] |
- initWithBrowser:popup_browser.get() |
- takeOwnership:NO]); |
- EXPECT_FALSE([controller_ isNormalWindow]); |
- EXPECT_FALSE([controller_ isBookmarkBarVisible]); |
- |
- // The created BrowserWindowController gets autoreleased, so make |
- // sure we don't also release it. |
- // (Confirmed with valgrind). |
- controller_.release(); |
+ // popup_browser will be owned by its window. |
+ Browser *popup_browser(Browser::CreateForPopup(browser_helper_.profile())); |
+ NSWindow *cocoaWindow = popup_browser->window()->GetNativeHandle(); |
+ BrowserWindowController* controller = |
+ static_cast<BrowserWindowController*>([cocoaWindow windowController]); |
+ ASSERT_TRUE([controller isKindOfClass:[BrowserWindowController class]]); |
+ EXPECT_FALSE([controller isNormalWindow]); |
+ EXPECT_FALSE([controller isBookmarkBarVisible]); |
+ [controller close]; |
} |
@interface GTMTheme (BrowserThemeProviderInitialization) |
@@ -470,23 +411,93 @@ |
TEST_F(BrowserWindowControllerTest, TestFindBarOnTop) { |
FindBarBridge bridge; |
- [controller_.get() addFindBar:bridge.find_bar_cocoa_controller()]; |
+ [controller_ addFindBar:bridge.find_bar_cocoa_controller()]; |
// Test that the Z-order of the find bar is on top of everything. |
- NSArray* subviews = [[[controller_.get() window] contentView] subviews]; |
+ NSArray* subviews = [[[controller_ window] contentView] subviews]; |
NSUInteger findBar_index = |
- [subviews indexOfObject:[controller_.get() findBarView]]; |
+ [subviews indexOfObject:[controller_ findBarView]]; |
EXPECT_NE(NSNotFound, findBar_index); |
NSUInteger toolbar_index = |
- [subviews indexOfObject:[controller_.get() toolbarView]]; |
+ [subviews indexOfObject:[controller_ toolbarView]]; |
EXPECT_NE(NSNotFound, toolbar_index); |
NSUInteger bookmark_index = |
- [subviews indexOfObject:[controller_.get() bookmarkView]]; |
+ [subviews indexOfObject:[controller_ bookmarkView]]; |
EXPECT_NE(NSNotFound, bookmark_index); |
EXPECT_GT(findBar_index, toolbar_index); |
EXPECT_GT(findBar_index, bookmark_index); |
} |
+@interface BrowserWindowControllerFakeFullscreen : BrowserWindowController { |
+ @private |
+ // We release the window ourselves, so we don't have to rely on the unittest |
+ // doing it for us. |
+ scoped_nsobject<NSWindow> fullscreenWindow_; |
+} |
+@end |
+class BrowserWindowFullScreenControllerTest : public CocoaTest { |
+ public: |
+ virtual void SetUp() { |
+ CocoaTest::SetUp(); |
+ Browser* browser = browser_helper_.browser(); |
+ controller_ = |
+ [[BrowserWindowControllerFakeFullscreen alloc] initWithBrowser:browser |
+ takeOwnership:NO]; |
+ } |
+ |
+ virtual void TearDown() { |
+ [controller_ close]; |
+ CocoaTest::TearDown(); |
+ } |
+ |
+ public: |
+ BrowserTestHelper browser_helper_; |
+ BrowserWindowController* controller_; |
+}; |
+ |
+TEST_F(BrowserWindowFullScreenControllerTest, TestFullscreen) { |
+ EXPECT_FALSE([controller_ isFullscreen]); |
+ [controller_ setFullscreen:YES]; |
+ EXPECT_TRUE([controller_ isFullscreen]); |
+ [controller_ setFullscreen:NO]; |
+ EXPECT_FALSE([controller_ isFullscreen]); |
+} |
+ |
+TEST_F(BrowserWindowFullScreenControllerTest, TestActivate) { |
+ EXPECT_FALSE([controller_ isFullscreen]); |
+ |
+ [controller_ activate]; |
+ NSWindow* frontmostWindow = [[NSApp orderedWindows] objectAtIndex:0]; |
+ EXPECT_EQ(frontmostWindow, [controller_ window]); |
+ |
+ [controller_ setFullscreen:YES]; |
+ [controller_ activate]; |
+ frontmostWindow = [[NSApp orderedWindows] objectAtIndex:0]; |
+ EXPECT_EQ(frontmostWindow, [controller_ fullscreenWindow]); |
+ |
+ // We have to cleanup after ourselves by unfullscreening. |
+ [controller_ setFullscreen:NO]; |
+} |
+ |
+@implementation BrowserWindowControllerFakeFullscreen |
+// Override fullscreenWindow to return a dummy window. This isn't needed to |
+// pass the test, but because the dummy window is only 100x100, it prevents the |
+// real fullscreen window from flashing up and taking over the whole screen.. |
+// We have to return an actual window because layoutSubviews: looks at the |
+// window's frame. |
+- (NSWindow*)fullscreenWindow { |
+ if (fullscreenWindow_.get()) |
+ return fullscreenWindow_.get(); |
+ |
+ fullscreenWindow_.reset( |
+ [[NSWindow alloc] initWithContentRect:NSMakeRect(0,0,400,400) |
+ styleMask:NSBorderlessWindowMask |
+ backing:NSBackingStoreBuffered |
+ defer:NO]); |
+ return fullscreenWindow_.get(); |
+} |
+@end |
+ |
/* TODO(???): test other methods of BrowserWindowController */ |