Chromium Code Reviews| Index: chrome/test/menu_item_view_test.cc |
| diff --git a/chrome/test/menu_item_view_test.cc b/chrome/test/menu_item_view_test.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c935eed7d8c4779051c440061ef9e3ec42f0ff88 |
| --- /dev/null |
| +++ b/chrome/test/menu_item_view_test.cc |
| @@ -0,0 +1,593 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "base/message_loop.h" |
| +#include "base/task.h" |
| +#include "chrome/browser/automation/ui_controls.h" |
|
Paweł Hajdan Jr.
2011/05/06 08:11:03
Are those chrome includes the only reason why this
|
| +#include "chrome/test/interactive_ui/view_event_test_base.h" |
| +#include "chrome/test/testing_profile.h" |
|
Paweł Hajdan Jr.
2011/05/06 08:11:03
Is this #include used?
|
| +#include "chrome/test/ui_test_utils.h" |
|
Paweł Hajdan Jr.
2011/05/06 08:11:03
Is this #include used?
|
| +#include "views/controls/button/menu_button.h" |
| +#include "views/controls/menu/menu_controller.h" |
| +#include "views/controls/menu/menu_item_view.h" |
| +#include "views/controls/menu/submenu_view.h" |
| +#include "views/controls/menu/view_menu_delegate.h" |
| +#include "views/views_delegate.h" |
| +#include "views/window/window.h" |
| + |
| +// This constant is used to delay certain testing steps. It is |
| +// normally 0 but can be set higher for local development and |
| +// debugging so the behavior can be observed. |
| +static const int kStepMilliseconds = 0; |
|
Paweł Hajdan Jr.
2011/05/06 08:11:03
I don't think it's a good idea to check that in (w
|
| + |
| +// This is a convenience base class for all tests to provide some |
| +// common functionality. It sets up a MenuButton and a MenuItemView |
| +// and clicks the MenuButton. |
| +// |
| +// Subclasses should implement: |
| +// BuildMenu() populate the menu |
| +// DoTestOnMessageLoop() initiate the test |
| +// Step1() called when the menu is posted |
| +// |
| +// Subclasses can call: |
| +// Click() to post a mouse click on a View |
| +// |
| +// Although it should be possible to post a menu multiple times, |
| +// MenuItemView prevents repeated activation of of a menu by |
|
sky
2011/05/06 16:17:00
'of of' -> of
rhashimoto
2011/05/11 00:44:53
Done.
|
| +// clicks too close in time. |
| +class MenuItemViewTestBase : public ViewEventTestBase, |
| + public views::ViewMenuDelegate, |
| + public views::MenuDelegate { |
| + public: |
| + MenuItemViewTestBase() : ViewEventTestBase(), |
| + button_(NULL), |
| + menu_(NULL) { |
| + } |
| + |
| + virtual ~MenuItemViewTestBase() { |
| + } |
| + |
| + // ViewEventTestBase implementation. |
| + |
| + virtual void SetUp() OVERRIDE { |
| + button_ = new views::MenuButton(NULL, L"Menu Test", this, true); |
| + |
| + menu_ = new views::MenuItemView(this); |
| + BuildMenu(menu_); |
| + |
| + ViewEventTestBase::SetUp(); |
| + } |
| + |
| + virtual void TearDown() OVERRIDE { |
| + delete menu_; |
|
Paweł Hajdan Jr.
2011/05/06 08:11:03
Why not a scoped_ptr then? Non-scoped memory manag
rhashimoto
2011/05/11 00:44:53
Done.
|
| + menu_ = NULL; |
| + ViewEventTestBase::TearDown(); |
| + } |
| + |
| + virtual views::View* CreateContentsView() OVERRIDE { |
| + return button_; |
| + } |
| + |
| + virtual gfx::Size GetPreferredSize() OVERRIDE { |
| + return button_->GetPreferredSize(); |
| + } |
| + |
| + // views::ViewMenuDelegate implementation. |
| + virtual void RunMenu(views::View* source, const gfx::Point& pt) OVERRIDE { |
| + gfx::Point screen_location; |
| + views::View::ConvertPointToScreen(source, &screen_location); |
| + gfx::Rect bounds(screen_location, source->size()); |
| + menu_->RunMenuAt( |
| + source->GetWindow()->GetNativeWindow(), |
| + button_, |
| + bounds, |
| + views::MenuItemView::TOPLEFT, |
| + true); |
| + } |
| + |
| + protected: |
| + // Generate a mouse click on the specified view and post a new task. |
| + virtual void Click(views::View* view,Task* next) { |
|
sky
2011/05/06 16:17:00
'view,task' -> 'view, task'
rhashimoto
2011/05/11 00:44:53
Done.
|
| + ui_controls::MoveMouseToCenterAndPress( |
| + view, |
| + ui_controls::LEFT, |
| + ui_controls::DOWN | ui_controls::UP, |
| + next); |
| + } |
| + |
| + virtual void BuildMenu(views::MenuItemView* menu) { |
| + } |
| + |
| + views::MenuButton* button_; |
| + views::MenuItemView* menu_; |
| +}; |
| + |
| +// Simple test for clicking a menu item. This template class clicks on an |
| +// item and checks that the returned id matches. The index of the item |
| +// is the template argument. |
| +template<int INDEX> |
| +class MenuItemViewTestBasic : public MenuItemViewTestBase { |
| + public: |
| + MenuItemViewTestBasic() : last_command_(0) { |
| + } |
| + |
| + virtual ~MenuItemViewTestBasic() { |
| + } |
| + |
| + // views::MenuDelegate implementation |
| + virtual void ExecuteCommand(int id) OVERRIDE { |
| + last_command_ = id; |
| + } |
| + |
| + // MenuItemViewTestBase implementation |
| + virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| + menu->AppendMenuItemWithLabel(1, L"item 1"); |
| + menu->AppendMenuItemWithLabel(2, L"item 2"); |
| + menu->AppendSeparator(); |
| + menu->AppendMenuItemWithLabel(3, L"item 3"); |
| + } |
| + |
| + // ViewEventTestBase implementation |
| + virtual void DoTestOnMessageLoop() OVERRIDE { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestBasic::Step0), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Open the menu. |
| + void Step0() { |
| + Click(button_, CreateEventTask(this, &MenuItemViewTestBasic::Step1)); |
| + } |
| + |
| + // Click on item INDEX. |
| + void Step1() { |
| + ASSERT_TRUE(menu_); |
| + |
| + views::SubmenuView* submenu = menu_->GetSubmenu(); |
| + ASSERT_TRUE(submenu); |
| + ASSERT_TRUE(submenu->IsShowing()); |
| + ASSERT_EQ(3, submenu->GetMenuItemCount()); |
| + |
| + // click an item and pass control to the next step |
| + views::MenuItemView* item = submenu->GetMenuItemAt(INDEX); |
| + ASSERT_TRUE(item); |
| + Click(item, CreateEventTask(this, &MenuItemViewTestBasic::Step2)); |
| + } |
| + |
| + // Check the clicked item and complete the test. |
| + void Step2() { |
| + ASSERT_FALSE(menu_->GetSubmenu()->IsShowing()); |
| + ASSERT_EQ(INDEX + 1,last_command_); |
| + Done(); |
| + } |
| + |
| + private: |
| + int last_command_; |
| +}; |
| + |
| +// Click each item of a 3-item menu (with separator). |
| +typedef MenuItemViewTestBasic<0> MenuItemViewTestBasic0; |
| +typedef MenuItemViewTestBasic<1> MenuItemViewTestBasic1; |
| +typedef MenuItemViewTestBasic<2> MenuItemViewTestBasic2; |
| +VIEW_TEST(MenuItemViewTestBasic0, FLAKY_SelectItem0) |
| +VIEW_TEST(MenuItemViewTestBasic1, FLAKY_SelectItem1) |
| +VIEW_TEST(MenuItemViewTestBasic2, FLAKY_SelectItem2) |
| + |
| +// Test class for inserting a menu item while the menu is open. |
| +template<int INSERT_INDEX, int SELECT_INDEX> |
| +class MenuItemViewTestInsert : public MenuItemViewTestBase { |
| + public: |
| + MenuItemViewTestInsert() : last_command_(0), |
| + inserted_item_(NULL) { |
| + } |
| + |
| + virtual ~MenuItemViewTestInsert() { |
| + } |
| + |
| + // views::MenuDelegate implementation |
| + virtual void ExecuteCommand(int id) OVERRIDE { |
| + last_command_ = id; |
| + } |
| + |
| + // MenuItemViewTestBase implementation |
| + virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| + menu->AppendMenuItemWithLabel(1, L"item 1"); |
| + menu->AppendMenuItemWithLabel(2, L"item 2"); |
| + } |
| + |
| + // ViewEventTestBase implementation |
| + virtual void DoTestOnMessageLoop() OVERRIDE { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestInsert::Step0), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Post the menu. |
| + void Step0() { |
| + Click(button_, CreateEventTask(this, &MenuItemViewTestInsert::Step1)); |
| + } |
| + |
| + // Add optional delay for debugging. |
| + void Step1() { |
| + ASSERT_TRUE(menu_); |
| + |
| + views::SubmenuView* submenu = menu_->GetSubmenu(); |
| + ASSERT_TRUE(submenu); |
| + ASSERT_TRUE(submenu->IsShowing()); |
| + ASSERT_EQ(2, submenu->GetMenuItemCount()); |
| + |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestInsert::Step2), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Insert item at INSERT_INDEX. |
| + void Step2() { |
| + inserted_item_ = menu_->AddMenuItemAt(INSERT_INDEX, |
| + 1000, |
| + L"inserted item", |
| + SkBitmap(), |
| + views::MenuItemView::NORMAL); |
| + ASSERT_TRUE(inserted_item_); |
| + menu_->ChildrenChanged(); |
| + |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestInsert::Step3), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Click item SELECT_INDEX. |
| + void Step3() { |
| + ASSERT_TRUE(menu_); |
| + |
| + views::SubmenuView* submenu = menu_->GetSubmenu(); |
| + ASSERT_TRUE(submenu); |
| + ASSERT_TRUE(submenu->IsShowing()); |
| + ASSERT_EQ(3, submenu->GetMenuItemCount()); |
| + |
| + // click an item and pass control to the next step |
| + views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); |
| + ASSERT_TRUE(item); |
| + Click(item, CreateEventTask(this, &MenuItemViewTestInsert::Step4)); |
| + } |
| + |
| + // Check clicked item and complete test. |
| + void Step4() { |
| + ASSERT_FALSE(menu_->GetSubmenu()->IsShowing()); |
| + |
| + if (SELECT_INDEX == INSERT_INDEX) |
| + ASSERT_EQ(1000, last_command_); |
| + else if (SELECT_INDEX < INSERT_INDEX) |
| + ASSERT_EQ(SELECT_INDEX + 1, last_command_); |
| + else |
| + ASSERT_EQ(SELECT_INDEX, last_command_); |
| + |
| + Done(); |
| + } |
| + |
| + private: |
| + int last_command_; |
| + views::MenuItemView* inserted_item_; |
| +}; |
| + |
| +// MenuItemViewTestInsertXY inserts an item at index X and selects the |
| +// item at index Y (after the insertion). The tests here cover |
| +// inserting at the beginning, middle, and end, crossbarred with |
| +// selecting the first and last item. |
| +typedef MenuItemViewTestInsert<0,0> MenuItemViewTestInsert00; |
| +typedef MenuItemViewTestInsert<0,2> MenuItemViewTestInsert02; |
| +typedef MenuItemViewTestInsert<1,0> MenuItemViewTestInsert10; |
| +typedef MenuItemViewTestInsert<1,2> MenuItemViewTestInsert12; |
| +typedef MenuItemViewTestInsert<2,0> MenuItemViewTestInsert20; |
| +typedef MenuItemViewTestInsert<2,2> MenuItemViewTestInsert22; |
| +VIEW_TEST(MenuItemViewTestInsert00, FLAKY_InsertItem00) |
| +VIEW_TEST(MenuItemViewTestInsert02, FLAKY_InsertItem02) |
| +VIEW_TEST(MenuItemViewTestInsert10, FLAKY_InsertItem10) |
| +VIEW_TEST(MenuItemViewTestInsert12, FLAKY_InsertItem12) |
| +VIEW_TEST(MenuItemViewTestInsert20, FLAKY_InsertItem20) |
| +VIEW_TEST(MenuItemViewTestInsert22, FLAKY_InsertItem22) |
| + |
| +// Test class for inserting a menu item while a submenu is open. |
| +template<int INSERT_INDEX> |
| +class MenuItemViewTestInsertWithSubmenu : public MenuItemViewTestBase { |
| + public: |
| + MenuItemViewTestInsertWithSubmenu() : last_command_(0), |
| + submenu_(NULL), |
| + inserted_item_(NULL) { |
| + } |
| + |
| + virtual ~MenuItemViewTestInsertWithSubmenu() { |
| + } |
| + |
| + // views::MenuDelegate implementation |
| + virtual void ExecuteCommand(int id) OVERRIDE { |
| + last_command_ = id; |
| + } |
| + |
| + // MenuItemViewTestBase implementation |
| + virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| + submenu_ = menu->AppendSubMenu(1, L"My Submenu"); |
| + submenu_->AppendMenuItemWithLabel(101, L"submenu item 1"); |
| + submenu_->AppendMenuItemWithLabel(101, L"submenu item 2"); |
| + menu->AppendMenuItemWithLabel(2, L"item 2"); |
| + } |
| + |
| + // ViewEventTestBase implementation |
| + virtual void DoTestOnMessageLoop() OVERRIDE { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step0), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Post the menu. |
| + void Step0() { |
| + Click(button_, |
| + CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step1)); |
| + } |
| + |
| + // Add optional delay for debugging. |
| + void Step1() { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step2), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Post submenu. |
| + void Step2() { |
| + Click(submenu_, |
| + CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step3)); |
| + } |
| + |
| + // Add optional delay for debugging. |
| + void Step3() { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step4), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Insert item at INSERT_INDEX. |
| + void Step4() { |
| + inserted_item_ = menu_->AddMenuItemAt(INSERT_INDEX, |
| + 1000, |
| + L"inserted item", |
| + SkBitmap(), |
| + views::MenuItemView::NORMAL); |
| + ASSERT_TRUE(inserted_item_); |
| + menu_->ChildrenChanged(); |
| + |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step5), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Select item to exit menu loop. |
| + void Step5() { |
| + ASSERT_TRUE(menu_->GetSubmenu()->IsShowing()); |
| + |
| + Click(inserted_item_, |
| + CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step6)); |
| + } |
| + |
| + void Step6() { |
| + Done(); |
| + } |
| + |
| + private: |
| + int last_command_; |
| + views::MenuItemView* submenu_; |
| + views::MenuItemView* inserted_item_; |
| +}; |
| + |
| +// MenuItemViewTestInsertWithSubmenuX posts a menu and its submenu, |
| +// then inserts an item in the top-level menu at X. |
| +typedef MenuItemViewTestInsertWithSubmenu<0> MenuItemViewTestInsertWithSubmenu0; |
| +typedef MenuItemViewTestInsertWithSubmenu<1> MenuItemViewTestInsertWithSubmenu1; |
| +VIEW_TEST(MenuItemViewTestInsertWithSubmenu0, FLAKY_InsertItemWithSubmenu0) |
| +VIEW_TEST(MenuItemViewTestInsertWithSubmenu1, FLAKY_InsertItemWithSubmenu1) |
| + |
| +// Test class for removing a menu item while the menu is open. |
| +template<int REMOVE_INDEX, int SELECT_INDEX> |
| +class MenuItemViewTestRemove : public MenuItemViewTestBase { |
| + public: |
| + MenuItemViewTestRemove() : last_command_(0) { |
| + } |
| + |
| + virtual ~MenuItemViewTestRemove() { |
| + } |
| + |
| + // views::MenuDelegate implementation |
| + virtual void ExecuteCommand(int id) OVERRIDE { |
| + last_command_ = id; |
| + } |
| + |
| + // MenuItemViewTestBase implementation |
| + virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| + menu->AppendMenuItemWithLabel(1, L"item 1"); |
| + menu->AppendMenuItemWithLabel(2, L"item 2"); |
| + menu->AppendMenuItemWithLabel(3, L"item 3"); |
| + } |
| + |
| + // ViewEventTestBase implementation |
| + virtual void DoTestOnMessageLoop() OVERRIDE { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestRemove::Step0), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Post the menu. |
| + void Step0() { |
| + Click(button_, CreateEventTask(this, &MenuItemViewTestRemove::Step1)); |
| + } |
| + |
| + // Add optional delay for debugging. |
| + void Step1() { |
| + ASSERT_TRUE(menu_); |
| + |
| + views::SubmenuView* submenu = menu_->GetSubmenu(); |
| + ASSERT_TRUE(submenu); |
| + ASSERT_TRUE(submenu->IsShowing()); |
| + ASSERT_EQ(3, submenu->GetMenuItemCount()); |
| + |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestRemove::Step2), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Remove item at REMOVE_INDEX. |
| + void Step2() { |
| + menu_->RemoveMenuItemAt(REMOVE_INDEX); |
| + menu_->ChildrenChanged(); |
| + |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestRemove::Step3), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Click item SELECT_INDEX. |
| + void Step3() { |
| + ASSERT_TRUE(menu_); |
| + |
| + views::SubmenuView* submenu = menu_->GetSubmenu(); |
| + ASSERT_TRUE(submenu); |
| + ASSERT_TRUE(submenu->IsShowing()); |
| + ASSERT_EQ(2, submenu->GetMenuItemCount()); |
| + |
| + // click an item and pass control to the next step |
| + views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); |
| + ASSERT_TRUE(item); |
| + Click(item, CreateEventTask(this, &MenuItemViewTestRemove::Step4)); |
| + } |
| + |
| + // Check clicked item and complete test. |
| + void Step4() { |
| + ASSERT_FALSE(menu_->GetSubmenu()->IsShowing()); |
| + |
| + if (SELECT_INDEX < REMOVE_INDEX) |
| + ASSERT_EQ(SELECT_INDEX + 1, last_command_); |
| + else |
| + ASSERT_EQ(SELECT_INDEX + 2, last_command_); |
| + |
| + Done(); |
| + } |
| + |
| + private: |
| + int last_command_; |
| +}; |
| + |
| +typedef MenuItemViewTestRemove<0,0> MenuItemViewTestRemove00; |
| +typedef MenuItemViewTestRemove<0,1> MenuItemViewTestRemove01; |
| +typedef MenuItemViewTestRemove<1,0> MenuItemViewTestRemove10; |
| +typedef MenuItemViewTestRemove<1,1> MenuItemViewTestRemove11; |
| +typedef MenuItemViewTestRemove<2,0> MenuItemViewTestRemove20; |
| +typedef MenuItemViewTestRemove<2,1> MenuItemViewTestRemove21; |
| +VIEW_TEST(MenuItemViewTestRemove00, FLAKY_RemoveItem00) |
| +VIEW_TEST(MenuItemViewTestRemove01, FLAKY_RemoveItem01) |
| +VIEW_TEST(MenuItemViewTestRemove10, FLAKY_RemoveItem10) |
| +VIEW_TEST(MenuItemViewTestRemove11, FLAKY_RemoveItem11) |
| +VIEW_TEST(MenuItemViewTestRemove20, FLAKY_RemoveItem20) |
| +VIEW_TEST(MenuItemViewTestRemove21, FLAKY_RemoveItem21) |
| + |
| +// Test class for removing a menu item while a submenu is open. |
| +template<int REMOVE_INDEX> |
| +class MenuItemViewTestRemoveWithSubmenu : public MenuItemViewTestBase { |
| + public: |
| + MenuItemViewTestRemoveWithSubmenu() : last_command_(0), |
| + submenu_(NULL) { |
| + } |
| + |
| + virtual ~MenuItemViewTestRemoveWithSubmenu() { |
| + } |
| + |
| + // views::MenuDelegate implementation |
| + virtual void ExecuteCommand(int id) OVERRIDE { |
| + last_command_ = id; |
| + } |
| + |
| + // MenuItemViewTestBase implementation |
| + virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| + menu->AppendMenuItemWithLabel(1, L"item 1"); |
| + submenu_ = menu->AppendSubMenu(2, L"My Submenu"); |
| + submenu_->AppendMenuItemWithLabel(101, L"submenu item 1"); |
| + submenu_->AppendMenuItemWithLabel(102, L"submenu item 2"); |
| + } |
| + |
| + // ViewEventTestBase implementation |
| + virtual void DoTestOnMessageLoop() OVERRIDE { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step0), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Post the menu. |
| + void Step0() { |
| + Click(button_, |
| + CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step1)); |
| + } |
| + |
| + // Add optional delay for debugging. |
| + void Step1() { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step2), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Post submenu. |
| + void Step2() { |
| + Click(submenu_, |
| + CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step3)); |
| + } |
| + |
| + // Add optional delay for debugging. |
| + void Step3() { |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step4), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Remove item at REMOVE_INDEX. |
| + void Step4() { |
| + menu_->RemoveMenuItemAt(REMOVE_INDEX); |
| + menu_->ChildrenChanged(); |
| + |
| + MessageLoopForUI::current()->PostDelayedTask( |
| + FROM_HERE, |
| + CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step5), |
| + kStepMilliseconds); |
| + } |
| + |
| + // Select item to exit menu loop. |
| + void Step5() { |
| + ASSERT_TRUE(menu_->GetSubmenu()->IsShowing()); |
| + |
| + Click(button_, |
| + CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step6)); |
| + } |
| + |
| + void Step6() { |
| + Done(); |
| + } |
| + |
| + private: |
| + int last_command_; |
| + views::MenuItemView* submenu_; |
| +}; |
| + |
| +typedef MenuItemViewTestRemoveWithSubmenu<0> MenuItemViewTestRemoveWithSubmenu0; |
| +typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1; |
| +VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, FLAKY_RemoveItemWithSubmenu0) |
| +VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, FLAKY_RemoveItemWithSubmenu1) |