Index: ui/views/controls/menu/menu_controller_unittest.cc |
diff --git a/ui/views/controls/menu/menu_controller_unittest.cc b/ui/views/controls/menu/menu_controller_unittest.cc |
index 1fd47a55a8eaf19a4be82451077a4092641fd9d2..6360fb92f81dade23ed88ff2bf069a1ac510fd6c 100644 |
--- a/ui/views/controls/menu/menu_controller_unittest.cc |
+++ b/ui/views/controls/menu/menu_controller_unittest.cc |
@@ -46,6 +46,26 @@ class TestMenuItemView : public MenuItemView { |
DISALLOW_COPY_AND_ASSIGN(TestMenuItemView); |
}; |
+class SubmenuViewShown : public SubmenuView { |
+ public: |
+ SubmenuViewShown(MenuItemView* parent) : SubmenuView(parent) {} |
+ ~SubmenuViewShown() override {} |
+ bool IsShowing() override { return true; } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(SubmenuViewShown); |
+}; |
+ |
+class TestMenuItemViewShown : public MenuItemView { |
+ public: |
+ TestMenuItemViewShown() : MenuItemView(nullptr) {} |
+ ~TestMenuItemViewShown() override {} |
+ SubmenuView* CreateSubmenu() override { return new SubmenuViewShown(this); } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(TestMenuItemViewShown); |
+}; |
+ |
class TestPlatformEventSource : public ui::PlatformEventSource { |
public: |
TestPlatformEventSource() { |
@@ -170,6 +190,7 @@ class MenuControllerTest : public ViewsTestBase { |
void SetPendingStateItem(MenuItemView* item) { |
controller_->pending_state_.item = item; |
+ controller_->pending_state_.submenu_open = true; |
} |
void ResetSelection() { |
@@ -445,4 +466,25 @@ TEST_F(MenuControllerTest, NextSelectedItem) { |
ResetSelection(); |
} |
+TEST_F(MenuControllerTest, NextSelectedItemUp) { |
+ scoped_ptr<Widget> owner(CreateOwnerWidget()); |
+ scoped_ptr<TestMenuItemViewShown> menu_item(new TestMenuItemViewShown); |
+ menu_item->AppendMenuItemWithLabel(1, base::ASCIIToUTF16("One")); |
+ menu_item->AppendMenuItemWithLabel(2, base::ASCIIToUTF16("Two")); |
+ menu_item->AppendMenuItemWithLabel(3, base::ASCIIToUTF16("Three")); |
+ menu_item->AppendMenuItemWithLabel(4, base::ASCIIToUTF16("Four")); |
+ // Disabling the item "Four" gets it skipped when using keyboard to navigate. |
+ menu_item->GetSubmenu()->GetMenuItemAt(3)->SetEnabled(false); |
+ |
+ SetupMenu(owner.get(), menu_item.get()); |
+ |
+ // Fake initial root item selection and submenu showing. |
+ SetPendingStateItem(menu_item.get()); |
+ EXPECT_EQ(0, pending_state_item()->GetCommand()); |
+ |
+ // Move up and select a previous (in our case the last enabled) item. |
+ IncrementSelection(-1); |
+ EXPECT_EQ(3, pending_state_item()->GetCommand()); |
+} |
+ |
} // namespace views |