Home | History | Annotate | Download | only in views
      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