Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(291)

Side by Side Diff: ash/common/system/tray/tri_view_unittest.cc

Issue 2732813002: chromeos: Move files in //ash/common to //ash, part 1 (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ash/common/system/tray/tri_view.cc ('k') | ash/common/system/tray/view_click_listener.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 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 #include <memory>
6
7 #include "ash/common/system/tray/tri_view.h"
8 #include "base/memory/ptr_util.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/gfx/geometry/insets.h"
11 #include "ui/gfx/geometry/rect_conversions.h"
12 #include "ui/views/layout/box_layout.h"
13 #include "ui/views/test/test_layout_manager.h"
14 #include "ui/views/test/test_views.h"
15 #include "ui/views/view.h"
16
17 namespace ash {
18 namespace {
19
20 // Returns a layout manager that will size views according to their preferred
21 // size.
22 std::unique_ptr<views::LayoutManager> CreatePreferredSizeLayoutManager() {
23 auto layout = base::MakeUnique<views::BoxLayout>(
24 views::BoxLayout::kHorizontal, 0, 0, 0);
25 layout->set_cross_axis_alignment(
26 views::BoxLayout::CROSS_AXIS_ALIGNMENT_START);
27 return std::move(layout);
28 }
29
30 } // namespace
31
32 class TriViewTest : public testing::Test {
33 public:
34 TriViewTest();
35
36 protected:
37 // Convenience function to get the minimum height of |container|.
38 int GetMinHeight(TriView::Container container) const;
39
40 // Returns the bounds of |child| in the coordinate space of
41 // |tri_view_|.
42 gfx::Rect GetBoundsInHost(const views::View* child) const;
43
44 // Wrapper functions to access the internals of |tri_view_|.
45 views::View* GetContainer(TriView::Container container) const;
46
47 // The test target.
48 std::unique_ptr<TriView> tri_view_;
49
50 private:
51 DISALLOW_COPY_AND_ASSIGN(TriViewTest);
52 };
53
54 TriViewTest::TriViewTest() : tri_view_(base::MakeUnique<TriView>()) {}
55
56 int TriViewTest::GetMinHeight(TriView::Container container) const {
57 return tri_view_->GetMinSize(container).height();
58 }
59
60 gfx::Rect TriViewTest::GetBoundsInHost(const views::View* child) const {
61 gfx::RectF rect_f(child->bounds());
62 views::View::ConvertRectToTarget(child, tri_view_.get(), &rect_f);
63 return ToNearestRect(rect_f);
64 }
65
66 views::View* TriViewTest::GetContainer(TriView::Container container) const {
67 return tri_view_->GetContainer(container);
68 }
69
70 TEST_F(TriViewTest, PaddingBetweenContainers) {
71 const int kPaddingBetweenContainers = 3;
72 const int kViewWidth = 10;
73 const int kViewHeight = 10;
74 const gfx::Size kViewSize(kViewWidth, kViewHeight);
75 const int kStartChildExpectedX = 0;
76 const int kCenterChildExpectedX =
77 kStartChildExpectedX + kViewWidth + kPaddingBetweenContainers;
78 const int kEndChildExpectedX =
79 kCenterChildExpectedX + kViewWidth + kPaddingBetweenContainers;
80
81 tri_view_ = base::MakeUnique<TriView>(kPaddingBetweenContainers);
82 tri_view_->SetBounds(0, 0, 100, 10);
83
84 views::View* start_child = new views::StaticSizedView(kViewSize);
85 views::View* center_child = new views::StaticSizedView(kViewSize);
86 views::View* end_child = new views::StaticSizedView(kViewSize);
87
88 tri_view_->AddView(TriView::Container::START, start_child);
89 tri_view_->AddView(TriView::Container::CENTER, center_child);
90 tri_view_->AddView(TriView::Container::END, end_child);
91
92 tri_view_->Layout();
93
94 EXPECT_EQ(kStartChildExpectedX, GetBoundsInHost(start_child).x());
95 EXPECT_EQ(kCenterChildExpectedX, GetBoundsInHost(center_child).x());
96 EXPECT_EQ(kEndChildExpectedX, GetBoundsInHost(end_child).x());
97 }
98
99 TEST_F(TriViewTest, VerticalOrientation) {
100 const int kViewWidth = 10;
101 const int kViewHeight = 10;
102 const gfx::Size kViewSize(kViewWidth, kViewHeight);
103
104 tri_view_ = base::MakeUnique<TriView>(TriView::Orientation::VERTICAL);
105 tri_view_->SetBounds(0, 0, 10, 100);
106
107 views::View* start_child = new views::StaticSizedView(kViewSize);
108 views::View* center_child = new views::StaticSizedView(kViewSize);
109 views::View* end_child = new views::StaticSizedView(kViewSize);
110
111 tri_view_->AddView(TriView::Container::START, start_child);
112 tri_view_->AddView(TriView::Container::CENTER, center_child);
113 tri_view_->AddView(TriView::Container::END, end_child);
114
115 tri_view_->Layout();
116
117 EXPECT_EQ(0, GetBoundsInHost(start_child).y());
118 EXPECT_EQ(kViewWidth, GetBoundsInHost(center_child).y());
119 EXPECT_EQ(kViewWidth * 2, GetBoundsInHost(end_child).y());
120 }
121
122 TEST_F(TriViewTest, MainAxisMinSize) {
123 tri_view_->SetBounds(0, 0, 100, 10);
124 const gfx::Size kMinSize(15, 10);
125 tri_view_->SetMinSize(TriView::Container::START, kMinSize);
126 views::View* child = new views::StaticSizedView(gfx::Size(10, 10));
127 tri_view_->AddView(TriView::Container::CENTER, child);
128
129 tri_view_->Layout();
130
131 EXPECT_EQ(kMinSize.width(), GetBoundsInHost(child).x());
132 }
133
134 TEST_F(TriViewTest, MainAxisMaxSize) {
135 tri_view_->SetBounds(0, 0, 100, 10);
136 const gfx::Size kMaxSize(10, 10);
137
138 tri_view_->SetMaxSize(TriView::Container::START, kMaxSize);
139 views::View* start_child = new views::StaticSizedView(gfx::Size(20, 20));
140 tri_view_->AddView(TriView::Container::START, start_child);
141
142 views::View* center_child = new views::StaticSizedView(gfx::Size(10, 10));
143 tri_view_->AddView(TriView::Container::CENTER, center_child);
144
145 tri_view_->Layout();
146
147 EXPECT_EQ(kMaxSize.width(), GetBoundsInHost(center_child).x());
148 }
149
150 TEST_F(TriViewTest, ViewsAddedToCorrectContainers) {
151 views::View* start_child = new views::StaticSizedView();
152 views::View* center_child = new views::StaticSizedView();
153 views::View* end_child = new views::StaticSizedView();
154
155 tri_view_->AddView(TriView::Container::START, start_child);
156 tri_view_->AddView(TriView::Container::CENTER, center_child);
157 tri_view_->AddView(TriView::Container::END, end_child);
158
159 EXPECT_TRUE(GetContainer(TriView::Container::START)->Contains(start_child));
160 EXPECT_EQ(1, GetContainer(TriView::Container::START)->child_count());
161
162 EXPECT_TRUE(GetContainer(TriView::Container::CENTER)->Contains(center_child));
163 EXPECT_EQ(1, GetContainer(TriView::Container::CENTER)->child_count());
164
165 EXPECT_TRUE(GetContainer(TriView::Container::END)->Contains(end_child));
166 EXPECT_EQ(1, GetContainer(TriView::Container::END)->child_count());
167 }
168
169 TEST_F(TriViewTest, MultipleViewsAddedToTheSameContainer) {
170 views::View* child1 = new views::StaticSizedView();
171 views::View* child2 = new views::StaticSizedView();
172
173 tri_view_->AddView(TriView::Container::START, child1);
174 tri_view_->AddView(TriView::Container::START, child2);
175
176 EXPECT_TRUE(GetContainer(TriView::Container::START)->Contains(child1));
177 EXPECT_TRUE(GetContainer(TriView::Container::START)->Contains(child2));
178 }
179
180 TEST_F(TriViewTest, ViewsRemovedOnRemoveAllChildren) {
181 views::View* child1 = new views::StaticSizedView();
182 views::View* child2 = new views::StaticSizedView();
183
184 tri_view_->AddView(TriView::Container::START, child1);
185 tri_view_->AddView(TriView::Container::START, child2);
186
187 EXPECT_TRUE(GetContainer(TriView::Container::START)->Contains(child1));
188 EXPECT_TRUE(GetContainer(TriView::Container::START)->Contains(child2));
189 EXPECT_EQ(2, GetContainer(TriView::Container::START)->child_count());
190
191 tri_view_->RemoveAllChildren(TriView::Container::START, false);
192
193 EXPECT_FALSE(GetContainer(TriView::Container::START)->Contains(child1));
194 EXPECT_FALSE(GetContainer(TriView::Container::START)->Contains(child2));
195 EXPECT_EQ(0, GetContainer(TriView::Container::START)->child_count());
196
197 delete child1;
198 delete child2;
199 }
200
201 TEST_F(TriViewTest, Insets) {
202 const int kInset = 3;
203 const int kViewHeight = 10;
204 const int kExpectedViewHeight = kViewHeight - 2 * kInset;
205 const gfx::Size kStartViewSize(10, kViewHeight);
206 const gfx::Size kCenterViewSize(100, kViewHeight);
207 const gfx::Size kEndViewSize(10, kViewHeight);
208 const int kHostWidth = 100;
209
210 tri_view_->SetBounds(0, 0, kHostWidth, kViewHeight);
211 tri_view_->SetInsets(gfx::Insets(kInset));
212
213 views::View* start_child = new views::StaticSizedView(kStartViewSize);
214 views::View* center_child = new views::StaticSizedView(kCenterViewSize);
215 views::View* end_child = new views::StaticSizedView(kEndViewSize);
216
217 tri_view_->AddView(TriView::Container::START, start_child);
218 tri_view_->AddView(TriView::Container::CENTER, center_child);
219 tri_view_->AddView(TriView::Container::END, end_child);
220
221 tri_view_->SetFlexForContainer(TriView::Container::CENTER, 1.f);
222 tri_view_->Layout();
223
224 EXPECT_EQ(
225 gfx::Rect(kInset, kInset, kStartViewSize.width(), kExpectedViewHeight),
226 GetBoundsInHost(start_child));
227 EXPECT_EQ(gfx::Rect(kInset + kStartViewSize.width(), kInset,
228 kHostWidth - kStartViewSize.width() -
229 kEndViewSize.width() - 2 * kInset,
230 kExpectedViewHeight),
231 GetBoundsInHost(center_child));
232 EXPECT_EQ(gfx::Rect(kHostWidth - kEndViewSize.width() - kInset, kInset,
233 kEndViewSize.width(), kExpectedViewHeight),
234 GetBoundsInHost(end_child));
235 }
236
237 TEST_F(TriViewTest, InvisibleContainerDoesntTakeUpSpace) {
238 const int kViewWidth = 10;
239 const int kViewHeight = 10;
240 const gfx::Size kViewSize(kViewWidth, kViewHeight);
241
242 tri_view_->SetBounds(0, 0, 30, 10);
243
244 views::View* start_child = new views::StaticSizedView(kViewSize);
245 views::View* center_child = new views::StaticSizedView(kViewSize);
246 views::View* end_child = new views::StaticSizedView(kViewSize);
247
248 tri_view_->AddView(TriView::Container::START, start_child);
249 tri_view_->AddView(TriView::Container::CENTER, center_child);
250 tri_view_->AddView(TriView::Container::END, end_child);
251
252 tri_view_->SetContainerVisible(TriView::Container::START, false);
253 tri_view_->Layout();
254
255 EXPECT_EQ(gfx::Rect(0, 0, 0, 0), GetBoundsInHost(start_child));
256 EXPECT_EQ(0, GetBoundsInHost(center_child).x());
257 EXPECT_EQ(kViewWidth, GetBoundsInHost(end_child).x());
258
259 tri_view_->SetContainerVisible(TriView::Container::START, true);
260 tri_view_->Layout();
261
262 EXPECT_EQ(0, GetBoundsInHost(start_child).x());
263 EXPECT_EQ(kViewWidth, GetBoundsInHost(center_child).x());
264 EXPECT_EQ(kViewWidth * 2, GetBoundsInHost(end_child).x());
265 }
266
267 TEST_F(TriViewTest, NonZeroFlex) {
268 const int kHostWidth = 100;
269 const gfx::Size kDefaultViewSize(10, 10);
270 const gfx::Size kCenterViewSize(100, 10);
271 const gfx::Size kExpectedCenterViewSize(
272 kHostWidth - 2 * kDefaultViewSize.width(), 10);
273
274 tri_view_->SetBounds(0, 0, kHostWidth, 10);
275
276 views::View* start_child = new views::StaticSizedView(kDefaultViewSize);
277 views::View* center_child = new views::StaticSizedView(kCenterViewSize);
278 views::View* end_child = new views::StaticSizedView(kDefaultViewSize);
279
280 tri_view_->AddView(TriView::Container::START, start_child);
281 tri_view_->AddView(TriView::Container::CENTER, center_child);
282 tri_view_->AddView(TriView::Container::END, end_child);
283
284 tri_view_->SetFlexForContainer(TriView::Container::CENTER, 1.f);
285 tri_view_->Layout();
286
287 EXPECT_EQ(kDefaultViewSize, GetBoundsInHost(start_child).size());
288 EXPECT_EQ(kExpectedCenterViewSize, GetBoundsInHost(center_child).size());
289 EXPECT_EQ(kDefaultViewSize, GetBoundsInHost(end_child).size());
290 }
291
292 TEST_F(TriViewTest, NonZeroFlexTakesPrecedenceOverMinSize) {
293 const int kHostWidth = 25;
294 const gfx::Size kViewSize(10, 10);
295 const gfx::Size kMinCenterSize = kViewSize;
296 const gfx::Size kExpectedCenterSize(kHostWidth - 2 * kViewSize.width(), 10);
297
298 tri_view_->SetBounds(0, 0, kHostWidth, 10);
299
300 views::View* start_child = new views::StaticSizedView(kViewSize);
301 views::View* center_child = new views::StaticSizedView(kViewSize);
302 views::View* end_child = new views::StaticSizedView(kViewSize);
303
304 tri_view_->AddView(TriView::Container::START, start_child);
305 tri_view_->AddView(TriView::Container::CENTER, center_child);
306 tri_view_->AddView(TriView::Container::END, end_child);
307
308 tri_view_->SetFlexForContainer(TriView::Container::CENTER, 1.f);
309 tri_view_->SetMinSize(TriView::Container::CENTER, kMinCenterSize);
310 tri_view_->Layout();
311
312 EXPECT_EQ(kViewSize, GetBoundsInHost(start_child).size());
313 EXPECT_EQ(kExpectedCenterSize,
314 GetBoundsInHost(GetContainer(TriView::Container::CENTER)).size());
315 EXPECT_EQ(kViewSize, GetBoundsInHost(end_child).size());
316 }
317
318 TEST_F(TriViewTest, NonZeroFlexTakesPrecedenceOverMaxSize) {
319 const int kHostWidth = 100;
320 const gfx::Size kViewSize(10, 10);
321 const gfx::Size kMaxCenterSize(20, 10);
322 const gfx::Size kExpectedCenterSize(kHostWidth - 2 * kViewSize.width(), 10);
323
324 tri_view_->SetBounds(0, 0, kHostWidth, 10);
325
326 views::View* start_child = new views::StaticSizedView(kViewSize);
327 views::View* center_child = new views::StaticSizedView(kViewSize);
328 views::View* end_child = new views::StaticSizedView(kViewSize);
329
330 tri_view_->AddView(TriView::Container::START, start_child);
331 tri_view_->AddView(TriView::Container::CENTER, center_child);
332 tri_view_->AddView(TriView::Container::END, end_child);
333
334 tri_view_->SetFlexForContainer(TriView::Container::CENTER, 1.f);
335 tri_view_->SetMaxSize(TriView::Container::CENTER, kMaxCenterSize);
336 tri_view_->Layout();
337
338 EXPECT_EQ(kViewSize, GetBoundsInHost(start_child).size());
339 EXPECT_EQ(kExpectedCenterSize,
340 GetBoundsInHost(GetContainer(TriView::Container::CENTER)).size());
341 EXPECT_EQ(kViewSize, GetBoundsInHost(end_child).size());
342 }
343
344 TEST_F(TriViewTest, ChildViewsPreferredSizeChanged) {
345 const int kHostWidth = 500;
346 const gfx::Size kMinStartSize(100, 10);
347
348 tri_view_->SetBounds(0, 0, kHostWidth, 10);
349 tri_view_->SetMinSize(TriView::Container::START, kMinStartSize);
350 tri_view_->SetContainerLayout(TriView::Container::START,
351 CreatePreferredSizeLayoutManager());
352 tri_view_->SetFlexForContainer(TriView::Container::CENTER, 1.f);
353 tri_view_->Layout();
354
355 views::ProportionallySizedView* child_view =
356 new views::ProportionallySizedView(1);
357 tri_view_->AddView(TriView::Container::START, child_view);
358
359 child_view->SetPreferredWidth(1);
360 EXPECT_EQ(child_view->GetPreferredSize(), child_view->size());
361
362 child_view->SetPreferredWidth(2);
363 EXPECT_EQ(child_view->GetPreferredSize(), child_view->size());
364 }
365
366 TEST_F(TriViewTest, SetMinHeight) {
367 const int kMinHeight = 10;
368
369 EXPECT_NE(kMinHeight, GetMinHeight(TriView::Container::START));
370 EXPECT_NE(kMinHeight, GetMinHeight(TriView::Container::CENTER));
371 EXPECT_NE(kMinHeight, GetMinHeight(TriView::Container::END));
372
373 tri_view_->SetMinHeight(kMinHeight);
374
375 EXPECT_EQ(kMinHeight, GetMinHeight(TriView::Container::START));
376 EXPECT_EQ(kMinHeight, GetMinHeight(TriView::Container::CENTER));
377 EXPECT_EQ(kMinHeight, GetMinHeight(TriView::Container::END));
378 }
379
380 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/system/tray/tri_view.cc ('k') | ash/common/system/tray/view_click_listener.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698