diff options
Diffstat (limited to 'chromium/ui/views/controls/menu/menu_item_view_unittest.cc')
-rw-r--r-- | chromium/ui/views/controls/menu/menu_item_view_unittest.cc | 84 |
1 files changed, 79 insertions, 5 deletions
diff --git a/chromium/ui/views/controls/menu/menu_item_view_unittest.cc b/chromium/ui/views/controls/menu/menu_item_view_unittest.cc index 7c9151f6625..ab5f10ec455 100644 --- a/chromium/ui/views/controls/menu/menu_item_view_unittest.cc +++ b/chromium/ui/views/controls/menu/menu_item_view_unittest.cc @@ -7,8 +7,11 @@ #include "base/strings/string16.h" #include "base/strings/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/l10n/l10n_util.h" +#include "ui/strings/grit/ui_strings.h" #include "ui/views/controls/menu/submenu_view.h" -#include "ui/views/view.h" + +namespace views { namespace { @@ -23,15 +26,20 @@ class SquareView : public views::View { int GetHeightForWidth(int width) const override { return width; } }; +} // namespace + // A MenuItemView implementation with a public destructor (so we can clean up // in tests). -class TestMenuItemView : public views::MenuItemView { +class TestMenuItemView : public MenuItemView { public: - TestMenuItemView() : views::MenuItemView(NULL) {} + TestMenuItemView() : MenuItemView(NULL) {} ~TestMenuItemView() override {} -}; -} // namespace + void AddEmptyMenus() { MenuItemView::AddEmptyMenus(); } + + private: + DISALLOW_COPY_AND_ASSIGN(TestMenuItemView); +}; TEST(MenuItemViewUnitTest, TestMenuItemViewWithFlexibleWidthChild) { TestMenuItemView root_menu; @@ -70,3 +78,69 @@ TEST(MenuItemViewUnitTest, TestMenuItemViewWithFlexibleWidthChild) { EXPECT_EQ(label_size.height() + flex_height, submenu->GetPreferredSize().height()); } + +// Tests that the top-level menu item with hidden children should contain the +// "(empty)" menu item to display. +TEST(MenuItemViewUnitTest, TestEmptyTopLevelWhenAllItemsAreHidden) { + TestMenuItemView root_menu; + views::MenuItemView* item1 = + root_menu.AppendMenuItemWithLabel(1, base::ASCIIToUTF16("item 1")); + views::MenuItemView* item2 = + root_menu.AppendMenuItemWithLabel(2, base::ASCIIToUTF16("item 2")); + + // Set menu items to hidden. + item1->SetVisible(false); + item2->SetVisible(false); + + SubmenuView* submenu = root_menu.GetSubmenu(); + ASSERT_TRUE(submenu); + + EXPECT_EQ(2, submenu->child_count()); + + // Adds any empty menu items to the menu, if needed. + root_menu.AddEmptyMenus(); + + // Because all of the submenu's children are hidden, an empty menu item should + // have been added. + ASSERT_EQ(3, submenu->child_count()); + MenuItemView* empty_item = static_cast<MenuItemView*>(submenu->child_at(0)); + ASSERT_TRUE(empty_item); + ASSERT_EQ(MenuItemView::kEmptyMenuItemViewID, empty_item->id()); + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_APP_MENU_EMPTY_SUBMENU), + empty_item->title()); +} + +// Tests that submenu with hidden children should contain the "(empty)" menu +// item to display. +TEST(MenuItemViewUnitTest, TestEmptySubmenuWhenAllChildItemsAreHidden) { + TestMenuItemView root_menu; + MenuItemView* submenu_item = + root_menu.AppendSubMenu(1, base::ASCIIToUTF16("My Submenu")); + MenuItemView* child1 = submenu_item->AppendMenuItemWithLabel( + 1, base::ASCIIToUTF16("submenu item 1")); + MenuItemView* child2 = submenu_item->AppendMenuItemWithLabel( + 2, base::ASCIIToUTF16("submenu item 2")); + + // Set submenu children to hidden. + child1->SetVisible(false); + child2->SetVisible(false); + + SubmenuView* submenu = submenu_item->GetSubmenu(); + ASSERT_TRUE(submenu); + + EXPECT_EQ(2, submenu->child_count()); + + // Adds any empty menu items to the menu, if needed. + root_menu.AddEmptyMenus(); + + // Because all of the submenu's children are hidden, an empty menu item should + // have been added. + ASSERT_EQ(3, submenu->child_count()); + MenuItemView* empty_item = static_cast<MenuItemView*>(submenu->child_at(0)); + ASSERT_TRUE(empty_item); + ASSERT_EQ(MenuItemView::kEmptyMenuItemViewID, empty_item->id()); + EXPECT_EQ(l10n_util::GetStringUTF16(IDS_APP_MENU_EMPTY_SUBMENU), + empty_item->title()); +} + +} // namespace views |