Home | History | Annotate | Download | only in base
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_TEST_BASE_MENU_MODEL_TEST_H_
      6 #define CHROME_TEST_BASE_MENU_MODEL_TEST_H_
      7 
      8 #include "ui/base/accelerators/accelerator.h"
      9 #include "ui/base/models/simple_menu_model.h"
     10 
     11 // A mix-in class to be used in addition to something that derrives from
     12 // testing::Test to provide some extra functionality for testing menu models.
     13 class MenuModelTest {
     14  public:
     15   MenuModelTest() {}
     16   virtual ~MenuModelTest() {}
     17 
     18  protected:
     19   // A menu delegate that counts the number of times certain things are called
     20   // to make sure things are hooked up properly.
     21   class Delegate : public ui::SimpleMenuModel::Delegate,
     22                    public ui::AcceleratorProvider {
     23    public:
     24     Delegate() : execute_count_(0), enable_count_(0) {}
     25 
     26     virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
     27     virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
     28     virtual bool GetAcceleratorForCommandId(
     29         int command_id,
     30         ui::Accelerator* accelerator) OVERRIDE;
     31     virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
     32 
     33     int execute_count_;
     34     mutable int enable_count_;
     35   };
     36 
     37   // Recursively checks the enabled state and executes a command on every item
     38   // that's not a separator or a submenu parent item. The returned count should
     39   // match the number of times the delegate is called to ensure every item
     40   // works.
     41   void CountEnabledExecutable(ui::MenuModel* model, int* count);
     42 
     43   Delegate delegate_;
     44 };
     45 
     46 #endif  // CHROME_TEST_BASE_MENU_MODEL_TEST_H_
     47