1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/ui/toolbar/wrench_menu_model.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/app/chrome_command_ids.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/browser.h" 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/browser_with_test_window_test.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/menu_model_test.h" 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/test/testing_profile.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass WrenchMenuModelTest : public BrowserWithTestWindowTest, 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen public ui::AcceleratorProvider { 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Don't handle accelerators. 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual bool GetAcceleratorForCommandId( 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int command_id, 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::Accelerator* accelerator) { return false; } 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copies parts of MenuModelTest::Delegate and combines them with the 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// WrenchMenuModel since WrenchMenuModel is now a SimpleMenuModel::Delegate and 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// not derived from SimpleMenuModel. 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TestWrenchMenuModel : public WrenchMenuModel { 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TestWrenchMenuModel(ui::AcceleratorProvider* provider, 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Browser* browser) 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : WrenchMenuModel(provider, browser), 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick execute_count_(0), 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick checked_count_(0), 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick enable_count_(0) { 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Testing overrides to ui::SimpleMenuModel::Delegate: 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual bool IsCommandIdChecked(int command_id) const { 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool val = WrenchMenuModel::IsCommandIdChecked(command_id); 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (val) 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick checked_count_++; 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return val; 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual bool IsCommandIdEnabled(int command_id) const { 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ++enable_count_; 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return true; 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void ExecuteCommand(int command_id) { ++execute_count_; } 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int execute_count_; 533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick mutable int checked_count_; 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick mutable int enable_count_; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(WrenchMenuModelTest, Basics) { 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestWrenchMenuModel model(this, browser()); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int itemCount = model.GetItemCount(); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Verify it has items. The number varies by platform, so we don't check 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the exact number. 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_GT(itemCount, 10); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Execute a couple of the items and make sure it gets back to our delegate. 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We can't use CountEnabledExecutable() here because the encoding menu's 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // delegate is internal, it doesn't use the one we pass in. 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model.ActivatedAt(0); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(model.IsEnabledAt(0)); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Make sure to use the index that is not separator in all configurations. 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch model.ActivatedAt(2); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(model.IsEnabledAt(2)); 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(model.execute_count_, 2); 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(model.enable_count_, 2); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick model.execute_count_ = 0; 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick model.enable_count_ = 0; 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Choose something from the tools submenu and make sure it makes it back to 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the delegate as well. Use the first submenu as the tools one. 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int toolsModelIndex = -1; 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch for (int i = 0; i < itemCount; ++i) { 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (model.GetTypeAt(i) == ui::MenuModel::TYPE_SUBMENU) { 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch toolsModelIndex = i; 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch break; 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_GT(toolsModelIndex, -1); 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::MenuModel* toolsModel = model.GetSubmenuModelAt(toolsModelIndex); 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(toolsModel); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_GT(toolsModel->GetItemCount(), 2); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch toolsModel->ActivatedAt(2); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_TRUE(toolsModel->IsEnabledAt(2)); 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(model.execute_count_, 1); 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_EQ(model.enable_count_, 1); 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass EncodingMenuModelTest : public BrowserWithTestWindowTest, 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public MenuModelTest { 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(EncodingMenuModelTest, IsCommandIdCheckedWithNoTabs) { 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EncodingMenuModel model(browser()); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASSERT_EQ(NULL, browser()->GetSelectedTabContents()); 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch EXPECT_FALSE(model.IsCommandIdChecked(IDC_ENCODING_ISO88591)); 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 107