15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/ash/ime_controller_chromeos.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/input_method/input_method_configuration.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/input_method/mock_input_method_manager.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/accelerators/accelerator.h"
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/event_constants.h"
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImeControllerTest : public testing::Test {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ImeControllerTest() : mock_input_method_manager_(NULL) {}
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ImeControllerTest() {}
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock_input_method_manager_ =
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        new chromeos::input_method::MockInputMethodManager;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chromeos::input_method::InitializeForTesting(
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mock_input_method_manager_);
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    chromeos::input_method::Shutdown();
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    mock_input_method_manager_ = NULL;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ImeController controller_;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  chromeos::input_method::MockInputMethodManager* mock_input_method_manager_;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ImeControllerTest);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ImeControllerTest, TestRemapAccelerator) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mock_input_method_manager_->SetCurrentInputMethodId("xkb:us::eng");
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator accel(ui::VKEY_A, ui::EF_CONTROL_DOWN);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator remapped = controller_.RemapAccelerator(accel);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(accel, remapped);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    accel.set_type(ui::ET_KEY_RELEASED);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    remapped = controller_.RemapAccelerator(accel);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(accel, remapped);  // crbug.com/130519
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mock_input_method_manager_->SetCurrentInputMethodId("xkb:fr::fra");
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Control+A shouldn't be remapped even when the current layout is FR.
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator accel(ui::VKEY_A, ui::EF_CONTROL_DOWN);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator remapped = controller_.RemapAccelerator(accel);
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(accel, remapped);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    accel.set_type(ui::ET_KEY_RELEASED);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    remapped = controller_.RemapAccelerator(accel);
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(accel, remapped);
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Shift+A shouldn't be remapped even when the current layout is FR.
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator accel(ui::VKEY_A, ui::EF_SHIFT_DOWN);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator remapped = controller_.RemapAccelerator(accel);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(accel, remapped);
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    accel.set_type(ui::ET_KEY_RELEASED);
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    remapped = controller_.RemapAccelerator(accel);
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(accel, remapped);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Shift+1 should be remapped when the current layout is FR.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator accel(ui::VKEY_1, ui::EF_SHIFT_DOWN);
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator remapped = controller_.RemapAccelerator(accel);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ui::Accelerator expected(ui::VKEY_1, 0);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, remapped);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    accel.set_type(ui::ET_KEY_RELEASED);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    remapped = controller_.RemapAccelerator(accel);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    expected.set_type(ui::ET_KEY_RELEASED);
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected, remapped);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
81