| 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.
|
| +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)
|
|
|