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