| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/automation/ui_controls.h" | 5 #include "chrome/browser/automation/ui_controls.h" |
| 6 #include "chrome/test/base/view_event_test_base.h" | 6 #include "chrome/test/base/view_event_test_base.h" |
| 7 #include "ui/base/models/menu_model.h" | 7 #include "ui/base/models/menu_model.h" |
| 8 #include "views/controls/button/menu_button.h" | 8 #include "views/controls/button/menu_button.h" |
| 9 #include "views/controls/menu/menu_controller.h" | 9 #include "views/controls/menu/menu_controller.h" |
| 10 #include "views/controls/menu/menu_item_view.h" | 10 #include "views/controls/menu/menu_item_view.h" |
| 11 #include "views/controls/menu/menu_model_adapter.h" | 11 #include "views/controls/menu/menu_model_adapter.h" |
| 12 #include "views/controls/menu/menu_runner.h" |
| 12 #include "views/controls/menu/submenu_view.h" | 13 #include "views/controls/menu/submenu_view.h" |
| 13 #include "views/controls/menu/view_menu_delegate.h" | 14 #include "views/controls/menu/view_menu_delegate.h" |
| 14 #include "views/test/test_views_delegate.h" | 15 #include "views/test/test_views_delegate.h" |
| 15 #include "views/views_delegate.h" | 16 #include "views/views_delegate.h" |
| 16 #include "views/widget/root_view.h" | 17 #include "views/widget/root_view.h" |
| 17 #include "views/widget/widget.h" | 18 #include "views/widget/widget.h" |
| 18 | 19 |
| 19 namespace { | 20 namespace { |
| 20 | 21 |
| 21 const int kTopMenuBaseId = 100; | 22 const int kTopMenuBaseId = 100; |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 240 mutable SubMenuModel sub_menu_model_; | 241 mutable SubMenuModel sub_menu_model_; |
| 241 | 242 |
| 242 DISALLOW_COPY_AND_ASSIGN(TopMenuModel); | 243 DISALLOW_COPY_AND_ASSIGN(TopMenuModel); |
| 243 }; | 244 }; |
| 244 | 245 |
| 245 } // namespace | 246 } // namespace |
| 246 | 247 |
| 247 class MenuModelAdapterTest : public ViewEventTestBase, | 248 class MenuModelAdapterTest : public ViewEventTestBase, |
| 248 public views::ViewMenuDelegate { | 249 public views::ViewMenuDelegate { |
| 249 public: | 250 public: |
| 250 MenuModelAdapterTest() : | 251 MenuModelAdapterTest() |
| 251 ViewEventTestBase(), | 252 : ViewEventTestBase(), |
| 252 button_(NULL), | 253 button_(NULL), |
| 253 menu_model_adapter_(&top_menu_model_) { | 254 menu_model_adapter_(&top_menu_model_), |
| 255 menu_(NULL) { |
| 254 old_views_delegate_ = views::ViewsDelegate::views_delegate; | 256 old_views_delegate_ = views::ViewsDelegate::views_delegate; |
| 255 views::ViewsDelegate::views_delegate = &views_delegate_; | 257 views::ViewsDelegate::views_delegate = &views_delegate_; |
| 256 } | 258 } |
| 257 | 259 |
| 258 virtual ~MenuModelAdapterTest() { | 260 virtual ~MenuModelAdapterTest() { |
| 259 views::ViewsDelegate::views_delegate = old_views_delegate_; | 261 views::ViewsDelegate::views_delegate = old_views_delegate_; |
| 260 } | 262 } |
| 261 | 263 |
| 262 // ViewEventTestBase implementation. | 264 // ViewEventTestBase implementation. |
| 263 | 265 |
| 264 virtual void SetUp() OVERRIDE { | 266 virtual void SetUp() OVERRIDE { |
| 265 button_ = new views::MenuButton(NULL, L"Menu Adapter Test", this, true); | 267 button_ = new views::MenuButton(NULL, L"Menu Adapter Test", this, true); |
| 266 | 268 |
| 267 menu_.reset(new views::MenuItemView(&menu_model_adapter_)); | 269 menu_ = menu_model_adapter_.CreateMenu(); |
| 268 menu_model_adapter_.BuildMenu(menu_.get()); | 270 menu_runner_.reset(new views::MenuRunner(menu_)); |
| 269 | 271 |
| 270 ViewEventTestBase::SetUp(); | 272 ViewEventTestBase::SetUp(); |
| 271 } | 273 } |
| 272 | 274 |
| 273 virtual void TearDown() OVERRIDE { | 275 virtual void TearDown() OVERRIDE { |
| 274 menu_.reset(NULL); | 276 menu_runner_.reset(NULL); |
| 277 menu_ = NULL; |
| 275 ViewEventTestBase::TearDown(); | 278 ViewEventTestBase::TearDown(); |
| 276 } | 279 } |
| 277 | 280 |
| 278 virtual views::View* CreateContentsView() OVERRIDE { | 281 virtual views::View* CreateContentsView() OVERRIDE { |
| 279 return button_; | 282 return button_; |
| 280 } | 283 } |
| 281 | 284 |
| 282 virtual gfx::Size GetPreferredSize() OVERRIDE { | 285 virtual gfx::Size GetPreferredSize() OVERRIDE { |
| 283 return button_->GetPreferredSize(); | 286 return button_->GetPreferredSize(); |
| 284 } | 287 } |
| 285 | 288 |
| 286 // views::ViewMenuDelegate implementation. | 289 // views::ViewMenuDelegate implementation. |
| 287 virtual void RunMenu(views::View* source, const gfx::Point& pt) OVERRIDE { | 290 virtual void RunMenu(views::View* source, const gfx::Point& pt) OVERRIDE { |
| 288 gfx::Point screen_location; | 291 gfx::Point screen_location; |
| 289 views::View::ConvertPointToScreen(source, &screen_location); | 292 views::View::ConvertPointToScreen(source, &screen_location); |
| 290 gfx::Rect bounds(screen_location, source->size()); | 293 gfx::Rect bounds(screen_location, source->size()); |
| 291 menu_->RunMenuAt( | 294 ignore_result(menu_runner_->RunMenuAt( |
| 292 source->GetWidget(), | 295 source->GetWidget(), |
| 293 button_, | 296 button_, |
| 294 bounds, | 297 bounds, |
| 295 views::MenuItemView::TOPLEFT, | 298 views::MenuItemView::TOPLEFT, |
| 296 true); | 299 views::MenuRunner::HAS_MNEMONICS)); |
| 297 } | 300 } |
| 298 | 301 |
| 299 // ViewEventTestBase implementation | 302 // ViewEventTestBase implementation |
| 300 virtual void DoTestOnMessageLoop() OVERRIDE { | 303 virtual void DoTestOnMessageLoop() OVERRIDE { |
| 301 Click(button_, CreateEventTask(this, &MenuModelAdapterTest::Step1)); | 304 Click(button_, CreateEventTask(this, &MenuModelAdapterTest::Step1)); |
| 302 } | 305 } |
| 303 | 306 |
| 304 // Open the submenu. | 307 // Open the submenu. |
| 305 void Step1() { | 308 void Step1() { |
| 306 views::SubmenuView* topmenu = menu_->GetSubmenu(); | 309 views::SubmenuView* topmenu = menu_->GetSubmenu(); |
| 307 ASSERT_TRUE(topmenu); | 310 ASSERT_TRUE(topmenu); |
| 308 ASSERT_TRUE(topmenu->IsShowing()); | 311 ASSERT_TRUE(topmenu->IsShowing()); |
| 309 ASSERT_FALSE(top_menu_model_.IsSubmenuShowing()); | 312 ASSERT_FALSE(top_menu_model_.IsSubmenuShowing()); |
| 310 | 313 |
| 311 // Click the first item to open the submenu. | 314 // Click the first item to open the submenu. |
| 312 views::MenuItemView* item = topmenu->GetMenuItemAt(0); | 315 views::MenuItemView* item = topmenu->GetMenuItemAt(0); |
| 313 ASSERT_TRUE(item); | 316 ASSERT_TRUE(item); |
| 314 Click(item, CreateEventTask(this, &MenuModelAdapterTest::Step2)); | 317 Click(item, CreateEventTask(this, &MenuModelAdapterTest::Step2)); |
| 315 } | 318 } |
| 316 | 319 |
| 317 // Rebuild the menu which should close the submenu. | 320 // Rebuild the menu which should close the submenu. |
| 318 void Step2() { | 321 void Step2() { |
| 319 views::SubmenuView* topmenu = menu_->GetSubmenu(); | 322 views::SubmenuView* topmenu = menu_->GetSubmenu(); |
| 320 ASSERT_TRUE(topmenu); | 323 ASSERT_TRUE(topmenu); |
| 321 ASSERT_TRUE(topmenu->IsShowing()); | 324 ASSERT_TRUE(topmenu->IsShowing()); |
| 322 ASSERT_TRUE(top_menu_model_.IsSubmenuShowing()); | 325 ASSERT_TRUE(top_menu_model_.IsSubmenuShowing()); |
| 323 | 326 |
| 324 menu_model_adapter_.BuildMenu(menu_.get()); | 327 menu_model_adapter_.BuildMenu(menu_); |
| 325 | 328 |
| 326 MessageLoopForUI::current()->PostTask( | 329 MessageLoopForUI::current()->PostTask( |
| 327 FROM_HERE, | 330 FROM_HERE, |
| 328 CreateEventTask(this, &MenuModelAdapterTest::Step3)); | 331 CreateEventTask(this, &MenuModelAdapterTest::Step3)); |
| 329 } | 332 } |
| 330 | 333 |
| 331 // Verify that the submenu MenuModel received the close callback | 334 // Verify that the submenu MenuModel received the close callback |
| 332 // and close the menu. | 335 // and close the menu. |
| 333 void Step3() { | 336 void Step3() { |
| 334 views::SubmenuView* topmenu = menu_->GetSubmenu(); | 337 views::SubmenuView* topmenu = menu_->GetSubmenu(); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 359 ui_controls::DOWN | ui_controls::UP, | 362 ui_controls::DOWN | ui_controls::UP, |
| 360 next); | 363 next); |
| 361 } | 364 } |
| 362 | 365 |
| 363 views::ViewsDelegate* old_views_delegate_; | 366 views::ViewsDelegate* old_views_delegate_; |
| 364 TestViewsDelegate views_delegate_; | 367 TestViewsDelegate views_delegate_; |
| 365 | 368 |
| 366 views::MenuButton* button_; | 369 views::MenuButton* button_; |
| 367 TopMenuModel top_menu_model_; | 370 TopMenuModel top_menu_model_; |
| 368 views::MenuModelAdapter menu_model_adapter_; | 371 views::MenuModelAdapter menu_model_adapter_; |
| 369 scoped_ptr<views::MenuItemView> menu_; | 372 views::MenuItemView* menu_; |
| 373 scoped_ptr<views::MenuRunner> menu_runner_; |
| 370 }; | 374 }; |
| 371 | 375 |
| 372 VIEW_TEST(MenuModelAdapterTest, RebuildMenu) | 376 VIEW_TEST(MenuModelAdapterTest, RebuildMenu) |
| OLD | NEW |