| OLD | NEW |
| 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/controls/button/label_button.h" | 5 #include "ui/views/controls/button/label_button.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 return gfx::ImageSkia::CreateFrom1xBitmap(bitmap); | 37 return gfx::ImageSkia::CreateFrom1xBitmap(bitmap); |
| 38 } | 38 } |
| 39 | 39 |
| 40 } // namespace | 40 } // namespace |
| 41 | 41 |
| 42 namespace views { | 42 namespace views { |
| 43 | 43 |
| 44 // Testing button that exposes protected methods. | 44 // Testing button that exposes protected methods. |
| 45 class TestLabelButton : public LabelButton { | 45 class TestLabelButton : public LabelButton { |
| 46 public: | 46 public: |
| 47 explicit TestLabelButton(const base::string16& text = base::string16()) | 47 explicit TestLabelButton(const base::string16& text = base::string16(), |
| 48 : LabelButton(nullptr, text) {} | 48 int button_context = style::CONTEXT_BUTTON) |
| 49 : LabelButton(nullptr, text, button_context) {} |
| 49 | 50 |
| 50 using LabelButton::label; | 51 using LabelButton::label; |
| 51 using LabelButton::image; | 52 using LabelButton::image; |
| 52 using LabelButton::ResetColorsFromNativeTheme; | 53 using LabelButton::ResetColorsFromNativeTheme; |
| 53 | 54 |
| 54 private: | 55 private: |
| 55 DISALLOW_COPY_AND_ASSIGN(TestLabelButton); | 56 DISALLOW_COPY_AND_ASSIGN(TestLabelButton); |
| 56 }; | 57 }; |
| 57 | 58 |
| 58 class LabelButtonTest : public test::WidgetTest { | 59 class LabelButtonTest : public test::WidgetTest { |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 EXPECT_EQ(button.style(), Button::STYLE_TEXTBUTTON); | 142 EXPECT_EQ(button.style(), Button::STYLE_TEXTBUTTON); |
| 142 EXPECT_EQ(Button::STATE_NORMAL, button.state()); | 143 EXPECT_EQ(Button::STATE_NORMAL, button.state()); |
| 143 | 144 |
| 144 EXPECT_EQ(button.image()->parent(), &button); | 145 EXPECT_EQ(button.image()->parent(), &button); |
| 145 EXPECT_EQ(button.label()->parent(), &button); | 146 EXPECT_EQ(button.label()->parent(), &button); |
| 146 } | 147 } |
| 147 | 148 |
| 148 TEST_F(LabelButtonTest, Label) { | 149 TEST_F(LabelButtonTest, Label) { |
| 149 EXPECT_TRUE(button_->GetText().empty()); | 150 EXPECT_TRUE(button_->GetText().empty()); |
| 150 | 151 |
| 151 const gfx::FontList font_list; | 152 const gfx::FontList font_list = button_->label()->font_list(); |
| 152 const base::string16 short_text(ASCIIToUTF16("abcdefghijklm")); | 153 const base::string16 short_text(ASCIIToUTF16("abcdefghijklm")); |
| 153 const base::string16 long_text(ASCIIToUTF16("abcdefghijklmnopqrstuvwxyz")); | 154 const base::string16 long_text(ASCIIToUTF16("abcdefghijklmnopqrstuvwxyz")); |
| 154 const int short_text_width = gfx::GetStringWidth(short_text, font_list); | 155 const int short_text_width = gfx::GetStringWidth(short_text, font_list); |
| 155 const int long_text_width = gfx::GetStringWidth(long_text, font_list); | 156 const int long_text_width = gfx::GetStringWidth(long_text, font_list); |
| 156 | 157 |
| 157 // The width increases monotonically with string size (it does not shrink). | 158 // The width increases monotonically with string size (it does not shrink). |
| 158 EXPECT_LT(button_->GetPreferredSize().width(), short_text_width); | 159 EXPECT_LT(button_->GetPreferredSize().width(), short_text_width); |
| 159 button_->SetText(short_text); | 160 button_->SetText(short_text); |
| 160 EXPECT_GT(button_->GetPreferredSize().height(), font_list.GetHeight()); | 161 EXPECT_GT(button_->GetPreferredSize().height(), font_list.GetHeight()); |
| 161 EXPECT_GT(button_->GetPreferredSize().width(), short_text_width); | 162 EXPECT_GT(button_->GetPreferredSize().width(), short_text_width); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 button_->SetMaxSize(gfx::Size(large_size, 1)); | 232 button_->SetMaxSize(gfx::Size(large_size, 1)); |
| 232 EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(large_size, 1)); | 233 EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(large_size, 1)); |
| 233 | 234 |
| 234 // Clear the monotonically increasing minimum size. | 235 // Clear the monotonically increasing minimum size. |
| 235 button_->SetMinSize(gfx::Size()); | 236 button_->SetMinSize(gfx::Size()); |
| 236 EXPECT_GT(button_->GetPreferredSize().width(), small_size); | 237 EXPECT_GT(button_->GetPreferredSize().width(), small_size); |
| 237 EXPECT_LT(button_->GetPreferredSize().width(), large_size); | 238 EXPECT_LT(button_->GetPreferredSize().width(), large_size); |
| 238 } | 239 } |
| 239 | 240 |
| 240 TEST_F(LabelButtonTest, LabelAndImage) { | 241 TEST_F(LabelButtonTest, LabelAndImage) { |
| 241 const gfx::FontList font_list; | 242 const gfx::FontList font_list = button_->label()->font_list(); |
| 242 const base::string16 text(ASCIIToUTF16("abcdefghijklm")); | 243 const base::string16 text(ASCIIToUTF16("abcdefghijklm")); |
| 243 const int text_width = gfx::GetStringWidth(text, font_list); | 244 const int text_width = gfx::GetStringWidth(text, font_list); |
| 244 | 245 |
| 245 const int image_size = 50; | 246 const int image_size = 50; |
| 246 const gfx::ImageSkia image = CreateTestImage(image_size, image_size); | 247 const gfx::ImageSkia image = CreateTestImage(image_size, image_size); |
| 247 ASSERT_LT(font_list.GetHeight(), image_size); | 248 ASSERT_LT(font_list.GetHeight(), image_size); |
| 248 | 249 |
| 249 // The width increases monotonically with content size (it does not shrink). | 250 // The width increases monotonically with content size (it does not shrink). |
| 250 EXPECT_LT(button_->GetPreferredSize().width(), text_width); | 251 EXPECT_LT(button_->GetPreferredSize().width(), text_width); |
| 251 EXPECT_LT(button_->GetPreferredSize().width(), image_size); | 252 EXPECT_LT(button_->GetPreferredSize().width(), image_size); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 button_->SetMaxSize(gfx::Size(image_size, 1)); | 290 button_->SetMaxSize(gfx::Size(image_size, 1)); |
| 290 EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(image_size, 1)); | 291 EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(image_size, 1)); |
| 291 | 292 |
| 292 // Clear the monotonically increasing minimum size. | 293 // Clear the monotonically increasing minimum size. |
| 293 button_->SetMinSize(gfx::Size()); | 294 button_->SetMinSize(gfx::Size()); |
| 294 EXPECT_LT(button_->GetPreferredSize().width(), text_width); | 295 EXPECT_LT(button_->GetPreferredSize().width(), text_width); |
| 295 EXPECT_LT(button_->GetPreferredSize().width(), image_size); | 296 EXPECT_LT(button_->GetPreferredSize().width(), image_size); |
| 296 EXPECT_LT(button_->GetPreferredSize().height(), image_size); | 297 EXPECT_LT(button_->GetPreferredSize().height(), image_size); |
| 297 } | 298 } |
| 298 | 299 |
| 299 TEST_F(LabelButtonTest, AdjustFontSize) { | 300 // Ensure that the text used for button labels correctly adjusts in response |
| 300 button_->SetText(base::ASCIIToUTF16("abc")); | 301 // to provided style::TextContext values. |
| 302 TEST_F(LabelButtonTest, TextSizeFromContext) { |
| 303 constexpr style::TextContext kDefaultContext = style::CONTEXT_BUTTON; |
| 301 | 304 |
| 302 const int original_width = button_->GetPreferredSize().width(); | 305 // Although CONTEXT_DIALOG_TITLE isn't used for buttons, picking a style with |
| 303 const int original_height = button_->GetPreferredSize().height(); | 306 // a small delta risks finding a font with a different point-size but with the |
| 307 // same maximum glyph height. |
| 308 constexpr style::TextContext kAlternateContext = style::CONTEXT_DIALOG_TITLE; |
| 309 |
| 310 // First sanity that the TextConstants used in the test give different sizes. |
| 311 int default_delta, alternate_delta; |
| 312 gfx::Font::Weight default_weight, alternate_weight; |
| 313 DefaultTypographyProvider::GetDefaultFont( |
| 314 kDefaultContext, style::STYLE_PRIMARY, &default_delta, &default_weight); |
| 315 DefaultTypographyProvider::GetDefaultFont( |
| 316 kAlternateContext, style::STYLE_PRIMARY, &alternate_delta, |
| 317 &alternate_weight); |
| 318 EXPECT_LT(default_delta, alternate_delta); |
| 319 |
| 320 const base::string16 text(ASCIIToUTF16("abcdefghijklm")); |
| 321 button_->SetText(text); |
| 322 EXPECT_EQ(default_delta, button_->label()->font_list().GetFontSize() - |
| 323 gfx::FontList().GetFontSize()); |
| 324 |
| 325 TestLabelButton* alternate_button = |
| 326 new TestLabelButton(text, kAlternateContext); |
| 327 button_->parent()->AddChildView(alternate_button); |
| 328 EXPECT_EQ(alternate_delta, |
| 329 alternate_button->label()->font_list().GetFontSize() - |
| 330 gfx::FontList().GetFontSize()); |
| 304 | 331 |
| 305 // The button size increases when the font size is increased. | 332 // The button size increases when the font size is increased. |
| 306 button_->AdjustFontSize(100); | 333 EXPECT_LT(button_->GetPreferredSize().width(), |
| 307 EXPECT_GT(button_->GetPreferredSize().width(), original_width); | 334 alternate_button->GetPreferredSize().width()); |
| 308 EXPECT_GT(button_->GetPreferredSize().height(), original_height); | 335 EXPECT_LT(button_->GetPreferredSize().height(), |
| 309 | 336 alternate_button->GetPreferredSize().height()); |
| 310 // The button returns to its original size when the minimal size is cleared | |
| 311 // and the original font size is restored. | |
| 312 button_->SetMinSize(gfx::Size()); | |
| 313 button_->AdjustFontSize(-100); | |
| 314 EXPECT_EQ(original_width, button_->GetPreferredSize().width()); | |
| 315 EXPECT_EQ(original_height, button_->GetPreferredSize().height()); | |
| 316 } | 337 } |
| 317 | 338 |
| 318 TEST_F(LabelButtonTest, ChangeTextSize) { | 339 TEST_F(LabelButtonTest, ChangeTextSize) { |
| 319 const base::string16 text(ASCIIToUTF16("abc")); | 340 const base::string16 text(ASCIIToUTF16("abc")); |
| 320 const base::string16 longer_text(ASCIIToUTF16("abcdefghijklm")); | 341 const base::string16 longer_text(ASCIIToUTF16("abcdefghijklm")); |
| 321 button_->SetText(text); | 342 button_->SetText(text); |
| 322 button_->SizeToPreferredSize(); | 343 button_->SizeToPreferredSize(); |
| 323 gfx::Rect bounds(button_->bounds()); | 344 gfx::Rect bounds(button_->bounds()); |
| 324 const int original_width = button_->GetPreferredSize().width(); | 345 const int original_width = button_->GetPreferredSize().width(); |
| 325 EXPECT_EQ(original_width, bounds.width()); | 346 EXPECT_EQ(original_width, bounds.width()); |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 | 530 |
| 510 // Verifies the target event handler View is the |LabelButton| and not any of | 531 // Verifies the target event handler View is the |LabelButton| and not any of |
| 511 // the child Views. | 532 // the child Views. |
| 512 TEST_F(InkDropLabelButtonTest, TargetEventHandler) { | 533 TEST_F(InkDropLabelButtonTest, TargetEventHandler) { |
| 513 View* target_view = widget_->GetRootView()->GetEventHandlerForPoint( | 534 View* target_view = widget_->GetRootView()->GetEventHandlerForPoint( |
| 514 button_->bounds().CenterPoint()); | 535 button_->bounds().CenterPoint()); |
| 515 EXPECT_EQ(button_, target_view); | 536 EXPECT_EQ(button_, target_view); |
| 516 } | 537 } |
| 517 | 538 |
| 518 } // namespace views | 539 } // namespace views |
| OLD | NEW |