| 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/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "third_party/skia/include/core/SkBitmap.h" | 8 #include "third_party/skia/include/core/SkBitmap.h" |
| 9 #include "ui/accessibility/ax_view_state.h" |
| 9 #include "ui/gfx/canvas.h" | 10 #include "ui/gfx/canvas.h" |
| 10 #include "ui/gfx/font_list.h" | 11 #include "ui/gfx/font_list.h" |
| 11 #include "ui/gfx/geometry/size.h" | 12 #include "ui/gfx/geometry/size.h" |
| 12 #include "ui/gfx/text_utils.h" | 13 #include "ui/gfx/text_utils.h" |
| 13 #include "ui/views/test/views_test_base.h" | 14 #include "ui/views/test/widget_test.h" |
| 14 | 15 |
| 15 using base::ASCIIToUTF16; | 16 using base::ASCIIToUTF16; |
| 16 | 17 |
| 17 namespace { | 18 namespace { |
| 18 | 19 |
| 19 gfx::ImageSkia CreateTestImage(int width, int height) { | 20 gfx::ImageSkia CreateTestImage(int width, int height) { |
| 20 SkBitmap bitmap; | 21 SkBitmap bitmap; |
| 21 bitmap.allocN32Pixels(width, height); | 22 bitmap.allocN32Pixels(width, height); |
| 22 return gfx::ImageSkia::CreateFrom1xBitmap(bitmap); | 23 return gfx::ImageSkia::CreateFrom1xBitmap(bitmap); |
| 23 } | 24 } |
| 24 | 25 |
| 25 } // namespace | 26 } // namespace |
| 26 | 27 |
| 27 namespace views { | 28 namespace views { |
| 28 | 29 |
| 29 typedef ViewsTestBase LabelButtonTest; | 30 class LabelButtonTest : public test::WidgetTest { |
| 31 public: |
| 32 LabelButtonTest() {} |
| 33 |
| 34 // testing::Test: |
| 35 void SetUp() override { |
| 36 WidgetTest::SetUp(); |
| 37 // Make a Widget to host the button. This ensures appropriate borders are |
| 38 // used (which could be derived from the Widget's NativeTheme). |
| 39 test_widget_ = CreateTopLevelPlatformWidget(); |
| 40 |
| 41 button_ = new LabelButton(nullptr, base::string16()); |
| 42 test_widget_->GetContentsView()->AddChildView(button_); |
| 43 } |
| 44 |
| 45 void TearDown() override { |
| 46 test_widget_->CloseNow(); |
| 47 WidgetTest::TearDown(); |
| 48 } |
| 49 |
| 50 protected: |
| 51 LabelButton* button_ = nullptr; |
| 52 |
| 53 private: |
| 54 Widget* test_widget_ = nullptr; |
| 55 |
| 56 DISALLOW_COPY_AND_ASSIGN(LabelButtonTest); |
| 57 }; |
| 30 | 58 |
| 31 TEST_F(LabelButtonTest, Init) { | 59 TEST_F(LabelButtonTest, Init) { |
| 32 const base::string16 text(ASCIIToUTF16("abc")); | 60 const base::string16 text(ASCIIToUTF16("abc")); |
| 33 LabelButton button(NULL, text); | 61 LabelButton button(NULL, text); |
| 34 | 62 |
| 35 EXPECT_TRUE(button.GetImage(Button::STATE_NORMAL).isNull()); | 63 EXPECT_TRUE(button.GetImage(Button::STATE_NORMAL).isNull()); |
| 36 EXPECT_TRUE(button.GetImage(Button::STATE_HOVERED).isNull()); | 64 EXPECT_TRUE(button.GetImage(Button::STATE_HOVERED).isNull()); |
| 37 EXPECT_TRUE(button.GetImage(Button::STATE_PRESSED).isNull()); | 65 EXPECT_TRUE(button.GetImage(Button::STATE_PRESSED).isNull()); |
| 38 EXPECT_TRUE(button.GetImage(Button::STATE_DISABLED).isNull()); | 66 EXPECT_TRUE(button.GetImage(Button::STATE_DISABLED).isNull()); |
| 39 | 67 |
| 40 EXPECT_EQ(text, button.GetText()); | 68 EXPECT_EQ(text, button.GetText()); |
| 69 |
| 70 ui::AXViewState accessible_state; |
| 71 button.GetAccessibleState(&accessible_state); |
| 72 EXPECT_EQ(ui::AX_ROLE_BUTTON, accessible_state.role); |
| 73 EXPECT_EQ(text, accessible_state.name); |
| 74 |
| 41 EXPECT_EQ(gfx::ALIGN_LEFT, button.GetHorizontalAlignment()); | 75 EXPECT_EQ(gfx::ALIGN_LEFT, button.GetHorizontalAlignment()); |
| 42 EXPECT_FALSE(button.is_default()); | 76 EXPECT_FALSE(button.is_default()); |
| 43 EXPECT_EQ(button.style(), Button::STYLE_TEXTBUTTON); | 77 EXPECT_EQ(button.style(), Button::STYLE_TEXTBUTTON); |
| 44 EXPECT_EQ(Button::STATE_NORMAL, button.state()); | 78 EXPECT_EQ(Button::STATE_NORMAL, button.state()); |
| 45 | 79 |
| 46 EXPECT_EQ(button.image_->parent(), &button); | 80 EXPECT_EQ(button.image_->parent(), &button); |
| 47 EXPECT_EQ(button.label_->parent(), &button); | 81 EXPECT_EQ(button.label_->parent(), &button); |
| 48 } | 82 } |
| 49 | 83 |
| 50 TEST_F(LabelButtonTest, Label) { | 84 TEST_F(LabelButtonTest, Label) { |
| 51 LabelButton button(NULL, base::string16()); | 85 EXPECT_TRUE(button_->GetText().empty()); |
| 52 EXPECT_TRUE(button.GetText().empty()); | |
| 53 | 86 |
| 54 const gfx::FontList font_list; | 87 const gfx::FontList font_list; |
| 55 const base::string16 short_text(ASCIIToUTF16("abcdefghijklm")); | 88 const base::string16 short_text(ASCIIToUTF16("abcdefghijklm")); |
| 56 const base::string16 long_text(ASCIIToUTF16("abcdefghijklmnopqrstuvwxyz")); | 89 const base::string16 long_text(ASCIIToUTF16("abcdefghijklmnopqrstuvwxyz")); |
| 57 const int short_text_width = gfx::GetStringWidth(short_text, font_list); | 90 const int short_text_width = gfx::GetStringWidth(short_text, font_list); |
| 58 const int long_text_width = gfx::GetStringWidth(long_text, font_list); | 91 const int long_text_width = gfx::GetStringWidth(long_text, font_list); |
| 59 | 92 |
| 60 // The width increases monotonically with string size (it does not shrink). | 93 // The width increases monotonically with string size (it does not shrink). |
| 61 EXPECT_LT(button.GetPreferredSize().width(), short_text_width); | 94 EXPECT_LT(button_->GetPreferredSize().width(), short_text_width); |
| 62 button.SetText(short_text); | 95 button_->SetText(short_text); |
| 63 EXPECT_GT(button.GetPreferredSize().height(), font_list.GetHeight()); | 96 EXPECT_GT(button_->GetPreferredSize().height(), font_list.GetHeight()); |
| 64 EXPECT_GT(button.GetPreferredSize().width(), short_text_width); | 97 EXPECT_GT(button_->GetPreferredSize().width(), short_text_width); |
| 65 EXPECT_LT(button.GetPreferredSize().width(), long_text_width); | 98 EXPECT_LT(button_->GetPreferredSize().width(), long_text_width); |
| 66 button.SetText(long_text); | 99 button_->SetText(long_text); |
| 67 EXPECT_GT(button.GetPreferredSize().width(), long_text_width); | 100 EXPECT_GT(button_->GetPreferredSize().width(), long_text_width); |
| 68 button.SetText(short_text); | 101 button_->SetText(short_text); |
| 69 EXPECT_GT(button.GetPreferredSize().width(), long_text_width); | 102 EXPECT_GT(button_->GetPreferredSize().width(), long_text_width); |
| 70 | 103 |
| 71 // Clamp the size to a maximum value. | 104 // Clamp the size to a maximum value. |
| 72 button.SetMaxSize(gfx::Size(long_text_width, 1)); | 105 button_->SetMaxSize(gfx::Size(long_text_width, 1)); |
| 73 EXPECT_EQ(button.GetPreferredSize(), gfx::Size(long_text_width, 1)); | 106 EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(long_text_width, 1)); |
| 74 | 107 |
| 75 // Clear the monotonically increasing minimum size. | 108 // Clear the monotonically increasing minimum size. |
| 76 button.SetMinSize(gfx::Size()); | 109 button_->SetMinSize(gfx::Size()); |
| 77 EXPECT_GT(button.GetPreferredSize().width(), short_text_width); | 110 EXPECT_GT(button_->GetPreferredSize().width(), short_text_width); |
| 78 EXPECT_LT(button.GetPreferredSize().width(), long_text_width); | 111 EXPECT_LT(button_->GetPreferredSize().width(), long_text_width); |
| 112 } |
| 113 |
| 114 // Test behavior of View::GetAccessibleState() for buttons when setting a label. |
| 115 TEST_F(LabelButtonTest, AccessibleState) { |
| 116 ui::AXViewState accessible_state; |
| 117 |
| 118 button_->GetAccessibleState(&accessible_state); |
| 119 EXPECT_EQ(ui::AX_ROLE_BUTTON, accessible_state.role); |
| 120 EXPECT_EQ(base::string16(), accessible_state.name); |
| 121 |
| 122 // Without a label (e.g. image-only), the accessible name should automatically |
| 123 // be set from the tooltip. |
| 124 const base::string16 tooltip_text = ASCIIToUTF16("abc"); |
| 125 button_->SetTooltipText(tooltip_text); |
| 126 button_->GetAccessibleState(&accessible_state); |
| 127 EXPECT_EQ(tooltip_text, accessible_state.name); |
| 128 EXPECT_EQ(base::string16(), button_->GetText()); |
| 129 |
| 130 // Setting a label overrides the tooltip text. |
| 131 const base::string16 label_text = ASCIIToUTF16("def"); |
| 132 button_->SetText(label_text); |
| 133 button_->GetAccessibleState(&accessible_state); |
| 134 EXPECT_EQ(label_text, accessible_state.name); |
| 135 EXPECT_EQ(label_text, button_->GetText()); |
| 136 |
| 137 base::string16 tooltip; |
| 138 EXPECT_TRUE(button_->GetTooltipText(gfx::Point(), &tooltip)); |
| 139 EXPECT_EQ(tooltip_text, tooltip); |
| 79 } | 140 } |
| 80 | 141 |
| 81 TEST_F(LabelButtonTest, Image) { | 142 TEST_F(LabelButtonTest, Image) { |
| 82 LabelButton button(NULL, base::string16()); | |
| 83 | |
| 84 const int small_size = 50, large_size = 100; | 143 const int small_size = 50, large_size = 100; |
| 85 const gfx::ImageSkia small_image = CreateTestImage(small_size, small_size); | 144 const gfx::ImageSkia small_image = CreateTestImage(small_size, small_size); |
| 86 const gfx::ImageSkia large_image = CreateTestImage(large_size, large_size); | 145 const gfx::ImageSkia large_image = CreateTestImage(large_size, large_size); |
| 87 | 146 |
| 88 // The width increases monotonically with image size (it does not shrink). | 147 // The width increases monotonically with image size (it does not shrink). |
| 89 EXPECT_LT(button.GetPreferredSize().width(), small_size); | 148 EXPECT_LT(button_->GetPreferredSize().width(), small_size); |
| 90 EXPECT_LT(button.GetPreferredSize().height(), small_size); | 149 EXPECT_LT(button_->GetPreferredSize().height(), small_size); |
| 91 button.SetImage(Button::STATE_NORMAL, small_image); | 150 button_->SetImage(Button::STATE_NORMAL, small_image); |
| 92 EXPECT_GT(button.GetPreferredSize().width(), small_size); | 151 EXPECT_GT(button_->GetPreferredSize().width(), small_size); |
| 93 EXPECT_GT(button.GetPreferredSize().height(), small_size); | 152 EXPECT_GT(button_->GetPreferredSize().height(), small_size); |
| 94 EXPECT_LT(button.GetPreferredSize().width(), large_size); | 153 EXPECT_LT(button_->GetPreferredSize().width(), large_size); |
| 95 EXPECT_LT(button.GetPreferredSize().height(), large_size); | 154 EXPECT_LT(button_->GetPreferredSize().height(), large_size); |
| 96 button.SetImage(Button::STATE_NORMAL, large_image); | 155 button_->SetImage(Button::STATE_NORMAL, large_image); |
| 97 EXPECT_GT(button.GetPreferredSize().width(), large_size); | 156 EXPECT_GT(button_->GetPreferredSize().width(), large_size); |
| 98 EXPECT_GT(button.GetPreferredSize().height(), large_size); | 157 EXPECT_GT(button_->GetPreferredSize().height(), large_size); |
| 99 button.SetImage(Button::STATE_NORMAL, small_image); | 158 button_->SetImage(Button::STATE_NORMAL, small_image); |
| 100 EXPECT_GT(button.GetPreferredSize().width(), large_size); | 159 EXPECT_GT(button_->GetPreferredSize().width(), large_size); |
| 101 EXPECT_GT(button.GetPreferredSize().height(), large_size); | 160 EXPECT_GT(button_->GetPreferredSize().height(), large_size); |
| 102 | 161 |
| 103 // Clamp the size to a maximum value. | 162 // Clamp the size to a maximum value. |
| 104 button.SetMaxSize(gfx::Size(large_size, 1)); | 163 button_->SetMaxSize(gfx::Size(large_size, 1)); |
| 105 EXPECT_EQ(button.GetPreferredSize(), gfx::Size(large_size, 1)); | 164 EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(large_size, 1)); |
| 106 | 165 |
| 107 // Clear the monotonically increasing minimum size. | 166 // Clear the monotonically increasing minimum size. |
| 108 button.SetMinSize(gfx::Size()); | 167 button_->SetMinSize(gfx::Size()); |
| 109 EXPECT_GT(button.GetPreferredSize().width(), small_size); | 168 EXPECT_GT(button_->GetPreferredSize().width(), small_size); |
| 110 EXPECT_LT(button.GetPreferredSize().width(), large_size); | 169 EXPECT_LT(button_->GetPreferredSize().width(), large_size); |
| 111 } | 170 } |
| 112 | 171 |
| 113 TEST_F(LabelButtonTest, LabelAndImage) { | 172 TEST_F(LabelButtonTest, LabelAndImage) { |
| 114 LabelButton button(NULL, base::string16()); | |
| 115 | |
| 116 const gfx::FontList font_list; | 173 const gfx::FontList font_list; |
| 117 const base::string16 text(ASCIIToUTF16("abcdefghijklm")); | 174 const base::string16 text(ASCIIToUTF16("abcdefghijklm")); |
| 118 const int text_width = gfx::GetStringWidth(text, font_list); | 175 const int text_width = gfx::GetStringWidth(text, font_list); |
| 119 | 176 |
| 120 const int image_size = 50; | 177 const int image_size = 50; |
| 121 const gfx::ImageSkia image = CreateTestImage(image_size, image_size); | 178 const gfx::ImageSkia image = CreateTestImage(image_size, image_size); |
| 122 ASSERT_LT(font_list.GetHeight(), image_size); | 179 ASSERT_LT(font_list.GetHeight(), image_size); |
| 123 | 180 |
| 124 // The width increases monotonically with content size (it does not shrink). | 181 // The width increases monotonically with content size (it does not shrink). |
| 125 EXPECT_LT(button.GetPreferredSize().width(), text_width); | 182 EXPECT_LT(button_->GetPreferredSize().width(), text_width); |
| 126 EXPECT_LT(button.GetPreferredSize().width(), image_size); | 183 EXPECT_LT(button_->GetPreferredSize().width(), image_size); |
| 127 EXPECT_LT(button.GetPreferredSize().height(), image_size); | 184 EXPECT_LT(button_->GetPreferredSize().height(), image_size); |
| 128 button.SetText(text); | 185 button_->SetText(text); |
| 129 EXPECT_GT(button.GetPreferredSize().width(), text_width); | 186 EXPECT_GT(button_->GetPreferredSize().width(), text_width); |
| 130 EXPECT_GT(button.GetPreferredSize().height(), font_list.GetHeight()); | 187 EXPECT_GT(button_->GetPreferredSize().height(), font_list.GetHeight()); |
| 131 EXPECT_LT(button.GetPreferredSize().width(), text_width + image_size); | 188 EXPECT_LT(button_->GetPreferredSize().width(), text_width + image_size); |
| 132 EXPECT_LT(button.GetPreferredSize().height(), image_size); | 189 EXPECT_LT(button_->GetPreferredSize().height(), image_size); |
| 133 button.SetImage(Button::STATE_NORMAL, image); | 190 button_->SetImage(Button::STATE_NORMAL, image); |
| 134 EXPECT_GT(button.GetPreferredSize().width(), text_width + image_size); | 191 EXPECT_GT(button_->GetPreferredSize().width(), text_width + image_size); |
| 135 EXPECT_GT(button.GetPreferredSize().height(), image_size); | 192 EXPECT_GT(button_->GetPreferredSize().height(), image_size); |
| 136 | 193 |
| 137 // Layout and ensure the image is left of the label except for ALIGN_RIGHT. | 194 // Layout and ensure the image is left of the label except for ALIGN_RIGHT. |
| 138 // (A proper parent view or layout manager would Layout on its invalidations). | 195 // (A proper parent view or layout manager would Layout on its invalidations). |
| 139 button.SetSize(button.GetPreferredSize()); | 196 button_->SetSize(button_->GetPreferredSize()); |
| 140 button.Layout(); | 197 button_->Layout(); |
| 141 EXPECT_EQ(gfx::ALIGN_LEFT, button.GetHorizontalAlignment()); | 198 EXPECT_EQ(gfx::ALIGN_LEFT, button_->GetHorizontalAlignment()); |
| 142 EXPECT_LT(button.image_->bounds().right(), button.label_->bounds().x()); | 199 EXPECT_LT(button_->image_->bounds().right(), button_->label_->bounds().x()); |
| 143 button.SetHorizontalAlignment(gfx::ALIGN_CENTER); | 200 button_->SetHorizontalAlignment(gfx::ALIGN_CENTER); |
| 144 button.Layout(); | 201 button_->Layout(); |
| 145 EXPECT_EQ(gfx::ALIGN_CENTER, button.GetHorizontalAlignment()); | 202 EXPECT_EQ(gfx::ALIGN_CENTER, button_->GetHorizontalAlignment()); |
| 146 EXPECT_LT(button.image_->bounds().right(), button.label_->bounds().x()); | 203 EXPECT_LT(button_->image_->bounds().right(), button_->label_->bounds().x()); |
| 147 button.SetHorizontalAlignment(gfx::ALIGN_RIGHT); | 204 button_->SetHorizontalAlignment(gfx::ALIGN_RIGHT); |
| 148 button.Layout(); | 205 button_->Layout(); |
| 149 EXPECT_EQ(gfx::ALIGN_RIGHT, button.GetHorizontalAlignment()); | 206 EXPECT_EQ(gfx::ALIGN_RIGHT, button_->GetHorizontalAlignment()); |
| 150 EXPECT_LT(button.label_->bounds().right(), button.image_->bounds().x()); | 207 EXPECT_LT(button_->label_->bounds().right(), button_->image_->bounds().x()); |
| 151 | 208 |
| 152 button.SetText(base::string16()); | 209 button_->SetText(base::string16()); |
| 153 EXPECT_GT(button.GetPreferredSize().width(), text_width + image_size); | 210 EXPECT_GT(button_->GetPreferredSize().width(), text_width + image_size); |
| 154 EXPECT_GT(button.GetPreferredSize().height(), image_size); | 211 EXPECT_GT(button_->GetPreferredSize().height(), image_size); |
| 155 button.SetImage(Button::STATE_NORMAL, gfx::ImageSkia()); | 212 button_->SetImage(Button::STATE_NORMAL, gfx::ImageSkia()); |
| 156 EXPECT_GT(button.GetPreferredSize().width(), text_width + image_size); | 213 EXPECT_GT(button_->GetPreferredSize().width(), text_width + image_size); |
| 157 EXPECT_GT(button.GetPreferredSize().height(), image_size); | 214 EXPECT_GT(button_->GetPreferredSize().height(), image_size); |
| 158 | 215 |
| 159 // Clamp the size to a maximum value. | 216 // Clamp the size to a maximum value. |
| 160 button.SetMaxSize(gfx::Size(image_size, 1)); | 217 button_->SetMaxSize(gfx::Size(image_size, 1)); |
| 161 EXPECT_EQ(button.GetPreferredSize(), gfx::Size(image_size, 1)); | 218 EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(image_size, 1)); |
| 162 | 219 |
| 163 // Clear the monotonically increasing minimum size. | 220 // Clear the monotonically increasing minimum size. |
| 164 button.SetMinSize(gfx::Size()); | 221 button_->SetMinSize(gfx::Size()); |
| 165 EXPECT_LT(button.GetPreferredSize().width(), text_width); | 222 EXPECT_LT(button_->GetPreferredSize().width(), text_width); |
| 166 EXPECT_LT(button.GetPreferredSize().width(), image_size); | 223 EXPECT_LT(button_->GetPreferredSize().width(), image_size); |
| 167 EXPECT_LT(button.GetPreferredSize().height(), image_size); | 224 EXPECT_LT(button_->GetPreferredSize().height(), image_size); |
| 168 } | 225 } |
| 169 | 226 |
| 170 TEST_F(LabelButtonTest, FontList) { | 227 TEST_F(LabelButtonTest, FontList) { |
| 171 const base::string16 text(ASCIIToUTF16("abc")); | 228 button_->SetText(base::ASCIIToUTF16("abc")); |
| 172 LabelButton button(NULL, text); | |
| 173 | 229 |
| 174 const gfx::FontList original_font_list = button.GetFontList(); | 230 const gfx::FontList original_font_list = button_->GetFontList(); |
| 175 const gfx::FontList large_font_list = | 231 const gfx::FontList large_font_list = |
| 176 original_font_list.DeriveWithSizeDelta(100); | 232 original_font_list.DeriveWithSizeDelta(100); |
| 177 const int original_width = button.GetPreferredSize().width(); | 233 const int original_width = button_->GetPreferredSize().width(); |
| 178 const int original_height = button.GetPreferredSize().height(); | 234 const int original_height = button_->GetPreferredSize().height(); |
| 179 | 235 |
| 180 // The button size increases when the font size is increased. | 236 // The button size increases when the font size is increased. |
| 181 button.SetFontList(large_font_list); | 237 button_->SetFontList(large_font_list); |
| 182 EXPECT_GT(button.GetPreferredSize().width(), original_width); | 238 EXPECT_GT(button_->GetPreferredSize().width(), original_width); |
| 183 EXPECT_GT(button.GetPreferredSize().height(), original_height); | 239 EXPECT_GT(button_->GetPreferredSize().height(), original_height); |
| 184 | 240 |
| 185 // The button returns to its original size when the minimal size is cleared | 241 // The button returns to its original size when the minimal size is cleared |
| 186 // and the original font size is restored. | 242 // and the original font size is restored. |
| 187 button.SetMinSize(gfx::Size()); | 243 button_->SetMinSize(gfx::Size()); |
| 188 button.SetFontList(original_font_list); | 244 button_->SetFontList(original_font_list); |
| 189 EXPECT_EQ(original_width, button.GetPreferredSize().width()); | 245 EXPECT_EQ(original_width, button_->GetPreferredSize().width()); |
| 190 EXPECT_EQ(original_height, button.GetPreferredSize().height()); | 246 EXPECT_EQ(original_height, button_->GetPreferredSize().height()); |
| 191 } | 247 } |
| 192 | 248 |
| 193 TEST_F(LabelButtonTest, ChangeTextSize) { | 249 TEST_F(LabelButtonTest, ChangeTextSize) { |
| 194 const base::string16 text(ASCIIToUTF16("abc")); | 250 const base::string16 text(ASCIIToUTF16("abc")); |
| 195 const base::string16 longer_text(ASCIIToUTF16("abcdefghijklm")); | 251 const base::string16 longer_text(ASCIIToUTF16("abcdefghijklm")); |
| 196 LabelButton button(NULL, text); | 252 button_->SetText(text); |
| 197 | 253 |
| 198 const int original_width = button.GetPreferredSize().width(); | 254 const int original_width = button_->GetPreferredSize().width(); |
| 199 | 255 |
| 200 // The button size increases when the text size is increased. | 256 // The button size increases when the text size is increased. |
| 201 button.SetText(longer_text); | 257 button_->SetText(longer_text); |
| 202 EXPECT_GT(button.GetPreferredSize().width(), original_width); | 258 EXPECT_GT(button_->GetPreferredSize().width(), original_width); |
| 203 | 259 |
| 204 // The button returns to its original size when the original text is restored. | 260 // The button returns to its original size when the original text is restored. |
| 205 button.SetMinSize(gfx::Size()); | 261 button_->SetMinSize(gfx::Size()); |
| 206 button.SetText(text); | 262 button_->SetText(text); |
| 207 EXPECT_EQ(original_width, button.GetPreferredSize().width()); | 263 EXPECT_EQ(original_width, button_->GetPreferredSize().width()); |
| 208 } | 264 } |
| 209 | 265 |
| 210 TEST_F(LabelButtonTest, ChangeLabelImageSpacing) { | 266 TEST_F(LabelButtonTest, ChangeLabelImageSpacing) { |
| 211 LabelButton button(NULL, ASCIIToUTF16("abc")); | 267 button_->SetText(ASCIIToUTF16("abc")); |
| 212 button.SetImage(Button::STATE_NORMAL, CreateTestImage(50, 50)); | 268 button_->SetImage(Button::STATE_NORMAL, CreateTestImage(50, 50)); |
| 213 | 269 |
| 214 const int kOriginalSpacing = 5; | 270 const int kOriginalSpacing = 5; |
| 215 button.SetImageLabelSpacing(kOriginalSpacing); | 271 button_->SetImageLabelSpacing(kOriginalSpacing); |
| 216 const int original_width = button.GetPreferredSize().width(); | 272 const int original_width = button_->GetPreferredSize().width(); |
| 217 | 273 |
| 218 // Increasing the spacing between the text and label should increase the size. | 274 // Increasing the spacing between the text and label should increase the size. |
| 219 button.SetImageLabelSpacing(2 * kOriginalSpacing); | 275 button_->SetImageLabelSpacing(2 * kOriginalSpacing); |
| 220 EXPECT_GT(button.GetPreferredSize().width(), original_width); | 276 EXPECT_GT(button_->GetPreferredSize().width(), original_width); |
| 221 | 277 |
| 222 // The button shrinks if the original spacing is restored. | 278 // The button shrinks if the original spacing is restored. |
| 223 button.SetMinSize(gfx::Size()); | 279 button_->SetMinSize(gfx::Size()); |
| 224 button.SetImageLabelSpacing(kOriginalSpacing); | 280 button_->SetImageLabelSpacing(kOriginalSpacing); |
| 225 EXPECT_EQ(original_width, button.GetPreferredSize().width()); | 281 EXPECT_EQ(original_width, button_->GetPreferredSize().width()); |
| 226 } | 282 } |
| 227 | 283 |
| 228 } // namespace views | 284 } // namespace views |
| OLD | NEW |