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