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 |