1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#import <Cocoa/Cocoa.h>
6
7#include "base/mac/scoped_nsobject.h"
8#import "chrome/browser/ui/cocoa/browser_window_layout.h"
9#include "testing/gtest/include/gtest/gtest.h"
10
11class BrowserWindowLayoutTest : public testing::Test {
12 public:
13  BrowserWindowLayoutTest() {}
14  virtual void SetUp() OVERRIDE {
15    layout.reset([[BrowserWindowLayout alloc] init]);
16
17    [layout setContentViewSize:NSMakeSize(600, 600)];
18    [layout setWindowSize:NSMakeSize(600, 622)];
19    [layout setInAnyFullscreen:NO];
20    [layout setHasTabStrip:YES];
21    [layout setHasToolbar:YES];
22    [layout setToolbarHeight:32];
23    [layout setPlaceBookmarkBarBelowInfoBar:NO];
24    [layout setBookmarkBarHidden:NO];
25    [layout setBookmarkBarHeight:26];
26    [layout setInfoBarHeight:72];
27    [layout setPageInfoBubblePointY:13];
28    [layout setHasDownloadShelf:YES];
29    [layout setDownloadShelfHeight:44];
30  }
31
32  base::scoped_nsobject<BrowserWindowLayout> layout;
33
34 private:
35  DISALLOW_COPY_AND_ASSIGN(BrowserWindowLayoutTest);
36};
37
38TEST_F(BrowserWindowLayoutTest, TestAllViews) {
39  chrome::LayoutOutput output = [layout computeLayout];
40
41  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 585, 600, 37), output.tabStripFrame));
42  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 553, 600, 32), output.toolbarFrame));
43  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 527, 600, 26), output.bookmarkFrame));
44  EXPECT_TRUE(NSEqualRects(NSZeroRect, output.fullscreenBackingBarFrame));
45  EXPECT_EQ(527, output.findBarMaxY);
46  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 455, 600, 111), output.infoBarFrame));
47  EXPECT_TRUE(
48      NSEqualRects(NSMakeRect(0, 0, 600, 44), output.downloadShelfFrame));
49  EXPECT_TRUE(
50      NSEqualRects(NSMakeRect(0, 44, 600, 411), output.contentAreaFrame));
51}
52
53TEST_F(BrowserWindowLayoutTest, TestAllViewsFullscreen) {
54  // Content view has same size as window in AppKit Fullscreen.
55  [layout setContentViewSize:NSMakeSize(600, 622)];
56  [layout setInAnyFullscreen:YES];
57  [layout setFullscreenSlidingStyle:fullscreen_mac::OMNIBOX_TABS_PRESENT];
58  [layout setFullscreenMenubarOffset:0];
59  [layout setFullscreenToolbarFraction:0];
60
61  chrome::LayoutOutput output = [layout computeLayout];
62
63  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 585, 600, 37), output.tabStripFrame));
64  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 553, 600, 32), output.toolbarFrame));
65  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 527, 600, 26), output.bookmarkFrame));
66  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 527, 600, 95),
67                           output.fullscreenBackingBarFrame));
68  EXPECT_EQ(527, output.findBarMaxY);
69  EXPECT_EQ(527, output.fullscreenExitButtonMaxY);
70  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 455, 600, 111), output.infoBarFrame));
71  EXPECT_TRUE(
72      NSEqualRects(NSMakeRect(0, 0, 600, 44), output.downloadShelfFrame));
73  EXPECT_TRUE(
74      NSEqualRects(NSMakeRect(0, 44, 600, 411), output.contentAreaFrame));
75}
76
77TEST_F(BrowserWindowLayoutTest, TestAllViewsFullscreenMenuBarShowing) {
78  // Content view has same size as window in AppKit Fullscreen.
79  [layout setContentViewSize:NSMakeSize(600, 622)];
80  [layout setInAnyFullscreen:YES];
81  [layout setFullscreenSlidingStyle:fullscreen_mac::OMNIBOX_TABS_PRESENT];
82  [layout setFullscreenMenubarOffset:-10];
83  [layout setFullscreenToolbarFraction:0];
84
85  chrome::LayoutOutput output = [layout computeLayout];
86
87  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 575, 600, 37), output.tabStripFrame));
88  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 543, 600, 32), output.toolbarFrame));
89  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 517, 600, 26), output.bookmarkFrame));
90  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 517, 600, 95),
91                           output.fullscreenBackingBarFrame));
92  EXPECT_EQ(517, output.findBarMaxY);
93  EXPECT_EQ(517, output.fullscreenExitButtonMaxY);
94  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 445, 600, 111), output.infoBarFrame));
95  EXPECT_TRUE(
96      NSEqualRects(NSMakeRect(0, 0, 600, 44), output.downloadShelfFrame));
97  EXPECT_TRUE(
98      NSEqualRects(NSMakeRect(0, 44, 600, 411), output.contentAreaFrame));
99}
100
101TEST_F(BrowserWindowLayoutTest, TestPopupWindow) {
102  [layout setHasTabStrip:NO];
103  [layout setHasToolbar:NO];
104  [layout setHasLocationBar:YES];
105  [layout setBookmarkBarHidden:YES];
106  [layout setHasDownloadShelf:NO];
107
108  chrome::LayoutOutput output = [layout computeLayout];
109
110  EXPECT_TRUE(NSEqualRects(NSZeroRect, output.tabStripFrame));
111  EXPECT_TRUE(NSEqualRects(NSMakeRect(1, 568, 598, 32), output.toolbarFrame));
112  EXPECT_TRUE(NSEqualRects(NSZeroRect, output.bookmarkFrame));
113  EXPECT_TRUE(NSEqualRects(NSZeroRect, output.fullscreenBackingBarFrame));
114  EXPECT_EQ(567, output.findBarMaxY);
115  EXPECT_TRUE(NSEqualRects(NSMakeRect(0, 495, 600, 86), output.infoBarFrame));
116  EXPECT_TRUE(NSEqualRects(NSZeroRect, output.downloadShelfFrame));
117  EXPECT_TRUE(
118      NSEqualRects(NSMakeRect(0, 0, 600, 495), output.contentAreaFrame));
119}
120