| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/callback.h" | |
| 6 #include "base/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
| 7 #include "chrome/test/base/interactive_test_utils.h" | 6 #include "chrome/browser/ui/views/menu_test_base.h" |
| 8 #include "chrome/test/base/ui_test_utils.h" | |
| 9 #include "chrome/test/base/view_event_test_base.h" | |
| 10 #include "ui/base/test/ui_controls.h" | |
| 11 #include "ui/views/controls/button/menu_button.h" | |
| 12 #include "ui/views/controls/button/menu_button_listener.h" | |
| 13 #include "ui/views/controls/menu/menu_controller.h" | |
| 14 #include "ui/views/controls/menu/menu_item_view.h" | 7 #include "ui/views/controls/menu/menu_item_view.h" |
| 15 #include "ui/views/controls/menu/menu_runner.h" | |
| 16 #include "ui/views/controls/menu/submenu_view.h" | 8 #include "ui/views/controls/menu/submenu_view.h" |
| 17 #include "ui/views/widget/root_view.h" | |
| 18 #include "ui/views/widget/widget.h" | |
| 19 | 9 |
| 20 using base::ASCIIToUTF16; | 10 using base::ASCIIToUTF16; |
| 21 | 11 |
| 22 // This is a convenience base class for all tests to provide some | |
| 23 // common functionality. It sets up a MenuButton and a MenuItemView | |
| 24 // and clicks the MenuButton. | |
| 25 // | |
| 26 // Subclasses should implement: | |
| 27 // BuildMenu() populate the menu | |
| 28 // DoTestOnMessageLoop() initiate the test | |
| 29 // | |
| 30 // Subclasses can call: | |
| 31 // Click() to post a mouse click on a View | |
| 32 // | |
| 33 // Although it should be possible to post a menu multiple times, | |
| 34 // MenuItemView prevents repeated activation of a menu by clicks too | |
| 35 // close in time. | |
| 36 class MenuItemViewTestBase : public ViewEventTestBase, | |
| 37 public views::MenuButtonListener, | |
| 38 public views::MenuDelegate { | |
| 39 public: | |
| 40 MenuItemViewTestBase() | |
| 41 : ViewEventTestBase(), | |
| 42 button_(NULL), | |
| 43 menu_(NULL) { | |
| 44 } | |
| 45 | |
| 46 virtual ~MenuItemViewTestBase() { | |
| 47 } | |
| 48 | |
| 49 // ViewEventTestBase implementation. | |
| 50 | |
| 51 virtual void SetUp() OVERRIDE { | |
| 52 button_ = new views::MenuButton( | |
| 53 NULL, ASCIIToUTF16("Menu Test"), this, true); | |
| 54 menu_ = new views::MenuItemView(this); | |
| 55 BuildMenu(menu_); | |
| 56 menu_runner_.reset(new views::MenuRunner(menu_)); | |
| 57 | |
| 58 ViewEventTestBase::SetUp(); | |
| 59 } | |
| 60 | |
| 61 virtual void TearDown() OVERRIDE { | |
| 62 menu_runner_.reset(NULL); | |
| 63 menu_ = NULL; | |
| 64 ViewEventTestBase::TearDown(); | |
| 65 } | |
| 66 | |
| 67 virtual views::View* CreateContentsView() OVERRIDE { | |
| 68 return button_; | |
| 69 } | |
| 70 | |
| 71 virtual gfx::Size GetPreferredSize() OVERRIDE { | |
| 72 return button_->GetPreferredSize(); | |
| 73 } | |
| 74 | |
| 75 // views::MenuButtonListener implementation. | |
| 76 virtual void OnMenuButtonClicked(views::View* source, | |
| 77 const gfx::Point& point) OVERRIDE { | |
| 78 gfx::Point screen_location; | |
| 79 views::View::ConvertPointToScreen(source, &screen_location); | |
| 80 gfx::Rect bounds(screen_location, source->size()); | |
| 81 ignore_result(menu_runner_->RunMenuAt( | |
| 82 source->GetWidget(), | |
| 83 button_, | |
| 84 bounds, | |
| 85 views::MenuItemView::TOPLEFT, | |
| 86 ui::MENU_SOURCE_NONE, | |
| 87 views::MenuRunner::HAS_MNEMONICS)); | |
| 88 } | |
| 89 | |
| 90 protected: | |
| 91 // Generate a mouse click on the specified view and post a new task. | |
| 92 virtual void Click(views::View* view, const base::Closure& next) { | |
| 93 ui_test_utils::MoveMouseToCenterAndPress( | |
| 94 view, | |
| 95 ui_controls::LEFT, | |
| 96 ui_controls::DOWN | ui_controls::UP, | |
| 97 next); | |
| 98 } | |
| 99 | |
| 100 virtual void BuildMenu(views::MenuItemView* menu) { | |
| 101 } | |
| 102 | |
| 103 views::MenuButton* button_; | |
| 104 views::MenuItemView* menu_; | |
| 105 scoped_ptr<views::MenuRunner> menu_runner_; | |
| 106 }; | |
| 107 | |
| 108 // Simple test for clicking a menu item. This template class clicks on an | 12 // Simple test for clicking a menu item. This template class clicks on an |
| 109 // item and checks that the returned id matches. The index of the item | 13 // item and checks that the returned id matches. The index of the item |
| 110 // is the template argument. | 14 // is the template argument. |
| 111 template<int INDEX> | 15 template<int INDEX> |
| 112 class MenuItemViewTestBasic : public MenuItemViewTestBase { | 16 class MenuItemViewTestBasic : public MenuTestBase { |
| 113 public: | 17 public: |
| 114 MenuItemViewTestBasic() : | 18 MenuItemViewTestBasic() { |
| 115 last_command_(0) { | |
| 116 } | 19 } |
| 117 | 20 |
| 118 virtual ~MenuItemViewTestBasic() { | 21 virtual ~MenuItemViewTestBasic() { |
| 119 } | 22 } |
| 120 | 23 |
| 121 // views::MenuDelegate implementation | 24 // MenuTestBase implementation |
| 122 virtual void ExecuteCommand(int id) OVERRIDE { | |
| 123 last_command_ = id; | |
| 124 } | |
| 125 | |
| 126 // MenuItemViewTestBase implementation | |
| 127 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { | 25 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| 128 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); | 26 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); |
| 129 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); | 27 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); |
| 130 menu->AppendSeparator(); | 28 menu->AppendSeparator(); |
| 131 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3")); | 29 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3")); |
| 132 } | 30 } |
| 133 | 31 |
| 134 // ViewEventTestBase implementation | |
| 135 virtual void DoTestOnMessageLoop() OVERRIDE { | |
| 136 Click(button_, CreateEventTask(this, &MenuItemViewTestBasic::Step1)); | |
| 137 } | |
| 138 | |
| 139 // Click on item INDEX. | 32 // Click on item INDEX. |
| 140 void Step1() { | 33 virtual void DoTestWithMenuOpen() OVERRIDE { |
| 141 ASSERT_TRUE(menu_); | 34 views::SubmenuView* submenu = menu()->GetSubmenu(); |
| 142 | |
| 143 views::SubmenuView* submenu = menu_->GetSubmenu(); | |
| 144 ASSERT_TRUE(submenu); | 35 ASSERT_TRUE(submenu); |
| 145 ASSERT_TRUE(submenu->IsShowing()); | 36 ASSERT_TRUE(submenu->IsShowing()); |
| 146 ASSERT_EQ(3, submenu->GetMenuItemCount()); | 37 ASSERT_EQ(3, submenu->GetMenuItemCount()); |
| 147 | 38 |
| 148 // click an item and pass control to the next step | 39 // click an item and pass control to the next step |
| 149 views::MenuItemView* item = submenu->GetMenuItemAt(INDEX); | 40 views::MenuItemView* item = submenu->GetMenuItemAt(INDEX); |
| 150 ASSERT_TRUE(item); | 41 ASSERT_TRUE(item); |
| 151 Click(item, CreateEventTask(this, &MenuItemViewTestBasic::Step2)); | 42 Click(item, CreateEventTask(this, &MenuItemViewTestBasic::Step2)); |
| 152 } | 43 } |
| 153 | 44 |
| 154 // Check the clicked item and complete the test. | 45 // Check the clicked item and complete the test. |
| 155 void Step2() { | 46 void Step2() { |
| 156 ASSERT_FALSE(menu_->GetSubmenu()->IsShowing()); | 47 ASSERT_FALSE(menu()->GetSubmenu()->IsShowing()); |
| 157 ASSERT_EQ(INDEX + 1,last_command_); | 48 ASSERT_EQ(INDEX + 1, last_command()); |
| 158 Done(); | 49 Done(); |
| 159 } | 50 } |
| 160 | 51 |
| 161 private: | 52 private: |
| 162 int last_command_; | 53 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestBasic); |
| 163 }; | 54 }; |
| 164 | 55 |
| 165 // Click each item of a 3-item menu (with separator). | 56 // Click each item of a 3-item menu (with separator). |
| 166 typedef MenuItemViewTestBasic<0> MenuItemViewTestBasic0; | 57 typedef MenuItemViewTestBasic<0> MenuItemViewTestBasic0; |
| 167 typedef MenuItemViewTestBasic<1> MenuItemViewTestBasic1; | 58 typedef MenuItemViewTestBasic<1> MenuItemViewTestBasic1; |
| 168 typedef MenuItemViewTestBasic<2> MenuItemViewTestBasic2; | 59 typedef MenuItemViewTestBasic<2> MenuItemViewTestBasic2; |
| 169 VIEW_TEST(MenuItemViewTestBasic0, SelectItem0) | 60 VIEW_TEST(MenuItemViewTestBasic0, SelectItem0) |
| 170 VIEW_TEST(MenuItemViewTestBasic1, SelectItem1) | 61 VIEW_TEST(MenuItemViewTestBasic1, SelectItem1) |
| 171 VIEW_TEST(MenuItemViewTestBasic2, SelectItem2) | 62 VIEW_TEST(MenuItemViewTestBasic2, SelectItem2) |
| 172 | 63 |
| 173 // Test class for inserting a menu item while the menu is open. | 64 // Test class for inserting a menu item while the menu is open. |
| 174 template<int INSERT_INDEX, int SELECT_INDEX> | 65 template<int INSERT_INDEX, int SELECT_INDEX> |
| 175 class MenuItemViewTestInsert : public MenuItemViewTestBase { | 66 class MenuItemViewTestInsert : public MenuTestBase { |
| 176 public: | 67 public: |
| 177 MenuItemViewTestInsert() : | 68 MenuItemViewTestInsert() : inserted_item_(NULL) { |
| 178 last_command_(0), | |
| 179 inserted_item_(NULL) { | |
| 180 } | 69 } |
| 181 | 70 |
| 182 virtual ~MenuItemViewTestInsert() { | 71 virtual ~MenuItemViewTestInsert() { |
| 183 } | 72 } |
| 184 | 73 |
| 185 // views::MenuDelegate implementation | 74 // MenuTestBase implementation |
| 186 virtual void ExecuteCommand(int id) OVERRIDE { | |
| 187 last_command_ = id; | |
| 188 } | |
| 189 | |
| 190 // MenuItemViewTestBase implementation | |
| 191 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { | 75 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| 192 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); | 76 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); |
| 193 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); | 77 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); |
| 194 } | 78 } |
| 195 | 79 |
| 196 // ViewEventTestBase implementation | |
| 197 virtual void DoTestOnMessageLoop() OVERRIDE { | |
| 198 Click(button_, CreateEventTask(this, &MenuItemViewTestInsert::Step1)); | |
| 199 } | |
| 200 | |
| 201 // Insert item at INSERT_INDEX and click item at SELECT_INDEX. | 80 // Insert item at INSERT_INDEX and click item at SELECT_INDEX. |
| 202 void Step1() { | 81 virtual void DoTestWithMenuOpen() OVERRIDE { |
| 203 ASSERT_TRUE(menu_); | 82 views::SubmenuView* submenu = menu()->GetSubmenu(); |
| 204 | |
| 205 views::SubmenuView* submenu = menu_->GetSubmenu(); | |
| 206 ASSERT_TRUE(submenu); | 83 ASSERT_TRUE(submenu); |
| 207 ASSERT_TRUE(submenu->IsShowing()); | 84 ASSERT_TRUE(submenu->IsShowing()); |
| 208 ASSERT_EQ(2, submenu->GetMenuItemCount()); | 85 ASSERT_EQ(2, submenu->GetMenuItemCount()); |
| 209 | 86 |
| 210 inserted_item_ = menu_->AddMenuItemAt(INSERT_INDEX, | 87 inserted_item_ = menu()->AddMenuItemAt(INSERT_INDEX, |
| 211 1000, | 88 1000, |
| 212 ASCIIToUTF16("inserted item"), | 89 ASCIIToUTF16("inserted item"), |
| 213 base::string16(), | 90 base::string16(), |
| 214 base::string16(), | 91 base::string16(), |
| 215 gfx::ImageSkia(), | 92 gfx::ImageSkia(), |
| 216 views::MenuItemView::NORMAL, | 93 views::MenuItemView::NORMAL, |
| 217 ui::NORMAL_SEPARATOR); | 94 ui::NORMAL_SEPARATOR); |
| 218 ASSERT_TRUE(inserted_item_); | 95 ASSERT_TRUE(inserted_item_); |
| 219 menu_->ChildrenChanged(); | 96 menu()->ChildrenChanged(); |
| 220 | 97 |
| 221 // click an item and pass control to the next step | 98 // click an item and pass control to the next step |
| 222 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); | 99 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); |
| 223 ASSERT_TRUE(item); | 100 ASSERT_TRUE(item); |
| 224 Click(item, CreateEventTask(this, &MenuItemViewTestInsert::Step2)); | 101 Click(item, CreateEventTask(this, &MenuItemViewTestInsert::Step2)); |
| 225 } | 102 } |
| 226 | 103 |
| 227 // Check clicked item and complete test. | 104 // Check clicked item and complete test. |
| 228 void Step2() { | 105 void Step2() { |
| 229 ASSERT_TRUE(menu_); | 106 views::SubmenuView* submenu = menu()->GetSubmenu(); |
| 230 | |
| 231 views::SubmenuView* submenu = menu_->GetSubmenu(); | |
| 232 ASSERT_TRUE(submenu); | 107 ASSERT_TRUE(submenu); |
| 233 ASSERT_FALSE(submenu->IsShowing()); | 108 ASSERT_FALSE(submenu->IsShowing()); |
| 234 ASSERT_EQ(3, submenu->GetMenuItemCount()); | 109 ASSERT_EQ(3, submenu->GetMenuItemCount()); |
| 235 | 110 |
| 236 if (SELECT_INDEX == INSERT_INDEX) | 111 if (SELECT_INDEX == INSERT_INDEX) |
| 237 ASSERT_EQ(1000, last_command_); | 112 ASSERT_EQ(1000, last_command()); |
| 238 else if (SELECT_INDEX < INSERT_INDEX) | 113 else if (SELECT_INDEX < INSERT_INDEX) |
| 239 ASSERT_EQ(SELECT_INDEX + 1, last_command_); | 114 ASSERT_EQ(SELECT_INDEX + 1, last_command()); |
| 240 else | 115 else |
| 241 ASSERT_EQ(SELECT_INDEX, last_command_); | 116 ASSERT_EQ(SELECT_INDEX, last_command()); |
| 242 | 117 |
| 243 Done(); | 118 Done(); |
| 244 } | 119 } |
| 245 | 120 |
| 246 private: | 121 private: |
| 247 int last_command_; | |
| 248 views::MenuItemView* inserted_item_; | 122 views::MenuItemView* inserted_item_; |
| 123 |
| 124 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestInsert); |
| 249 }; | 125 }; |
| 250 | 126 |
| 251 // MenuItemViewTestInsertXY inserts an item at index X and selects the | 127 // MenuItemViewTestInsertXY inserts an item at index X and selects the |
| 252 // item at index Y (after the insertion). The tests here cover | 128 // item at index Y (after the insertion). The tests here cover |
| 253 // inserting at the beginning, middle, and end, crossbarred with | 129 // inserting at the beginning, middle, and end, crossbarred with |
| 254 // selecting the first and last item. | 130 // selecting the first and last item. |
| 255 typedef MenuItemViewTestInsert<0,0> MenuItemViewTestInsert00; | 131 typedef MenuItemViewTestInsert<0,0> MenuItemViewTestInsert00; |
| 256 typedef MenuItemViewTestInsert<0,2> MenuItemViewTestInsert02; | 132 typedef MenuItemViewTestInsert<0,2> MenuItemViewTestInsert02; |
| 257 typedef MenuItemViewTestInsert<1,0> MenuItemViewTestInsert10; | 133 typedef MenuItemViewTestInsert<1,0> MenuItemViewTestInsert10; |
| 258 typedef MenuItemViewTestInsert<1,2> MenuItemViewTestInsert12; | 134 typedef MenuItemViewTestInsert<1,2> MenuItemViewTestInsert12; |
| 259 typedef MenuItemViewTestInsert<2,0> MenuItemViewTestInsert20; | 135 typedef MenuItemViewTestInsert<2,0> MenuItemViewTestInsert20; |
| 260 typedef MenuItemViewTestInsert<2,2> MenuItemViewTestInsert22; | 136 typedef MenuItemViewTestInsert<2,2> MenuItemViewTestInsert22; |
| 261 VIEW_TEST(MenuItemViewTestInsert00, InsertItem00) | 137 VIEW_TEST(MenuItemViewTestInsert00, InsertItem00) |
| 262 VIEW_TEST(MenuItemViewTestInsert02, InsertItem02) | 138 VIEW_TEST(MenuItemViewTestInsert02, InsertItem02) |
| 263 VIEW_TEST(MenuItemViewTestInsert10, InsertItem10) | 139 VIEW_TEST(MenuItemViewTestInsert10, InsertItem10) |
| 264 VIEW_TEST(MenuItemViewTestInsert12, InsertItem12) | 140 VIEW_TEST(MenuItemViewTestInsert12, InsertItem12) |
| 265 VIEW_TEST(MenuItemViewTestInsert20, InsertItem20) | 141 VIEW_TEST(MenuItemViewTestInsert20, InsertItem20) |
| 266 VIEW_TEST(MenuItemViewTestInsert22, InsertItem22) | 142 VIEW_TEST(MenuItemViewTestInsert22, InsertItem22) |
| 267 | 143 |
| 268 // Test class for inserting a menu item while a submenu is open. | 144 // Test class for inserting a menu item while a submenu is open. |
| 269 template<int INSERT_INDEX> | 145 template<int INSERT_INDEX> |
| 270 class MenuItemViewTestInsertWithSubmenu : public MenuItemViewTestBase { | 146 class MenuItemViewTestInsertWithSubmenu : public MenuTestBase { |
| 271 public: | 147 public: |
| 272 MenuItemViewTestInsertWithSubmenu() : | 148 MenuItemViewTestInsertWithSubmenu() : |
| 273 last_command_(0), | |
| 274 submenu_(NULL), | 149 submenu_(NULL), |
| 275 inserted_item_(NULL) { | 150 inserted_item_(NULL) { |
| 276 } | 151 } |
| 277 | 152 |
| 278 virtual ~MenuItemViewTestInsertWithSubmenu() { | 153 virtual ~MenuItemViewTestInsertWithSubmenu() { |
| 279 } | 154 } |
| 280 | 155 |
| 281 // views::MenuDelegate implementation | 156 // MenuTestBase implementation |
| 282 virtual void ExecuteCommand(int id) OVERRIDE { | |
| 283 last_command_ = id; | |
| 284 } | |
| 285 | |
| 286 // MenuItemViewTestBase implementation | |
| 287 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { | 157 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| 288 submenu_ = menu->AppendSubMenu(1, ASCIIToUTF16("My Submenu")); | 158 submenu_ = menu->AppendSubMenu(1, ASCIIToUTF16("My Submenu")); |
| 289 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1")); | 159 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1")); |
| 290 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 2")); | 160 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 2")); |
| 291 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); | 161 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); |
| 292 } | 162 } |
| 293 | 163 |
| 294 // ViewEventTestBase implementation | |
| 295 virtual void DoTestOnMessageLoop() OVERRIDE { | |
| 296 Click(button_, | |
| 297 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step1)); | |
| 298 } | |
| 299 | |
| 300 // Post submenu. | 164 // Post submenu. |
| 301 void Step1() { | 165 virtual void DoTestWithMenuOpen() OVERRIDE { |
| 302 Click(submenu_, | 166 Click(submenu_, |
| 303 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step2)); | 167 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step2)); |
| 304 } | 168 } |
| 305 | 169 |
| 306 // Insert item at INSERT_INDEX. | 170 // Insert item at INSERT_INDEX. |
| 307 void Step2() { | 171 void Step2() { |
| 308 inserted_item_ = menu_->AddMenuItemAt(INSERT_INDEX, | 172 inserted_item_ = menu()->AddMenuItemAt(INSERT_INDEX, |
| 309 1000, | 173 1000, |
| 310 ASCIIToUTF16("inserted item"), | 174 ASCIIToUTF16("inserted item"), |
| 311 base::string16(), | 175 base::string16(), |
| 312 base::string16(), | 176 base::string16(), |
| 313 gfx::ImageSkia(), | 177 gfx::ImageSkia(), |
| 314 views::MenuItemView::NORMAL, | 178 views::MenuItemView::NORMAL, |
| 315 ui::NORMAL_SEPARATOR); | 179 ui::NORMAL_SEPARATOR); |
| 316 ASSERT_TRUE(inserted_item_); | 180 ASSERT_TRUE(inserted_item_); |
| 317 menu_->ChildrenChanged(); | 181 menu()->ChildrenChanged(); |
| 318 | 182 |
| 319 Click(inserted_item_, | 183 Click(inserted_item_, |
| 320 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step3)); | 184 CreateEventTask(this, &MenuItemViewTestInsertWithSubmenu::Step3)); |
| 321 } | 185 } |
| 322 | 186 |
| 323 void Step3() { | 187 void Step3() { |
| 324 Done(); | 188 Done(); |
| 325 } | 189 } |
| 326 | 190 |
| 327 private: | 191 private: |
| 328 int last_command_; | |
| 329 views::MenuItemView* submenu_; | 192 views::MenuItemView* submenu_; |
| 330 views::MenuItemView* inserted_item_; | 193 views::MenuItemView* inserted_item_; |
| 194 |
| 195 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestInsertWithSubmenu); |
| 331 }; | 196 }; |
| 332 | 197 |
| 333 // MenuItemViewTestInsertWithSubmenuX posts a menu and its submenu, | 198 // MenuItemViewTestInsertWithSubmenuX posts a menu and its submenu, |
| 334 // then inserts an item in the top-level menu at X. | 199 // then inserts an item in the top-level menu at X. |
| 335 typedef MenuItemViewTestInsertWithSubmenu<0> MenuItemViewTestInsertWithSubmenu0; | 200 typedef MenuItemViewTestInsertWithSubmenu<0> MenuItemViewTestInsertWithSubmenu0; |
| 336 typedef MenuItemViewTestInsertWithSubmenu<1> MenuItemViewTestInsertWithSubmenu1; | 201 typedef MenuItemViewTestInsertWithSubmenu<1> MenuItemViewTestInsertWithSubmenu1; |
| 337 VIEW_TEST(MenuItemViewTestInsertWithSubmenu0, InsertItemWithSubmenu0) | 202 VIEW_TEST(MenuItemViewTestInsertWithSubmenu0, InsertItemWithSubmenu0) |
| 338 VIEW_TEST(MenuItemViewTestInsertWithSubmenu1, InsertItemWithSubmenu1) | 203 VIEW_TEST(MenuItemViewTestInsertWithSubmenu1, InsertItemWithSubmenu1) |
| 339 | 204 |
| 340 // Test class for removing a menu item while the menu is open. | 205 // Test class for removing a menu item while the menu is open. |
| 341 template<int REMOVE_INDEX, int SELECT_INDEX> | 206 template<int REMOVE_INDEX, int SELECT_INDEX> |
| 342 class MenuItemViewTestRemove : public MenuItemViewTestBase { | 207 class MenuItemViewTestRemove : public MenuTestBase { |
| 343 public: | 208 public: |
| 344 MenuItemViewTestRemove() | 209 MenuItemViewTestRemove() { |
| 345 : last_command_(0) { | |
| 346 } | 210 } |
| 347 | 211 |
| 348 virtual ~MenuItemViewTestRemove() { | 212 virtual ~MenuItemViewTestRemove() { |
| 349 } | 213 } |
| 350 | 214 |
| 351 // views::MenuDelegate implementation | 215 // MenuTestBase implementation |
| 352 virtual void ExecuteCommand(int id) OVERRIDE { | |
| 353 last_command_ = id; | |
| 354 } | |
| 355 | |
| 356 // MenuItemViewTestBase implementation | |
| 357 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { | 216 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| 358 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); | 217 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); |
| 359 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); | 218 menu->AppendMenuItemWithLabel(2, ASCIIToUTF16("item 2")); |
| 360 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3")); | 219 menu->AppendMenuItemWithLabel(3, ASCIIToUTF16("item 3")); |
| 361 } | 220 } |
| 362 | 221 |
| 363 // ViewEventTestBase implementation | |
| 364 virtual void DoTestOnMessageLoop() OVERRIDE { | |
| 365 Click(button_, CreateEventTask(this, &MenuItemViewTestRemove::Step1)); | |
| 366 } | |
| 367 | |
| 368 // Remove item at REMOVE_INDEX and click item at SELECT_INDEX. | 222 // Remove item at REMOVE_INDEX and click item at SELECT_INDEX. |
| 369 void Step1() { | 223 virtual void DoTestWithMenuOpen() OVERRIDE { |
| 370 ASSERT_TRUE(menu_); | 224 views::SubmenuView* submenu = menu()->GetSubmenu(); |
| 371 | |
| 372 views::SubmenuView* submenu = menu_->GetSubmenu(); | |
| 373 ASSERT_TRUE(submenu); | 225 ASSERT_TRUE(submenu); |
| 374 ASSERT_TRUE(submenu->IsShowing()); | 226 ASSERT_TRUE(submenu->IsShowing()); |
| 375 ASSERT_EQ(3, submenu->GetMenuItemCount()); | 227 ASSERT_EQ(3, submenu->GetMenuItemCount()); |
| 376 | 228 |
| 377 // remove | 229 // remove |
| 378 menu_->RemoveMenuItemAt(REMOVE_INDEX); | 230 menu()->RemoveMenuItemAt(REMOVE_INDEX); |
| 379 menu_->ChildrenChanged(); | 231 menu()->ChildrenChanged(); |
| 380 | 232 |
| 381 // click | 233 // click |
| 382 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); | 234 views::MenuItemView* item = submenu->GetMenuItemAt(SELECT_INDEX); |
| 383 ASSERT_TRUE(item); | 235 ASSERT_TRUE(item); |
| 384 Click(item, CreateEventTask(this, &MenuItemViewTestRemove::Step2)); | 236 Click(item, CreateEventTask(this, &MenuItemViewTestRemove::Step2)); |
| 385 } | 237 } |
| 386 | 238 |
| 387 // Check clicked item and complete test. | 239 // Check clicked item and complete test. |
| 388 void Step2() { | 240 void Step2() { |
| 389 ASSERT_TRUE(menu_); | 241 views::SubmenuView* submenu = menu()->GetSubmenu(); |
| 390 | |
| 391 views::SubmenuView* submenu = menu_->GetSubmenu(); | |
| 392 ASSERT_TRUE(submenu); | 242 ASSERT_TRUE(submenu); |
| 393 ASSERT_FALSE(submenu->IsShowing()); | 243 ASSERT_FALSE(submenu->IsShowing()); |
| 394 ASSERT_EQ(2, submenu->GetMenuItemCount()); | 244 ASSERT_EQ(2, submenu->GetMenuItemCount()); |
| 395 | 245 |
| 396 if (SELECT_INDEX < REMOVE_INDEX) | 246 if (SELECT_INDEX < REMOVE_INDEX) |
| 397 ASSERT_EQ(SELECT_INDEX + 1, last_command_); | 247 ASSERT_EQ(SELECT_INDEX + 1, last_command()); |
| 398 else | 248 else |
| 399 ASSERT_EQ(SELECT_INDEX + 2, last_command_); | 249 ASSERT_EQ(SELECT_INDEX + 2, last_command()); |
| 400 | 250 |
| 401 Done(); | 251 Done(); |
| 402 } | 252 } |
| 403 | 253 |
| 404 private: | 254 private: |
| 405 int last_command_; | 255 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestRemove); |
| 406 }; | 256 }; |
| 407 | 257 |
| 408 typedef MenuItemViewTestRemove<0,0> MenuItemViewTestRemove00; | 258 typedef MenuItemViewTestRemove<0,0> MenuItemViewTestRemove00; |
| 409 typedef MenuItemViewTestRemove<0,1> MenuItemViewTestRemove01; | 259 typedef MenuItemViewTestRemove<0,1> MenuItemViewTestRemove01; |
| 410 typedef MenuItemViewTestRemove<1,0> MenuItemViewTestRemove10; | 260 typedef MenuItemViewTestRemove<1,0> MenuItemViewTestRemove10; |
| 411 typedef MenuItemViewTestRemove<1,1> MenuItemViewTestRemove11; | 261 typedef MenuItemViewTestRemove<1,1> MenuItemViewTestRemove11; |
| 412 typedef MenuItemViewTestRemove<2,0> MenuItemViewTestRemove20; | 262 typedef MenuItemViewTestRemove<2,0> MenuItemViewTestRemove20; |
| 413 typedef MenuItemViewTestRemove<2,1> MenuItemViewTestRemove21; | 263 typedef MenuItemViewTestRemove<2,1> MenuItemViewTestRemove21; |
| 414 VIEW_TEST(MenuItemViewTestRemove00, RemoveItem00) | 264 VIEW_TEST(MenuItemViewTestRemove00, RemoveItem00) |
| 415 VIEW_TEST(MenuItemViewTestRemove01, RemoveItem01) | 265 VIEW_TEST(MenuItemViewTestRemove01, RemoveItem01) |
| 416 VIEW_TEST(MenuItemViewTestRemove10, RemoveItem10) | 266 VIEW_TEST(MenuItemViewTestRemove10, RemoveItem10) |
| 417 VIEW_TEST(MenuItemViewTestRemove11, RemoveItem11) | 267 VIEW_TEST(MenuItemViewTestRemove11, RemoveItem11) |
| 418 VIEW_TEST(MenuItemViewTestRemove20, RemoveItem20) | 268 VIEW_TEST(MenuItemViewTestRemove20, RemoveItem20) |
| 419 VIEW_TEST(MenuItemViewTestRemove21, RemoveItem21) | 269 VIEW_TEST(MenuItemViewTestRemove21, RemoveItem21) |
| 420 | 270 |
| 421 // Test class for removing a menu item while a submenu is open. | 271 // Test class for removing a menu item while a submenu is open. |
| 422 template<int REMOVE_INDEX> | 272 template<int REMOVE_INDEX> |
| 423 class MenuItemViewTestRemoveWithSubmenu : public MenuItemViewTestBase { | 273 class MenuItemViewTestRemoveWithSubmenu : public MenuTestBase { |
| 424 public: | 274 public: |
| 425 MenuItemViewTestRemoveWithSubmenu() : | 275 MenuItemViewTestRemoveWithSubmenu() : submenu_(NULL) { |
| 426 last_command_(0), | |
| 427 submenu_(NULL) { | |
| 428 } | 276 } |
| 429 | 277 |
| 430 virtual ~MenuItemViewTestRemoveWithSubmenu() { | 278 virtual ~MenuItemViewTestRemoveWithSubmenu() { |
| 431 } | 279 } |
| 432 | 280 |
| 433 // views::MenuDelegate implementation | 281 // MenuTestBase implementation |
| 434 virtual void ExecuteCommand(int id) OVERRIDE { | |
| 435 last_command_ = id; | |
| 436 } | |
| 437 | |
| 438 // MenuItemViewTestBase implementation | |
| 439 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { | 282 virtual void BuildMenu(views::MenuItemView* menu) OVERRIDE { |
| 440 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); | 283 menu->AppendMenuItemWithLabel(1, ASCIIToUTF16("item 1")); |
| 441 submenu_ = menu->AppendSubMenu(2, ASCIIToUTF16("My Submenu")); | 284 submenu_ = menu->AppendSubMenu(2, ASCIIToUTF16("My Submenu")); |
| 442 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1")); | 285 submenu_->AppendMenuItemWithLabel(101, ASCIIToUTF16("submenu item 1")); |
| 443 submenu_->AppendMenuItemWithLabel(102, ASCIIToUTF16("submenu item 2")); | 286 submenu_->AppendMenuItemWithLabel(102, ASCIIToUTF16("submenu item 2")); |
| 444 } | 287 } |
| 445 | 288 |
| 446 // ViewEventTestBase implementation | |
| 447 virtual void DoTestOnMessageLoop() OVERRIDE { | |
| 448 Click(button_, | |
| 449 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step1)); | |
| 450 } | |
| 451 | |
| 452 // Post submenu. | 289 // Post submenu. |
| 453 void Step1() { | 290 virtual void DoTestWithMenuOpen() OVERRIDE { |
| 454 ASSERT_TRUE(menu_); | 291 views::SubmenuView* submenu = menu()->GetSubmenu(); |
| 455 | |
| 456 views::SubmenuView* submenu = menu_->GetSubmenu(); | |
| 457 ASSERT_TRUE(submenu); | 292 ASSERT_TRUE(submenu); |
| 458 ASSERT_TRUE(submenu->IsShowing()); | 293 ASSERT_TRUE(submenu->IsShowing()); |
| 459 | 294 |
| 460 Click(submenu_, | 295 Click(submenu_, |
| 461 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step2)); | 296 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step2)); |
| 462 } | 297 } |
| 463 | 298 |
| 464 // Remove item at REMOVE_INDEX and select it to exit the menu loop. | 299 // Remove item at REMOVE_INDEX and press escape to exit the menu loop. |
| 465 void Step2() { | 300 void Step2() { |
| 466 ASSERT_TRUE(menu_); | 301 views::SubmenuView* submenu = menu()->GetSubmenu(); |
| 467 | |
| 468 views::SubmenuView* submenu = menu_->GetSubmenu(); | |
| 469 ASSERT_TRUE(submenu); | 302 ASSERT_TRUE(submenu); |
| 470 ASSERT_TRUE(submenu->IsShowing()); | 303 ASSERT_TRUE(submenu->IsShowing()); |
| 471 ASSERT_EQ(2, submenu->GetMenuItemCount()); | 304 ASSERT_EQ(2, submenu->GetMenuItemCount()); |
| 472 | 305 |
| 473 // remove | 306 // remove |
| 474 menu_->RemoveMenuItemAt(REMOVE_INDEX); | 307 menu()->RemoveMenuItemAt(REMOVE_INDEX); |
| 475 menu_->ChildrenChanged(); | 308 menu()->ChildrenChanged(); |
| 476 | 309 |
| 477 // click | 310 // click |
| 478 Click(button_, | 311 KeyPress(ui::VKEY_ESCAPE, |
| 479 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step3)); | 312 CreateEventTask(this, &MenuItemViewTestRemoveWithSubmenu::Step3)); |
| 480 } | 313 } |
| 481 | 314 |
| 482 void Step3() { | 315 void Step3() { |
| 483 ASSERT_TRUE(menu_); | 316 views::SubmenuView* submenu = menu()->GetSubmenu(); |
| 484 | |
| 485 views::SubmenuView* submenu = menu_->GetSubmenu(); | |
| 486 ASSERT_TRUE(submenu); | 317 ASSERT_TRUE(submenu); |
| 487 ASSERT_FALSE(submenu->IsShowing()); | 318 ASSERT_FALSE(submenu->IsShowing()); |
| 488 ASSERT_EQ(1, submenu->GetMenuItemCount()); | 319 ASSERT_EQ(1, submenu->GetMenuItemCount()); |
| 489 | 320 |
| 490 Done(); | 321 Done(); |
| 491 } | 322 } |
| 492 | 323 |
| 493 private: | 324 private: |
| 494 int last_command_; | |
| 495 views::MenuItemView* submenu_; | 325 views::MenuItemView* submenu_; |
| 326 |
| 327 DISALLOW_COPY_AND_ASSIGN(MenuItemViewTestRemoveWithSubmenu); |
| 496 }; | 328 }; |
| 497 | 329 |
| 498 typedef MenuItemViewTestRemoveWithSubmenu<0> MenuItemViewTestRemoveWithSubmenu0; | 330 typedef MenuItemViewTestRemoveWithSubmenu<0> MenuItemViewTestRemoveWithSubmenu0; |
| 499 typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1; | 331 typedef MenuItemViewTestRemoveWithSubmenu<1> MenuItemViewTestRemoveWithSubmenu1; |
| 500 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, RemoveItemWithSubmenu0) | 332 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu0, RemoveItemWithSubmenu0) |
| 501 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, RemoveItemWithSubmenu1) | 333 VIEW_TEST(MenuItemViewTestRemoveWithSubmenu1, RemoveItemWithSubmenu1) |
| OLD | NEW |