accelerator_table_unittest.cc revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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(USE_ASH) && !defined(OS_WIN) 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 shortcut to toggle minimized state is defined on both ends 60 // by design. (see crbug.com/309915 and CL) 61 if (ash_entry.action == ash::WINDOW_MINIMIZE) 62 continue; 63 AcceleratorMapping entry; 64 entry.keycode = ash_entry.keycode; 65 entry.modifiers = ash_entry.modifiers; 66 entry.command_id = 0; // dummy 67 EXPECT_TRUE(acclerators.insert(entry).second) 68 << "Duplicated accelerator: " << entry.keycode << ", " 69 << (entry.modifiers & ui::EF_SHIFT_DOWN) << ", " 70 << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", " 71 << (entry.modifiers & ui::EF_ALT_DOWN); 72 } 73} 74#endif // USE_ASH 75 76} // namespace chrome 77