| Index: ui/views/controls/button/label_button_unittest.cc
|
| diff --git a/ui/views/controls/button/label_button_unittest.cc b/ui/views/controls/button/label_button_unittest.cc
|
| index 05a81a77fa16feceaf5c0a8ff195af91733673c7..30f78a46324b9c78a6ac2e28816082acf2e3fb9a 100644
|
| --- a/ui/views/controls/button/label_button_unittest.cc
|
| +++ b/ui/views/controls/button/label_button_unittest.cc
|
| @@ -6,11 +6,12 @@
|
|
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "third_party/skia/include/core/SkBitmap.h"
|
| +#include "ui/accessibility/ax_view_state.h"
|
| #include "ui/gfx/canvas.h"
|
| #include "ui/gfx/font_list.h"
|
| #include "ui/gfx/geometry/size.h"
|
| #include "ui/gfx/text_utils.h"
|
| -#include "ui/views/test/views_test_base.h"
|
| +#include "ui/views/test/widget_test.h"
|
|
|
| using base::ASCIIToUTF16;
|
|
|
| @@ -26,7 +27,34 @@ gfx::ImageSkia CreateTestImage(int width, int height) {
|
|
|
| namespace views {
|
|
|
| -typedef ViewsTestBase LabelButtonTest;
|
| +class LabelButtonTest : public test::WidgetTest {
|
| + public:
|
| + LabelButtonTest() {}
|
| +
|
| + // testing::Test:
|
| + void SetUp() override {
|
| + WidgetTest::SetUp();
|
| + // Make a Widget to host the button. This ensures appropriate borders are
|
| + // used (which could be derived from the Widget's NativeTheme).
|
| + test_widget_ = CreateTopLevelPlatformWidget();
|
| +
|
| + button_ = new LabelButton(nullptr, base::string16());
|
| + test_widget_->GetContentsView()->AddChildView(button_);
|
| + }
|
| +
|
| + void TearDown() override {
|
| + test_widget_->CloseNow();
|
| + WidgetTest::TearDown();
|
| + }
|
| +
|
| + protected:
|
| + LabelButton* button_ = nullptr;
|
| +
|
| + private:
|
| + Widget* test_widget_ = nullptr;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(LabelButtonTest);
|
| +};
|
|
|
| TEST_F(LabelButtonTest, Init) {
|
| const base::string16 text(ASCIIToUTF16("abc"));
|
| @@ -38,6 +66,12 @@ TEST_F(LabelButtonTest, Init) {
|
| EXPECT_TRUE(button.GetImage(Button::STATE_DISABLED).isNull());
|
|
|
| EXPECT_EQ(text, button.GetText());
|
| +
|
| + ui::AXViewState accessible_state;
|
| + button.GetAccessibleState(&accessible_state);
|
| + EXPECT_EQ(ui::AX_ROLE_BUTTON, accessible_state.role);
|
| + EXPECT_EQ(text, accessible_state.name);
|
| +
|
| EXPECT_EQ(gfx::ALIGN_LEFT, button.GetHorizontalAlignment());
|
| EXPECT_FALSE(button.is_default());
|
| EXPECT_EQ(button.style(), Button::STYLE_TEXTBUTTON);
|
| @@ -48,8 +82,7 @@ TEST_F(LabelButtonTest, Init) {
|
| }
|
|
|
| TEST_F(LabelButtonTest, Label) {
|
| - LabelButton button(NULL, base::string16());
|
| - EXPECT_TRUE(button.GetText().empty());
|
| + EXPECT_TRUE(button_->GetText().empty());
|
|
|
| const gfx::FontList font_list;
|
| const base::string16 short_text(ASCIIToUTF16("abcdefghijklm"));
|
| @@ -58,61 +91,85 @@ TEST_F(LabelButtonTest, Label) {
|
| const int long_text_width = gfx::GetStringWidth(long_text, font_list);
|
|
|
| // The width increases monotonically with string size (it does not shrink).
|
| - EXPECT_LT(button.GetPreferredSize().width(), short_text_width);
|
| - button.SetText(short_text);
|
| - EXPECT_GT(button.GetPreferredSize().height(), font_list.GetHeight());
|
| - EXPECT_GT(button.GetPreferredSize().width(), short_text_width);
|
| - EXPECT_LT(button.GetPreferredSize().width(), long_text_width);
|
| - button.SetText(long_text);
|
| - EXPECT_GT(button.GetPreferredSize().width(), long_text_width);
|
| - button.SetText(short_text);
|
| - EXPECT_GT(button.GetPreferredSize().width(), long_text_width);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), short_text_width);
|
| + button_->SetText(short_text);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), font_list.GetHeight());
|
| + EXPECT_GT(button_->GetPreferredSize().width(), short_text_width);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), long_text_width);
|
| + button_->SetText(long_text);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), long_text_width);
|
| + button_->SetText(short_text);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), long_text_width);
|
|
|
| // Clamp the size to a maximum value.
|
| - button.SetMaxSize(gfx::Size(long_text_width, 1));
|
| - EXPECT_EQ(button.GetPreferredSize(), gfx::Size(long_text_width, 1));
|
| + button_->SetMaxSize(gfx::Size(long_text_width, 1));
|
| + EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(long_text_width, 1));
|
|
|
| // Clear the monotonically increasing minimum size.
|
| - button.SetMinSize(gfx::Size());
|
| - EXPECT_GT(button.GetPreferredSize().width(), short_text_width);
|
| - EXPECT_LT(button.GetPreferredSize().width(), long_text_width);
|
| + button_->SetMinSize(gfx::Size());
|
| + EXPECT_GT(button_->GetPreferredSize().width(), short_text_width);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), long_text_width);
|
| }
|
|
|
| -TEST_F(LabelButtonTest, Image) {
|
| - LabelButton button(NULL, base::string16());
|
| +// Test behavior of View::GetAccessibleState() for buttons when setting a label.
|
| +TEST_F(LabelButtonTest, AccessibleState) {
|
| + ui::AXViewState accessible_state;
|
| +
|
| + button_->GetAccessibleState(&accessible_state);
|
| + EXPECT_EQ(ui::AX_ROLE_BUTTON, accessible_state.role);
|
| + EXPECT_EQ(base::string16(), accessible_state.name);
|
| +
|
| + // Without a label (e.g. image-only), the accessible name should automatically
|
| + // be set from the tooltip.
|
| + const base::string16 tooltip_text = ASCIIToUTF16("abc");
|
| + button_->SetTooltipText(tooltip_text);
|
| + button_->GetAccessibleState(&accessible_state);
|
| + EXPECT_EQ(tooltip_text, accessible_state.name);
|
| + EXPECT_EQ(base::string16(), button_->GetText());
|
| +
|
| + // Setting a label overrides the tooltip text.
|
| + const base::string16 label_text = ASCIIToUTF16("def");
|
| + button_->SetText(label_text);
|
| + button_->GetAccessibleState(&accessible_state);
|
| + EXPECT_EQ(label_text, accessible_state.name);
|
| + EXPECT_EQ(label_text, button_->GetText());
|
| +
|
| + base::string16 tooltip;
|
| + EXPECT_TRUE(button_->GetTooltipText(gfx::Point(), &tooltip));
|
| + EXPECT_EQ(tooltip_text, tooltip);
|
| +}
|
|
|
| +TEST_F(LabelButtonTest, Image) {
|
| const int small_size = 50, large_size = 100;
|
| const gfx::ImageSkia small_image = CreateTestImage(small_size, small_size);
|
| const gfx::ImageSkia large_image = CreateTestImage(large_size, large_size);
|
|
|
| // The width increases monotonically with image size (it does not shrink).
|
| - EXPECT_LT(button.GetPreferredSize().width(), small_size);
|
| - EXPECT_LT(button.GetPreferredSize().height(), small_size);
|
| - button.SetImage(Button::STATE_NORMAL, small_image);
|
| - EXPECT_GT(button.GetPreferredSize().width(), small_size);
|
| - EXPECT_GT(button.GetPreferredSize().height(), small_size);
|
| - EXPECT_LT(button.GetPreferredSize().width(), large_size);
|
| - EXPECT_LT(button.GetPreferredSize().height(), large_size);
|
| - button.SetImage(Button::STATE_NORMAL, large_image);
|
| - EXPECT_GT(button.GetPreferredSize().width(), large_size);
|
| - EXPECT_GT(button.GetPreferredSize().height(), large_size);
|
| - button.SetImage(Button::STATE_NORMAL, small_image);
|
| - EXPECT_GT(button.GetPreferredSize().width(), large_size);
|
| - EXPECT_GT(button.GetPreferredSize().height(), large_size);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), small_size);
|
| + EXPECT_LT(button_->GetPreferredSize().height(), small_size);
|
| + button_->SetImage(Button::STATE_NORMAL, small_image);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), small_size);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), small_size);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), large_size);
|
| + EXPECT_LT(button_->GetPreferredSize().height(), large_size);
|
| + button_->SetImage(Button::STATE_NORMAL, large_image);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), large_size);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), large_size);
|
| + button_->SetImage(Button::STATE_NORMAL, small_image);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), large_size);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), large_size);
|
|
|
| // Clamp the size to a maximum value.
|
| - button.SetMaxSize(gfx::Size(large_size, 1));
|
| - EXPECT_EQ(button.GetPreferredSize(), gfx::Size(large_size, 1));
|
| + button_->SetMaxSize(gfx::Size(large_size, 1));
|
| + EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(large_size, 1));
|
|
|
| // Clear the monotonically increasing minimum size.
|
| - button.SetMinSize(gfx::Size());
|
| - EXPECT_GT(button.GetPreferredSize().width(), small_size);
|
| - EXPECT_LT(button.GetPreferredSize().width(), large_size);
|
| + button_->SetMinSize(gfx::Size());
|
| + EXPECT_GT(button_->GetPreferredSize().width(), small_size);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), large_size);
|
| }
|
|
|
| TEST_F(LabelButtonTest, LabelAndImage) {
|
| - LabelButton button(NULL, base::string16());
|
| -
|
| const gfx::FontList font_list;
|
| const base::string16 text(ASCIIToUTF16("abcdefghijklm"));
|
| const int text_width = gfx::GetStringWidth(text, font_list);
|
| @@ -122,107 +179,106 @@ TEST_F(LabelButtonTest, LabelAndImage) {
|
| ASSERT_LT(font_list.GetHeight(), image_size);
|
|
|
| // The width increases monotonically with content size (it does not shrink).
|
| - EXPECT_LT(button.GetPreferredSize().width(), text_width);
|
| - EXPECT_LT(button.GetPreferredSize().width(), image_size);
|
| - EXPECT_LT(button.GetPreferredSize().height(), image_size);
|
| - button.SetText(text);
|
| - EXPECT_GT(button.GetPreferredSize().width(), text_width);
|
| - EXPECT_GT(button.GetPreferredSize().height(), font_list.GetHeight());
|
| - EXPECT_LT(button.GetPreferredSize().width(), text_width + image_size);
|
| - EXPECT_LT(button.GetPreferredSize().height(), image_size);
|
| - button.SetImage(Button::STATE_NORMAL, image);
|
| - EXPECT_GT(button.GetPreferredSize().width(), text_width + image_size);
|
| - EXPECT_GT(button.GetPreferredSize().height(), image_size);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), text_width);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), image_size);
|
| + EXPECT_LT(button_->GetPreferredSize().height(), image_size);
|
| + button_->SetText(text);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), text_width);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), font_list.GetHeight());
|
| + EXPECT_LT(button_->GetPreferredSize().width(), text_width + image_size);
|
| + EXPECT_LT(button_->GetPreferredSize().height(), image_size);
|
| + button_->SetImage(Button::STATE_NORMAL, image);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), text_width + image_size);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), image_size);
|
|
|
| // Layout and ensure the image is left of the label except for ALIGN_RIGHT.
|
| // (A proper parent view or layout manager would Layout on its invalidations).
|
| - button.SetSize(button.GetPreferredSize());
|
| - button.Layout();
|
| - EXPECT_EQ(gfx::ALIGN_LEFT, button.GetHorizontalAlignment());
|
| - EXPECT_LT(button.image_->bounds().right(), button.label_->bounds().x());
|
| - button.SetHorizontalAlignment(gfx::ALIGN_CENTER);
|
| - button.Layout();
|
| - EXPECT_EQ(gfx::ALIGN_CENTER, button.GetHorizontalAlignment());
|
| - EXPECT_LT(button.image_->bounds().right(), button.label_->bounds().x());
|
| - button.SetHorizontalAlignment(gfx::ALIGN_RIGHT);
|
| - button.Layout();
|
| - EXPECT_EQ(gfx::ALIGN_RIGHT, button.GetHorizontalAlignment());
|
| - EXPECT_LT(button.label_->bounds().right(), button.image_->bounds().x());
|
| -
|
| - button.SetText(base::string16());
|
| - EXPECT_GT(button.GetPreferredSize().width(), text_width + image_size);
|
| - EXPECT_GT(button.GetPreferredSize().height(), image_size);
|
| - button.SetImage(Button::STATE_NORMAL, gfx::ImageSkia());
|
| - EXPECT_GT(button.GetPreferredSize().width(), text_width + image_size);
|
| - EXPECT_GT(button.GetPreferredSize().height(), image_size);
|
| + button_->SetSize(button_->GetPreferredSize());
|
| + button_->Layout();
|
| + EXPECT_EQ(gfx::ALIGN_LEFT, button_->GetHorizontalAlignment());
|
| + EXPECT_LT(button_->image_->bounds().right(), button_->label_->bounds().x());
|
| + button_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
|
| + button_->Layout();
|
| + EXPECT_EQ(gfx::ALIGN_CENTER, button_->GetHorizontalAlignment());
|
| + EXPECT_LT(button_->image_->bounds().right(), button_->label_->bounds().x());
|
| + button_->SetHorizontalAlignment(gfx::ALIGN_RIGHT);
|
| + button_->Layout();
|
| + EXPECT_EQ(gfx::ALIGN_RIGHT, button_->GetHorizontalAlignment());
|
| + EXPECT_LT(button_->label_->bounds().right(), button_->image_->bounds().x());
|
| +
|
| + button_->SetText(base::string16());
|
| + EXPECT_GT(button_->GetPreferredSize().width(), text_width + image_size);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), image_size);
|
| + button_->SetImage(Button::STATE_NORMAL, gfx::ImageSkia());
|
| + EXPECT_GT(button_->GetPreferredSize().width(), text_width + image_size);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), image_size);
|
|
|
| // Clamp the size to a maximum value.
|
| - button.SetMaxSize(gfx::Size(image_size, 1));
|
| - EXPECT_EQ(button.GetPreferredSize(), gfx::Size(image_size, 1));
|
| + button_->SetMaxSize(gfx::Size(image_size, 1));
|
| + EXPECT_EQ(button_->GetPreferredSize(), gfx::Size(image_size, 1));
|
|
|
| // Clear the monotonically increasing minimum size.
|
| - button.SetMinSize(gfx::Size());
|
| - EXPECT_LT(button.GetPreferredSize().width(), text_width);
|
| - EXPECT_LT(button.GetPreferredSize().width(), image_size);
|
| - EXPECT_LT(button.GetPreferredSize().height(), image_size);
|
| + button_->SetMinSize(gfx::Size());
|
| + EXPECT_LT(button_->GetPreferredSize().width(), text_width);
|
| + EXPECT_LT(button_->GetPreferredSize().width(), image_size);
|
| + EXPECT_LT(button_->GetPreferredSize().height(), image_size);
|
| }
|
|
|
| TEST_F(LabelButtonTest, FontList) {
|
| - const base::string16 text(ASCIIToUTF16("abc"));
|
| - LabelButton button(NULL, text);
|
| + button_->SetText(base::ASCIIToUTF16("abc"));
|
|
|
| - const gfx::FontList original_font_list = button.GetFontList();
|
| + const gfx::FontList original_font_list = button_->GetFontList();
|
| const gfx::FontList large_font_list =
|
| original_font_list.DeriveWithSizeDelta(100);
|
| - const int original_width = button.GetPreferredSize().width();
|
| - const int original_height = button.GetPreferredSize().height();
|
| + const int original_width = button_->GetPreferredSize().width();
|
| + const int original_height = button_->GetPreferredSize().height();
|
|
|
| // The button size increases when the font size is increased.
|
| - button.SetFontList(large_font_list);
|
| - EXPECT_GT(button.GetPreferredSize().width(), original_width);
|
| - EXPECT_GT(button.GetPreferredSize().height(), original_height);
|
| + button_->SetFontList(large_font_list);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), original_width);
|
| + EXPECT_GT(button_->GetPreferredSize().height(), original_height);
|
|
|
| // The button returns to its original size when the minimal size is cleared
|
| // and the original font size is restored.
|
| - button.SetMinSize(gfx::Size());
|
| - button.SetFontList(original_font_list);
|
| - EXPECT_EQ(original_width, button.GetPreferredSize().width());
|
| - EXPECT_EQ(original_height, button.GetPreferredSize().height());
|
| + button_->SetMinSize(gfx::Size());
|
| + button_->SetFontList(original_font_list);
|
| + EXPECT_EQ(original_width, button_->GetPreferredSize().width());
|
| + EXPECT_EQ(original_height, button_->GetPreferredSize().height());
|
| }
|
|
|
| TEST_F(LabelButtonTest, ChangeTextSize) {
|
| const base::string16 text(ASCIIToUTF16("abc"));
|
| const base::string16 longer_text(ASCIIToUTF16("abcdefghijklm"));
|
| - LabelButton button(NULL, text);
|
| + button_->SetText(text);
|
|
|
| - const int original_width = button.GetPreferredSize().width();
|
| + const int original_width = button_->GetPreferredSize().width();
|
|
|
| // The button size increases when the text size is increased.
|
| - button.SetText(longer_text);
|
| - EXPECT_GT(button.GetPreferredSize().width(), original_width);
|
| + button_->SetText(longer_text);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), original_width);
|
|
|
| // The button returns to its original size when the original text is restored.
|
| - button.SetMinSize(gfx::Size());
|
| - button.SetText(text);
|
| - EXPECT_EQ(original_width, button.GetPreferredSize().width());
|
| + button_->SetMinSize(gfx::Size());
|
| + button_->SetText(text);
|
| + EXPECT_EQ(original_width, button_->GetPreferredSize().width());
|
| }
|
|
|
| TEST_F(LabelButtonTest, ChangeLabelImageSpacing) {
|
| - LabelButton button(NULL, ASCIIToUTF16("abc"));
|
| - button.SetImage(Button::STATE_NORMAL, CreateTestImage(50, 50));
|
| + button_->SetText(ASCIIToUTF16("abc"));
|
| + button_->SetImage(Button::STATE_NORMAL, CreateTestImage(50, 50));
|
|
|
| const int kOriginalSpacing = 5;
|
| - button.SetImageLabelSpacing(kOriginalSpacing);
|
| - const int original_width = button.GetPreferredSize().width();
|
| + button_->SetImageLabelSpacing(kOriginalSpacing);
|
| + const int original_width = button_->GetPreferredSize().width();
|
|
|
| // Increasing the spacing between the text and label should increase the size.
|
| - button.SetImageLabelSpacing(2 * kOriginalSpacing);
|
| - EXPECT_GT(button.GetPreferredSize().width(), original_width);
|
| + button_->SetImageLabelSpacing(2 * kOriginalSpacing);
|
| + EXPECT_GT(button_->GetPreferredSize().width(), original_width);
|
|
|
| // The button shrinks if the original spacing is restored.
|
| - button.SetMinSize(gfx::Size());
|
| - button.SetImageLabelSpacing(kOriginalSpacing);
|
| - EXPECT_EQ(original_width, button.GetPreferredSize().width());
|
| + button_->SetMinSize(gfx::Size());
|
| + button_->SetImageLabelSpacing(kOriginalSpacing);
|
| + EXPECT_EQ(original_width, button_->GetPreferredSize().width());
|
| }
|
|
|
| } // namespace views
|
|
|