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

Side by Side Diff: ui/views/window/dialog_client_view_unittest.cc

Issue 2860953002: Harmony: Apply the upper bound on equal-sized button widths in DialogClientView. (Closed)
Patch Set: Make it 112, per http://crbug.com/671820#c19 Created 3 years, 7 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 | « ui/views/window/dialog_client_view.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/views/window/dialog_client_view.h" 5 #include "ui/views/window/dialog_client_view.h"
6 6
7 #include <map>
8
7 #include "base/macros.h" 9 #include "base/macros.h"
8 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
9 #include "build/build_config.h" 11 #include "build/build_config.h"
10 #include "ui/base/test/material_design_controller_test_api.h"
11 #include "ui/base/ui_base_types.h" 12 #include "ui/base/ui_base_types.h"
12 #include "ui/views/controls/button/checkbox.h" 13 #include "ui/views/controls/button/checkbox.h"
13 #include "ui/views/controls/button/label_button.h" 14 #include "ui/views/controls/button/label_button.h"
14 #include "ui/views/style/platform_style.h" 15 #include "ui/views/style/platform_style.h"
15 #include "ui/views/test/test_views.h" 16 #include "ui/views/test/test_views.h"
16 #include "ui/views/test/widget_test.h" 17 #include "ui/views/test/widget_test.h"
17 #include "ui/views/widget/widget.h" 18 #include "ui/views/widget/widget.h"
18 #include "ui/views/window/dialog_delegate.h" 19 #include "ui/views/window/dialog_delegate.h"
19 20
20 namespace views { 21 namespace views {
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 } 125 }
125 126
126 View* FocusableViewAfter(View* view) { 127 View* FocusableViewAfter(View* view) {
127 const bool dont_loop = false; 128 const bool dont_loop = false;
128 const bool reverse = false; 129 const bool reverse = false;
129 return GetFocusManager()->GetNextFocusableView(view, GetWidget(), reverse, 130 return GetFocusManager()->GetNextFocusableView(view, GetWidget(), reverse,
130 dont_loop); 131 dont_loop);
131 } 132 }
132 133
133 // Set a longer than normal Cancel label so that the minimum button width is 134 // Set a longer than normal Cancel label so that the minimum button width is
134 // exceeded. 135 // exceeded. The resulting width is around 160 pixels, but depends on system
136 // fonts.
135 void SetLongCancelLabel() { 137 void SetLongCancelLabel() {
136 cancel_label_ = base::ASCIIToUTF16("Cancel Cancel Cancel"); 138 cancel_label_ = base::ASCIIToUTF16("Cancel Cancel Cancel");
137 } 139 }
138 140
139 DialogClientView* client_view() { return client_view_; } 141 DialogClientView* client_view() { return client_view_; }
140 142
141 private: 143 private:
142 // The dialog Widget. 144 // The dialog Widget.
143 Widget* widget_ = nullptr; 145 Widget* widget_ = nullptr;
144 146
(...skipping 10 matching lines...) Expand all
155 157
156 gfx::Size preferred_size_; 158 gfx::Size preferred_size_;
157 gfx::Size min_size_; 159 gfx::Size min_size_;
158 gfx::Size max_size_; 160 gfx::Size max_size_;
159 161
160 base::string16 cancel_label_; // If set, the label for the Cancel button. 162 base::string16 cancel_label_; // If set, the label for the Cancel button.
161 163
162 DISALLOW_COPY_AND_ASSIGN(DialogClientViewTest); 164 DISALLOW_COPY_AND_ASSIGN(DialogClientViewTest);
163 }; 165 };
164 166
167 // Helper to test LayoutProvider metric overrides.
168 class TestLayoutProvider : public LayoutProvider {
msw 2017/05/05 18:07:43 nit: Can you move this to its own file and use tha
tapted 2017/05/08 06:53:57 Done.
169 public:
170 TestLayoutProvider() {}
171
172 void Set(int metric, int value) { metrics_[metric] = value; }
173
174 // LayoutProvider:
175 int GetDistanceMetric(int metric) const override {
176 if (metrics_.count(metric))
177 return metrics_.find(metric)->second;
178 return LayoutProvider::GetDistanceMetric(metric);
179 }
180
181 private:
182 std::map<int, int> metrics_;
183
184 DISALLOW_COPY_AND_ASSIGN(TestLayoutProvider);
185 };
186
165 TEST_F(DialogClientViewTest, UpdateButtons) { 187 TEST_F(DialogClientViewTest, UpdateButtons) {
166 // This dialog should start with no buttons. 188 // This dialog should start with no buttons.
167 EXPECT_EQ(GetDialogButtons(), ui::DIALOG_BUTTON_NONE); 189 EXPECT_EQ(GetDialogButtons(), ui::DIALOG_BUTTON_NONE);
168 EXPECT_EQ(NULL, client_view()->ok_button()); 190 EXPECT_EQ(NULL, client_view()->ok_button());
169 EXPECT_EQ(NULL, client_view()->cancel_button()); 191 EXPECT_EQ(NULL, client_view()->cancel_button());
170 const int height_without_buttons = GetUpdatedClientBounds().height(); 192 const int height_without_buttons = GetUpdatedClientBounds().height();
171 193
172 // Update to use both buttons. 194 // Update to use both buttons.
173 SetDialogButtons(ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL); 195 SetDialogButtons(ui::DIALOG_BUTTON_OK | ui::DIALOG_BUTTON_CANCEL);
174 EXPECT_TRUE(client_view()->ok_button()->is_default()); 196 EXPECT_TRUE(client_view()->ok_button()->is_default());
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 EXPECT_EQ(gfx::Size(400, 450 + buttons_size.height()), 375 EXPECT_EQ(gfx::Size(400, 450 + buttons_size.height()),
354 client_view()->GetMinimumSize()); 376 client_view()->GetMinimumSize());
355 EXPECT_EQ(gfx::Size(500, 550 + buttons_size.height()), 377 EXPECT_EQ(gfx::Size(500, 550 + buttons_size.height()),
356 client_view()->GetPreferredSize()); 378 client_view()->GetPreferredSize());
357 EXPECT_EQ(gfx::Size(600, 650 + buttons_size.height()), 379 EXPECT_EQ(gfx::Size(600, 650 + buttons_size.height()),
358 client_view()->GetMaximumSize()); 380 client_view()->GetMaximumSize());
359 } 381 }
360 382
361 // Ensure button widths are linked under MD. 383 // Ensure button widths are linked under MD.
362 TEST_F(DialogClientViewTest, LinkedWidths) { 384 TEST_F(DialogClientViewTest, LinkedWidths) {
363 ui::test::MaterialDesignControllerTestAPI md_test_api( 385 TestLayoutProvider layout_provider;
364 ui::MaterialDesignController::MATERIAL_NORMAL); 386 layout_provider.Set(DISTANCE_BUTTON_MAX_LINKABLE_WIDTH, 200);
365 md_test_api.SetSecondaryUiMaterial(true);
366 SetLongCancelLabel(); 387 SetLongCancelLabel();
367 388
368 SetDialogButtons(ui::DIALOG_BUTTON_OK); 389 SetDialogButtons(ui::DIALOG_BUTTON_OK);
369 CheckContentsIsSetToPreferredSize(); 390 CheckContentsIsSetToPreferredSize();
370 const int ok_button_only_width = client_view()->ok_button()->width(); 391 const int ok_button_only_width = client_view()->ok_button()->width();
371 392
372 SetDialogButtons(ui::DIALOG_BUTTON_CANCEL); 393 SetDialogButtons(ui::DIALOG_BUTTON_CANCEL);
373 CheckContentsIsSetToPreferredSize(); 394 CheckContentsIsSetToPreferredSize();
374 const int cancel_button_width = client_view()->cancel_button()->width(); 395 const int cancel_button_width = client_view()->cancel_button()->width();
375 396
376 // Ensure the single buttons have different preferred widths when alone, and 397 // Ensure the single buttons have different preferred widths when alone, and
377 // that the Cancel button is bigger (so that it dominates the size). 398 // that the Cancel button is bigger (so that it dominates the size).
378 EXPECT_GT(cancel_button_width, ok_button_only_width); 399 EXPECT_GT(cancel_button_width, ok_button_only_width);
379 400
380 SetDialogButtons(ui::DIALOG_BUTTON_CANCEL | ui::DIALOG_BUTTON_OK); 401 SetDialogButtons(ui::DIALOG_BUTTON_CANCEL | ui::DIALOG_BUTTON_OK);
381 CheckContentsIsSetToPreferredSize(); 402 CheckContentsIsSetToPreferredSize();
382 403
383 // OK button should now match the bigger, cancel button. 404 // OK button should now match the bigger, cancel button.
384 EXPECT_EQ(cancel_button_width, client_view()->ok_button()->width()); 405 EXPECT_EQ(cancel_button_width, client_view()->ok_button()->width());
385 406
386 // But not under non-MD. 407 // But not when the size of the cancel button exceeds the max linkable width.
387 md_test_api.SetSecondaryUiMaterial(false); 408 layout_provider.Set(DISTANCE_BUTTON_MAX_LINKABLE_WIDTH, 100);
msw 2017/05/05 18:07:43 nit: EXPECT_GT(cancel_button_width, 100)?
tapted 2017/05/08 06:53:57 Done.
388 client_view()->UpdateDialogButtons(); 409 client_view()->UpdateDialogButtons();
389 CheckContentsIsSetToPreferredSize(); 410 CheckContentsIsSetToPreferredSize();
390 EXPECT_EQ(ok_button_only_width, client_view()->ok_button()->width()); 411 EXPECT_EQ(ok_button_only_width, client_view()->ok_button()->width());
391 md_test_api.SetSecondaryUiMaterial(true); 412 layout_provider.Set(DISTANCE_BUTTON_MAX_LINKABLE_WIDTH, 200);
392 413
393 // The extra view should also match, if it's a matching button type. 414 // The extra view should also match, if it's a matching button type.
394 LabelButton* extra_button = new LabelButton(nullptr, base::string16()); 415 LabelButton* extra_button = new LabelButton(nullptr, base::string16());
395 SetExtraView(extra_button); 416 SetExtraView(extra_button);
396 CheckContentsIsSetToPreferredSize(); 417 CheckContentsIsSetToPreferredSize();
397 EXPECT_EQ(cancel_button_width, extra_button->width()); 418 EXPECT_EQ(cancel_button_width, extra_button->width());
398 419
399 // Remove |extra_button| from the View hierarchy so that it can be replaced. 420 // Remove |extra_button| from the View hierarchy so that it can be replaced.
400 delete extra_button; 421 delete extra_button;
401 422
402 // Checkbox extends LabelButton, but it should not participate in linking. 423 // Checkbox extends LabelButton, but it should not participate in linking.
403 extra_button = new Checkbox(base::string16()); 424 extra_button = new Checkbox(base::string16());
404 SetExtraView(extra_button); 425 SetExtraView(extra_button);
405 CheckContentsIsSetToPreferredSize(); 426 CheckContentsIsSetToPreferredSize();
406 EXPECT_NE(cancel_button_width, extra_button->width()); 427 EXPECT_NE(cancel_button_width, extra_button->width());
407 428
408 // Remove |extra_button| from the View hierarchy so that it can be replaced. 429 // Remove |extra_button| from the View hierarchy so that it can be replaced.
409 delete extra_button; 430 delete extra_button;
410 431
411 // Non-buttons should always be sized to their preferred size. 432 // Non-buttons should always be sized to their preferred size.
412 View* boring_view = new StaticSizedView(gfx::Size(20, 20)); 433 View* boring_view = new StaticSizedView(gfx::Size(20, 20));
413 SetExtraView(boring_view); 434 SetExtraView(boring_view);
414 CheckContentsIsSetToPreferredSize(); 435 CheckContentsIsSetToPreferredSize();
415 EXPECT_EQ(20, boring_view->width()); 436 EXPECT_EQ(20, boring_view->width());
416 } 437 }
417 438
418 } // namespace views 439 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/window/dialog_client_view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698