summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/browser_window_controller_unittest.mm
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/cocoa/browser_window_controller_unittest.mm')
-rw-r--r--chrome/browser/cocoa/browser_window_controller_unittest.mm133
1 files changed, 129 insertions, 4 deletions
diff --git a/chrome/browser/cocoa/browser_window_controller_unittest.mm b/chrome/browser/cocoa/browser_window_controller_unittest.mm
index f816a76..4b40a67 100644
--- a/chrome/browser/cocoa/browser_window_controller_unittest.mm
+++ b/chrome/browser/cocoa/browser_window_controller_unittest.mm
@@ -15,8 +15,26 @@
#include "chrome/test/testing_profile.h"
#include "testing/gtest/include/gtest/gtest.h"
-@interface BrowserWindowController (ExposedForTesting)
+@interface BrowserWindowController (JustForTesting)
+// Already defined in BWC.
- (void)saveWindowPositionToPrefs:(PrefService*)prefs;
+- (void)layoutSubviews;
+@end
+
+@interface BrowserWindowController (ExposedForTesting)
+// Implementations are below.
+- (NSView*)infoBarContainerView;
+- (NSView*)toolbarView;
+@end
+
+@implementation BrowserWindowController (ExposedForTesting)
+- (NSView*)infoBarContainerView {
+ return [infoBarContainerController_ view];
+}
+
+- (NSView*)toolbarView {
+ return [toolbarController_ view];
+}
@end
class BrowserWindowControllerTest : public testing::Test {
@@ -52,13 +70,29 @@ TEST_F(BrowserWindowControllerTest, TestSaveWindowPosition) {
}
@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
-// This isn't needed to pass the test, but does prevent an actual
-// fullscreen from happening.
+// 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 {
- return nil;
+ 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
@@ -132,4 +166,95 @@ TEST_F(BrowserWindowControllerTest, TestIncognitoWidthSpace) {
}
#endif
+@interface BrowserWindowControllerResizePong : BrowserWindowController {
+}
+@end
+
+@implementation BrowserWindowControllerResizePong
+@end
+
+// Test to make sure resizing and relaying-out subviews works correctly.
+TEST_F(BrowserWindowControllerTest, TestResizeViews) {
+ TabStripView* tabstrip = [controller_ tabStripView];
+ NSView* contentView = [[tabstrip window] contentView];
+ NSView* toolbar = [controller_ toolbarView];
+ NSView* infobar = [controller_ infoBarContainerView];
+ NSView* contentArea = [controller_ tabContentArea];
+
+ // We need to muck with the views a bit to put us in a consistent state before
+ // we start resizing. In particular, we need to move the tab strip to be
+ // immediately above the content area, since we layout views to be directly
+ // under the tab strip. We also explicitly set the contentView's frame to be
+ // 800x600.
+ [contentView setFrame:NSMakeRect(0, 0, 800, 600)];
+ NSRect tabstripFrame = [tabstrip frame];
+ tabstripFrame.origin.y = NSMaxY([contentView frame]);
+ [tabstrip setFrame:tabstripFrame];
+
+ // Make sure each view is as tall as we expect.
+ ASSERT_EQ(39, NSHeight([toolbar frame]));
+ ASSERT_EQ(0, NSHeight([infobar frame]));
+
+ // Force a layout and check each view's frame.
+ // contentView should be at 0,0 800x600
+ // contentArea should be at 0,0 800x561
+ // infobar should be at 0,561 800x0
+ // toolbar should be at 0,561 800x39
+ [controller_ layoutSubviews];
+ EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600)));
+ EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 0, 800, 561)));
+ EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 561, 800, 0)));
+ EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 561, 800, 39)));
+
+ // Expand the infobar to 60px and recheck
+ // contentView should be at 0,0 800x600
+ // contentArea should be at 0,0 800x501
+ // infobar should be at 0,501 800x60
+ // toolbar should be at 0,561 800x39
+ [controller_ resizeView:infobar newHeight:60];
+ EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600)));
+ EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 0, 800, 501)));
+ EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 501, 800, 60)));
+ EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 561, 800, 39)));
+
+ // Expand the toolbar to 64px and recheck
+ // contentView should be at 0,0 800x600
+ // contentArea should be at 0,0 800x476
+ // infobar should be at 0,476 800x60
+ // toolbar should be at 0,536 800x64
+ [controller_ resizeView:toolbar newHeight:64];
+ EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600)));
+ EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 0, 800, 476)));
+ EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 476, 800, 60)));
+ EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 536, 800, 64)));
+
+ // Add a 30px download shelf and recheck
+ // contentView should be at 0,0 800x600
+ // download should be at 0,0 800x30
+ // contentArea should be at 0,30 800x446
+ // infobar should be at 0,476 800x60
+ // toolbar should be at 0,536 800x64
+ NSView* download = [[controller_ downloadShelf] view];
+ [controller_ resizeView:download newHeight:30];
+ EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600)));
+ EXPECT_TRUE(NSEqualRects([download frame], NSMakeRect(0, 0, 800, 30)));
+ EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 30, 800, 446)));
+ EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 476, 800, 60)));
+ EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 536, 800, 64)));
+
+ // Shrink the infobar to 0px and toolbar to 39px and recheck
+ // contentView should be at 0,0 800x600
+ // download should be at 0,0 800x30
+ // contentArea should be at 0,30 800x531
+ // infobar should be at 0,561 800x0
+ // toolbar should be at 0,561 800x39
+ [controller_ resizeView:infobar newHeight:0];
+ [controller_ resizeView:toolbar newHeight:39];
+ EXPECT_TRUE(NSEqualRects([contentView frame], NSMakeRect(0, 0, 800, 600)));
+ EXPECT_TRUE(NSEqualRects([download frame], NSMakeRect(0, 0, 800, 30)));
+ EXPECT_TRUE(NSEqualRects([contentArea frame], NSMakeRect(0, 30, 800, 531)));
+ EXPECT_TRUE(NSEqualRects([infobar frame], NSMakeRect(0, 561, 800, 0)));
+ EXPECT_TRUE(NSEqualRects([toolbar frame], NSMakeRect(0, 561, 800, 39)));
+}
+
/* TODO(???): test other methods of BrowserWindowController */