Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Side by Side Diff: chrome/browser/ui/views/menu_model_adapter_test.cc

Issue 7720012: Moves ownership of MenuItemView to MenuRunner as well as responbility (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix unit test Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698