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/base/events/event_constants.h" 11 12 #if defined(USE_ASH) 13 #include "ash/accelerators/accelerator_table.h" 14 #endif // USE_ASH 15 16 namespace chrome { 17 18 namespace { 19 20 struct 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 32 TEST(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) 47 TEST(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 AcceleratorMapping entry; 60 entry.keycode = ash_entry.keycode; 61 entry.modifiers = ash_entry.modifiers; 62 entry.command_id = 0; // dummy 63 EXPECT_TRUE(acclerators.insert(entry).second) 64 << "Duplicated accelerator: " << entry.keycode << ", " 65 << (entry.modifiers & ui::EF_SHIFT_DOWN) << ", " 66 << (entry.modifiers & ui::EF_CONTROL_DOWN) << ", " 67 << (entry.modifiers & ui::EF_ALT_DOWN); 68 } 69 } 70 #endif // USE_ASH 71 72 } // namespace chrome 73