Chromium Code Reviews| Index: chrome/browser/ui/views/menu_item_view_interactive_uitest.cc |
| diff --git a/chrome/browser/ui/views/menu_item_view_interactive_uitest.cc b/chrome/browser/ui/views/menu_item_view_interactive_uitest.cc |
| index af0f4c80359a4eefcda6c64e3c8e86a9a9eb09d0..8d82a3b1e552dfb8a2e08ded5876004cdae0ad74 100644 |
| --- a/chrome/browser/ui/views/menu_item_view_interactive_uitest.cc |
| +++ b/chrome/browser/ui/views/menu_item_view_interactive_uitest.cc |
| @@ -4,8 +4,10 @@ |
| #include "base/strings/utf_string_conversions.h" |
| #include "chrome/browser/ui/views/menu_test_base.h" |
| +#include "ui/views/controls/menu/menu_controller.h" |
| #include "ui/views/controls/menu/menu_item_view.h" |
| #include "ui/views/controls/menu/submenu_view.h" |
| +#include "ui/views/view.h" |
| using base::ASCIIToUTF16; |
| @@ -341,3 +343,78 @@ typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1; |
| VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, MAYBE_RemoveItemWithSubmenu0) |
| VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, MAYBE_RemoveItemWithSubmenu1) |
| + |
| +// Test that MenuItemViews can have flexible sizes if they are containers. |
|
sky
2014/09/15 17:14:56
Isn't there a way to test your new code without an
Devlin
2014/09/15 17:48:23
Ah, I suppose none of this really needs interactio
|
| +class MenuItemViewTestFlexibleWidthChild : public MenuTestBase { |
| + public: |
| + MenuItemViewTestFlexibleWidthChild() {} |
| + virtual ~MenuItemViewTestFlexibleWidthChild() {} |
| + |
| + private: |
| + // A simple View class that will match its height to the available width. |
| + class SquareView : public views::View { |
| + public: |
| + SquareView() : width_(1) {} |
| + virtual ~SquareView() {} |
| + |
| + private: |
| + virtual gfx::Size GetPreferredSize() const OVERRIDE { |
| + return gfx::Size(width_, width_); |
| + } |
| + virtual int GetHeightForWidth(int width) const OVERRIDE { |
| + width_ = width; |
| + return width; |
| + } |
| + |
| + // Mutable because we set it for testing in GetHeightForWidth(). |
| + mutable int width_; |
| + }; |
| + |
| + // MenuTestBase: |
| + virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| + // Append a normal MenuItemView. |
| + menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); |
| + |
| + // Append a second MenuItemView that has a child SquareView. |
| + views::MenuItemView* item_view = |
| + menu->AppendMenuItemWithLabel(2, base::string16()); |
| + item_view->AddChildView(new SquareView()); |
| + // Set margins to 0 so that we know width should match height. |
| + item_view->SetMargins(0, 0); |
| + } |
| + |
| + virtual void DoTestWithMenuOpen() OVERRIDE { |
| + views::SubmenuView* submenu = menu()->GetSubmenu(); |
| + ASSERT_TRUE(submenu); |
| + ASSERT_TRUE(submenu->IsShowing()); |
| + |
| + views::MenuItemView* first_item = submenu->GetMenuItemAt(0); |
| + ASSERT_TRUE(first_item); |
| + gfx::Size first_size = first_item->GetPreferredSize(); |
| + |
| + views::MenuItemView* second_item = submenu->GetMenuItemAt(1); |
| + ASSERT_TRUE(second_item); |
| + gfx::Size second_size = second_item->GetPreferredSize(); |
| + |
| + // The second menu item should have the same width as the first, since it |
| + // is designed to have a flexible width and take up whatever region it can |
| + // without expanding the menu. |
| + EXPECT_EQ(first_size.width(), second_size.width()); |
| + |
| + // The second item should also be a square. |
| + EXPECT_EQ(second_size.width(), second_size.height()); |
| + |
| + // Finally, the full menu should be large enough to accommodate both menu |
| + // items at this height (and no larger). |
| + EXPECT_EQ(second_size.height() + first_size.height(), |
| + submenu->GetPreferredSize().height()); |
| + |
| + // Close the menu to clean up. |
| + menu()->GetMenuController()->CancelAll(); |
| + Done(); |
| + } |
| + |
| + DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestFlexibleWidthChild); |
| +}; |
| + |
| +VIEW_TEST(MenuItemViewTestFlexibleWidthChild, FlexibleWidthChild) |