1// Copyright (c) 2012 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 <set> 6 7#include "base/basictypes.h" 8#include "chrome/browser/ui/views/accelerator_table.h" 9#include "testing/gtest/include/gtest/gtest.h" 10#include "ui/events/event_constants.h" 11 12#if defined(USE_ASH) 13#include "ash/accelerators/accelerator_table.h" 14#endif // USE_ASH 15 16namespace chrome { 17 18namespace { 19 20struct Cmp { 21 bool operator()(const AcceleratorMapping& lhs, 22 const AcceleratorMapping& rhs) const { 23 if (lhs.keycode != rhs.keycode) 24 return lhs.keycode < rhs.keycode; 25 return lhs.modifiers < rhs.modifiers; 26 // Do not check |command_id|. 27 } 28}; 29 30} // namespace 31 32TEST(AcceleratorTableTest, CheckDuplicatedAccelerators) { 33 std::set<AcceleratorMapping, Cmp> acclerators; 34 const std::vector<AcceleratorMapping> accelerator_list(GetAcceleratorList()); 35 for (std::vector<AcceleratorMapping>::const_iterator it = 36 accelerator_list.begin(); it != accelerator_list.end(); ++it) { 37 const AcceleratorMapping& entry = *it; 38 EXPECT_TRUE(acclerators.insert(entry).second) 39 << "Duplicated accelerator: " << entry.keycode << ", " 40 << (entry.modifiers & ui::EF_SHIFT_DOWN) << ", " 41 << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", " 42 << (entry.modifiers & ui::EF_ALT_DOWN); 43 } 44} 45 46#if defined(OS_CHROMEOS) 47TEST(AcceleratorTableTest, CheckDuplicatedAcceleratorsAsh) { 48 std::set<AcceleratorMapping, Cmp> acclerators; 49 const std::vector<AcceleratorMapping> accelerator_list(GetAcceleratorList()); 50 for (std::vector<AcceleratorMapping>::const_iterator it = 51 accelerator_list.begin(); it != accelerator_list.end(); ++it) { 52 const AcceleratorMapping& entry = *it; 53 acclerators.insert(entry); 54 } 55 for (size_t i = 0; i < ash::kAcceleratorDataLength; ++i) { 56 const ash::AcceleratorData& ash_entry = ash::kAcceleratorData[i]; 57 if (!ash_entry.trigger_on_press) 58 continue; // kAcceleratorMap does not have any release accelerators. 59 // The shortcuts to toggle minimized state and to show the task 60 // manager are defined on browser side as well as ash side by 61 // design so that web contents can consume these short cuts. (see 62 // crbug.com/309915, 370019 and CL) 63 if (ash_entry.action == ash::WINDOW_MINIMIZE || 64 ash_entry.action == ash::SHOW_TASK_MANAGER) 65 continue; 66 AcceleratorMapping entry; 67 entry.keycode = ash_entry.keycode; 68 entry.modifiers = ash_entry.modifiers; 69 entry.command_id = 0; // dummy 70 EXPECT_TRUE(acclerators.insert(entry).second) 71 << "Duplicated accelerator: " << entry.keycode << ", " 72 << (entry.modifiers & ui::EF_SHIFT_DOWN) << ", " 73 << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", " 74 << (entry.modifiers & ui::EF_ALT_DOWN); 75 } 76} 77#endif // USE_ASH 78 79} // namespace chrome 80