Home | History | Annotate | Download | only in ash
      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 "chrome/browser/ui/ash/ime_controller_chromeos.h"
      6 
      7 #include "base/basictypes.h"
      8 #include "chrome/browser/chromeos/input_method/input_method_configuration.h"
      9 #include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
     10 #include "testing/gtest/include/gtest/gtest.h"
     11 #include "ui/base/accelerators/accelerator.h"
     12 #include "ui/events/event_constants.h"
     13 #include "ui/events/keycodes/keyboard_codes.h"
     14 
     15 class ImeControllerTest : public testing::Test {
     16  public:
     17   ImeControllerTest() : mock_input_method_manager_(NULL) {}
     18   virtual ~ImeControllerTest() {}
     19 
     20   virtual void SetUp() OVERRIDE {
     21     mock_input_method_manager_ =
     22         new chromeos::input_method::MockInputMethodManager;
     23     chromeos::input_method::InitializeForTesting(
     24         mock_input_method_manager_);
     25   }
     26 
     27   virtual void TearDown() OVERRIDE {
     28     chromeos::input_method::Shutdown();
     29     mock_input_method_manager_ = NULL;
     30   }
     31 
     32  protected:
     33   ImeController controller_;
     34   chromeos::input_method::MockInputMethodManager* mock_input_method_manager_;
     35 
     36  private:
     37   DISALLOW_COPY_AND_ASSIGN(ImeControllerTest);
     38 };
     39 
     40 TEST_F(ImeControllerTest, TestRemapAccelerator) {
     41   mock_input_method_manager_->SetCurrentInputMethodId("xkb:us::eng");
     42   {
     43     ui::Accelerator accel(ui::VKEY_A, ui::EF_CONTROL_DOWN);
     44     ui::Accelerator remapped = controller_.RemapAccelerator(accel);
     45     EXPECT_EQ(accel, remapped);
     46     accel.set_type(ui::ET_KEY_RELEASED);
     47     remapped = controller_.RemapAccelerator(accel);
     48     EXPECT_EQ(accel, remapped);  // crbug.com/130519
     49   }
     50   mock_input_method_manager_->SetCurrentInputMethodId("xkb:fr::fra");
     51   {
     52     // Control+A shouldn't be remapped even when the current layout is FR.
     53     ui::Accelerator accel(ui::VKEY_A, ui::EF_CONTROL_DOWN);
     54     ui::Accelerator remapped = controller_.RemapAccelerator(accel);
     55     EXPECT_EQ(accel, remapped);
     56     accel.set_type(ui::ET_KEY_RELEASED);
     57     remapped = controller_.RemapAccelerator(accel);
     58     EXPECT_EQ(accel, remapped);
     59   }
     60   {
     61     // Shift+A shouldn't be remapped even when the current layout is FR.
     62     ui::Accelerator accel(ui::VKEY_A, ui::EF_SHIFT_DOWN);
     63     ui::Accelerator remapped = controller_.RemapAccelerator(accel);
     64     EXPECT_EQ(accel, remapped);
     65     accel.set_type(ui::ET_KEY_RELEASED);
     66     remapped = controller_.RemapAccelerator(accel);
     67     EXPECT_EQ(accel, remapped);
     68   }
     69   {
     70     // Shift+1 should be remapped when the current layout is FR.
     71     ui::Accelerator accel(ui::VKEY_1, ui::EF_SHIFT_DOWN);
     72     ui::Accelerator remapped = controller_.RemapAccelerator(accel);
     73     ui::Accelerator expected(ui::VKEY_1, 0);
     74     EXPECT_EQ(expected, remapped);
     75     accel.set_type(ui::ET_KEY_RELEASED);
     76     remapped = controller_.RemapAccelerator(accel);
     77     expected.set_type(ui::ET_KEY_RELEASED);
     78     EXPECT_EQ(expected, remapped);
     79   }
     80 }
     81