15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/menu_model_test.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuModelTest::Delegate::IsCommandIdChecked(int command_id) const {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuModelTest::Delegate::IsCommandIdEnabled(int command_id) const {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ++enable_count_;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MenuModelTest::Delegate::GetAcceleratorForCommandId(
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int command_id,
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator* accelerator) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void MenuModelTest::Delegate::ExecuteCommand(int command_id, int event_flags) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ++execute_count_;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Recursively checks the enabled state and executes a command on every item
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// that's not a separator or a submenu parent item. The returned count should
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// match the number of times the delegate is called to ensure every item works.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void MenuModelTest::CountEnabledExecutable(ui::MenuModel* model,
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           int* count) {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (int i = 0; i < model->GetItemCount(); ++i) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::MenuModel::ItemType type = model->GetTypeAt(i);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    switch (type) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case ui::MenuModel::TYPE_SEPARATOR:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        continue;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case ui::MenuModel::TYPE_SUBMENU:
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        CountEnabledExecutable(model->GetSubmenuModelAt(i), count);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case ui::MenuModel::TYPE_COMMAND:
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case ui::MenuModel::TYPE_CHECK:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      case ui::MenuModel::TYPE_RADIO:
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        model->IsEnabledAt(i);  // Check if it's enabled (ignore answer).
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        model->ActivatedAt(i);  // Execute it.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        (*count)++;  // Increment the count of executable items seen.
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        break;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      default:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        FAIL();  // Ensure every case is tested.
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
53