OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" | 5 #include "ash/frame/caption_buttons/frame_caption_button_container_view.h" |
6 | 6 |
7 #include "ash/frame/caption_buttons/frame_caption_button.h" | 7 #include "ash/frame/caption_buttons/frame_caption_button.h" |
8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
9 #include "ash/test/ash_test_base.h" | 9 #include "ash/test/ash_test_base.h" |
10 #include "ash/wm/maximize_mode/maximize_mode_controller.h" | 10 #include "ash/wm/maximize_mode/maximize_mode_controller.h" |
11 #include "grit/ash_resources.h" | 11 #include "grit/ash_resources.h" |
12 #include "ui/gfx/geometry/rect.h" | 12 #include "ui/gfx/geometry/rect.h" |
13 #include "ui/views/widget/widget.h" | 13 #include "ui/views/widget/widget.h" |
14 #include "ui/views/widget/widget_delegate.h" | 14 #include "ui/views/widget/widget_delegate.h" |
15 | 15 |
16 namespace ash { | 16 namespace ash { |
17 | 17 |
18 namespace { | 18 namespace { |
19 | 19 |
20 class TestWidgetDelegate : public views::WidgetDelegateView { | 20 class TestWidgetDelegate : public views::WidgetDelegateView { |
21 public: | 21 public: |
22 TestWidgetDelegate(bool can_maximize, bool can_minimize) | 22 explicit TestWidgetDelegate(bool can_maximize) : can_maximize_(can_maximize) { |
23 : can_maximize_(can_maximize), can_minimize_(can_minimize) {} | 23 } |
24 virtual ~TestWidgetDelegate() { | 24 virtual ~TestWidgetDelegate() { |
25 } | 25 } |
26 | 26 |
27 virtual bool CanMaximize() const OVERRIDE { | 27 virtual bool CanMaximize() const OVERRIDE { |
28 return can_maximize_; | 28 return can_maximize_; |
29 } | 29 } |
30 | 30 |
31 virtual bool CanMinimize() const OVERRIDE { | 31 virtual bool CanMinimize() const OVERRIDE { |
32 return can_minimize_; | 32 return can_maximize_; |
33 } | 33 } |
34 | 34 |
35 private: | 35 private: |
36 bool can_maximize_; | 36 bool can_maximize_; |
37 bool can_minimize_; | |
38 | 37 |
39 DISALLOW_COPY_AND_ASSIGN(TestWidgetDelegate); | 38 DISALLOW_COPY_AND_ASSIGN(TestWidgetDelegate); |
40 }; | 39 }; |
41 | 40 |
42 } // namespace | 41 } // namespace |
43 | 42 |
44 class FrameCaptionButtonContainerViewTest : public ash::test::AshTestBase { | 43 class FrameCaptionButtonContainerViewTest : public ash::test::AshTestBase { |
45 public: | 44 public: |
46 enum MaximizeAllowed { | 45 enum MaximizeAllowed { |
47 MAXIMIZE_ALLOWED, | 46 MAXIMIZE_ALLOWED, |
48 MAXIMIZE_DISALLOWED | 47 MAXIMIZE_DISALLOWED |
49 }; | 48 }; |
50 | 49 |
51 enum MinimizeAllowed { | |
52 MINIMIZE_ALLOWED, | |
53 MINIMIZE_DISALLOWED | |
54 }; | |
55 | |
56 FrameCaptionButtonContainerViewTest() { | 50 FrameCaptionButtonContainerViewTest() { |
57 } | 51 } |
58 | 52 |
59 virtual ~FrameCaptionButtonContainerViewTest() { | 53 virtual ~FrameCaptionButtonContainerViewTest() { |
60 } | 54 } |
61 | 55 |
62 // Creates a widget which allows maximizing based on |maximize_allowed|. | 56 // Creates a widget which allows maximizing based on |maximize_allowed|. |
63 // The caller takes ownership of the returned widget. | 57 // The caller takes ownership of the returned widget. |
64 views::Widget* CreateTestWidget( | 58 views::Widget* CreateTestWidget( |
65 MaximizeAllowed maximize_allowed, | 59 MaximizeAllowed maximize_allowed) WARN_UNUSED_RESULT { |
66 MinimizeAllowed minimize_allowed) WARN_UNUSED_RESULT { | |
67 views::Widget* widget = new views::Widget; | 60 views::Widget* widget = new views::Widget; |
68 views::Widget::InitParams params; | 61 views::Widget::InitParams params; |
69 params.delegate = new TestWidgetDelegate( | 62 params.delegate = new TestWidgetDelegate( |
70 maximize_allowed == MAXIMIZE_ALLOWED, | 63 maximize_allowed == MAXIMIZE_ALLOWED); |
71 minimize_allowed == MINIMIZE_ALLOWED); | |
72 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 64 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
73 params.context = CurrentContext(); | 65 params.context = CurrentContext(); |
74 widget->Init(params); | 66 widget->Init(params); |
75 return widget; | 67 return widget; |
76 } | 68 } |
77 | 69 |
78 // Sets |container| to use arbitrary images for the buttons. Setting the | 70 // Sets |container| to use arbitrary images for the buttons. Setting the |
79 // images causes the buttons to have non-empty sizes. | 71 // images causes the buttons to have non-empty sizes. |
80 void SetMockImages(FrameCaptionButtonContainerView* container) { | 72 void SetMockImages(FrameCaptionButtonContainerView* container) { |
81 for (int icon = 0; icon < CAPTION_BUTTON_ICON_COUNT; ++icon) { | 73 for (int icon = 0; icon < CAPTION_BUTTON_ICON_COUNT; ++icon) { |
(...skipping 29 matching lines...) Expand all Loading... |
111 } | 103 } |
112 | 104 |
113 private: | 105 private: |
114 DISALLOW_COPY_AND_ASSIGN(FrameCaptionButtonContainerViewTest); | 106 DISALLOW_COPY_AND_ASSIGN(FrameCaptionButtonContainerViewTest); |
115 }; | 107 }; |
116 | 108 |
117 // Test how the allowed actions affect which caption buttons are visible. | 109 // Test how the allowed actions affect which caption buttons are visible. |
118 TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) { | 110 TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) { |
119 // All the buttons should be visible when minimizing and maximizing are | 111 // All the buttons should be visible when minimizing and maximizing are |
120 // allowed. | 112 // allowed. |
121 FrameCaptionButtonContainerView container1( | 113 scoped_ptr<views::Widget> widget_can_maximize( |
122 CreateTestWidget(MAXIMIZE_ALLOWED, MINIMIZE_ALLOWED)); | 114 CreateTestWidget(MAXIMIZE_ALLOWED)); |
| 115 FrameCaptionButtonContainerView container1(widget_can_maximize.get(), |
| 116 FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); |
123 SetMockImages(&container1); | 117 SetMockImages(&container1); |
124 container1.Layout(); | 118 container1.Layout(); |
125 FrameCaptionButtonContainerView::TestApi t1(&container1); | 119 FrameCaptionButtonContainerView::TestApi t1(&container1); |
126 EXPECT_TRUE(t1.minimize_button()->visible()); | 120 EXPECT_TRUE(t1.minimize_button()->visible()); |
127 EXPECT_TRUE(t1.size_button()->visible()); | 121 EXPECT_TRUE(t1.size_button()->visible()); |
128 EXPECT_TRUE(t1.close_button()->visible()); | 122 EXPECT_TRUE(t1.close_button()->visible()); |
129 EXPECT_TRUE(CheckButtonsAtEdges( | 123 EXPECT_TRUE(CheckButtonsAtEdges( |
130 &container1, *t1.minimize_button(), *t1.close_button())); | 124 &container1, *t1.minimize_button(), *t1.close_button())); |
131 | 125 |
132 // The minimize button should be visible when minimizing is allowed but | 126 // The minimize button should be visible when minimizing is allowed but |
133 // maximizing is disallowed. | 127 // maximizing is disallowed. |
134 FrameCaptionButtonContainerView container2( | 128 scoped_ptr<views::Widget> widget_cannot_maximize( |
135 CreateTestWidget(MAXIMIZE_DISALLOWED, MINIMIZE_ALLOWED)); | 129 CreateTestWidget(MAXIMIZE_DISALLOWED)); |
| 130 FrameCaptionButtonContainerView container2(widget_cannot_maximize.get(), |
| 131 FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); |
136 SetMockImages(&container2); | 132 SetMockImages(&container2); |
137 container2.Layout(); | 133 container2.Layout(); |
138 FrameCaptionButtonContainerView::TestApi t2(&container2); | 134 FrameCaptionButtonContainerView::TestApi t2(&container2); |
139 EXPECT_TRUE(t2.minimize_button()->visible()); | 135 EXPECT_TRUE(t2.minimize_button()->visible()); |
140 EXPECT_FALSE(t2.size_button()->visible()); | 136 EXPECT_FALSE(t2.size_button()->visible()); |
141 EXPECT_TRUE(t2.close_button()->visible()); | 137 EXPECT_TRUE(t2.close_button()->visible()); |
142 EXPECT_TRUE(CheckButtonsAtEdges( | 138 EXPECT_TRUE(CheckButtonsAtEdges( |
143 &container2, *t2.minimize_button(), *t2.close_button())); | 139 &container2, *t2.minimize_button(), *t2.close_button())); |
144 | 140 |
145 // Neither the minimize button nor the size button should be visible when | 141 // Neither the minimize button nor the size button should be visible when |
146 // neither minimizing nor maximizing are allowed. | 142 // neither minimizing nor maximizing are allowed. |
147 FrameCaptionButtonContainerView container3( | 143 FrameCaptionButtonContainerView container3(widget_cannot_maximize.get(), |
148 CreateTestWidget(MAXIMIZE_DISALLOWED, MINIMIZE_DISALLOWED)); | 144 FrameCaptionButtonContainerView::MINIMIZE_DISALLOWED); |
149 SetMockImages(&container3); | 145 SetMockImages(&container3); |
150 container3.Layout(); | 146 container3.Layout(); |
151 FrameCaptionButtonContainerView::TestApi t3(&container3); | 147 FrameCaptionButtonContainerView::TestApi t3(&container3); |
152 EXPECT_FALSE(t3.minimize_button()->visible()); | 148 EXPECT_FALSE(t3.minimize_button()->visible()); |
153 EXPECT_FALSE(t3.size_button()->visible()); | 149 EXPECT_FALSE(t3.size_button()->visible()); |
154 EXPECT_TRUE(t3.close_button()->visible()); | 150 EXPECT_TRUE(t3.close_button()->visible()); |
155 EXPECT_TRUE(CheckButtonsAtEdges( | 151 EXPECT_TRUE(CheckButtonsAtEdges( |
156 &container3, *t3.close_button(), *t3.close_button())); | 152 &container3, *t3.close_button(), *t3.close_button())); |
157 } | 153 } |
158 | 154 |
159 // Tests that the layout animations trigered by button visibility result in the | 155 // Tests that the layout animations trigered by button visibility result in the |
160 // correct placement of the buttons. | 156 // correct placement of the buttons. |
161 TEST_F(FrameCaptionButtonContainerViewTest, | 157 TEST_F(FrameCaptionButtonContainerViewTest, |
162 TestUpdateSizeButtonVisibilityAnimation) { | 158 TestUpdateSizeButtonVisibilityAnimation) { |
163 FrameCaptionButtonContainerView container( | 159 scoped_ptr<views::Widget> widget_can_maximize( |
164 CreateTestWidget(MAXIMIZE_ALLOWED, MINIMIZE_ALLOWED)); | 160 CreateTestWidget(MAXIMIZE_ALLOWED)); |
| 161 FrameCaptionButtonContainerView container(widget_can_maximize.get(), |
| 162 FrameCaptionButtonContainerView::MINIMIZE_ALLOWED); |
165 SetMockImages(&container); | 163 SetMockImages(&container); |
166 container.SetBoundsRect(gfx::Rect(container.GetPreferredSize())); | 164 container.SetBoundsRect(gfx::Rect(container.GetPreferredSize())); |
167 container.Layout(); | 165 container.Layout(); |
168 | 166 |
169 FrameCaptionButtonContainerView::TestApi test(&container); | 167 FrameCaptionButtonContainerView::TestApi test(&container); |
170 gfx::Rect initial_minimize_button_bounds = test.minimize_button()->bounds(); | 168 gfx::Rect initial_minimize_button_bounds = test.minimize_button()->bounds(); |
171 gfx::Rect initial_size_button_bounds = test.size_button()->bounds(); | 169 gfx::Rect initial_size_button_bounds = test.size_button()->bounds(); |
172 gfx::Rect initial_close_button_bounds = test.close_button()->bounds(); | 170 gfx::Rect initial_close_button_bounds = test.close_button()->bounds(); |
173 gfx::Rect initial_container_bounds = container.bounds(); | 171 gfx::Rect initial_container_bounds = container.bounds(); |
174 | 172 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 EXPECT_TRUE(test.size_button()->visible()); | 207 EXPECT_TRUE(test.size_button()->visible()); |
210 EXPECT_TRUE(test.close_button()->visible()); | 208 EXPECT_TRUE(test.close_button()->visible()); |
211 EXPECT_EQ(initial_minimize_button_bounds, test.minimize_button()->bounds()); | 209 EXPECT_EQ(initial_minimize_button_bounds, test.minimize_button()->bounds()); |
212 EXPECT_EQ(initial_size_button_bounds, test.size_button()->bounds()); | 210 EXPECT_EQ(initial_size_button_bounds, test.size_button()->bounds()); |
213 EXPECT_EQ(initial_close_button_bounds, test.close_button()->bounds()); | 211 EXPECT_EQ(initial_close_button_bounds, test.close_button()->bounds()); |
214 EXPECT_EQ(container.GetPreferredSize().width(), | 212 EXPECT_EQ(container.GetPreferredSize().width(), |
215 initial_container_bounds.width()); | 213 initial_container_bounds.width()); |
216 } | 214 } |
217 | 215 |
218 } // namespace ash | 216 } // namespace ash |
OLD | NEW |