Home | History | Annotate | Download | only in toolbar
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/toolbar/wrench_menu_model.h"
      6 
      7 #include "chrome/app/chrome_command_ids.h"
      8 #include "chrome/browser/ui/browser.h"
      9 #include "chrome/test/browser_with_test_window_test.h"
     10 #include "chrome/test/menu_model_test.h"
     11 #include "chrome/test/testing_profile.h"
     12 #include "grit/generated_resources.h"
     13 #include "testing/gtest/include/gtest/gtest.h"
     14 
     15 class WrenchMenuModelTest : public BrowserWithTestWindowTest,
     16                             public ui::AcceleratorProvider {
     17  public:
     18   // Don't handle accelerators.
     19   virtual bool GetAcceleratorForCommandId(
     20       int command_id,
     21       ui::Accelerator* accelerator) { return false; }
     22 };
     23 
     24 // Copies parts of MenuModelTest::Delegate and combines them with the
     25 // WrenchMenuModel since WrenchMenuModel is now a SimpleMenuModel::Delegate and
     26 // not derived from SimpleMenuModel.
     27 class TestWrenchMenuModel : public WrenchMenuModel {
     28  public:
     29   TestWrenchMenuModel(ui::AcceleratorProvider* provider,
     30                       Browser* browser)
     31       : WrenchMenuModel(provider, browser),
     32         execute_count_(0),
     33         checked_count_(0),
     34         enable_count_(0) {
     35   }
     36 
     37   // Testing overrides to ui::SimpleMenuModel::Delegate:
     38   virtual bool IsCommandIdChecked(int command_id) const {
     39     bool val = WrenchMenuModel::IsCommandIdChecked(command_id);
     40     if (val)
     41       checked_count_++;
     42     return val;
     43   }
     44 
     45   virtual bool IsCommandIdEnabled(int command_id) const {
     46     ++enable_count_;
     47     return true;
     48   }
     49 
     50   virtual void ExecuteCommand(int command_id) { ++execute_count_; }
     51 
     52   int execute_count_;
     53   mutable int checked_count_;
     54   mutable int enable_count_;
     55 };
     56 
     57 TEST_F(WrenchMenuModelTest, Basics) {
     58   TestWrenchMenuModel model(this, browser());
     59   int itemCount = model.GetItemCount();
     60 
     61   // Verify it has items. The number varies by platform, so we don't check
     62   // the exact number.
     63   EXPECT_GT(itemCount, 10);
     64 
     65   // Execute a couple of the items and make sure it gets back to our delegate.
     66   // We can't use CountEnabledExecutable() here because the encoding menu's
     67   // delegate is internal, it doesn't use the one we pass in.
     68   model.ActivatedAt(0);
     69   EXPECT_TRUE(model.IsEnabledAt(0));
     70   // Make sure to use the index that is not separator in all configurations.
     71   model.ActivatedAt(2);
     72   EXPECT_TRUE(model.IsEnabledAt(2));
     73   EXPECT_EQ(model.execute_count_, 2);
     74   EXPECT_EQ(model.enable_count_, 2);
     75 
     76   model.execute_count_ = 0;
     77   model.enable_count_ = 0;
     78 
     79   // Choose something from the tools submenu and make sure it makes it back to
     80   // the delegate as well. Use the first submenu as the tools one.
     81   int toolsModelIndex = -1;
     82   for (int i = 0; i < itemCount; ++i) {
     83     if (model.GetTypeAt(i) == ui::MenuModel::TYPE_SUBMENU) {
     84       toolsModelIndex = i;
     85       break;
     86     }
     87   }
     88   EXPECT_GT(toolsModelIndex, -1);
     89   ui::MenuModel* toolsModel = model.GetSubmenuModelAt(toolsModelIndex);
     90   EXPECT_TRUE(toolsModel);
     91   EXPECT_GT(toolsModel->GetItemCount(), 2);
     92   toolsModel->ActivatedAt(2);
     93   EXPECT_TRUE(toolsModel->IsEnabledAt(2));
     94   EXPECT_EQ(model.execute_count_, 1);
     95   EXPECT_EQ(model.enable_count_, 1);
     96 }
     97 
     98 class EncodingMenuModelTest : public BrowserWithTestWindowTest,
     99                               public MenuModelTest {
    100 };
    101 
    102 TEST_F(EncodingMenuModelTest, IsCommandIdCheckedWithNoTabs) {
    103   EncodingMenuModel model(browser());
    104   ASSERT_EQ(NULL, browser()->GetSelectedTabContents());
    105   EXPECT_FALSE(model.IsCommandIdChecked(IDC_ENCODING_ISO88591));
    106 }
    107