Home | History | Annotate | Download | only in win
      1 // Copyright 2013 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 "ui/base/ime/win/imm32_manager.h"
      6 
      7 #include "testing/gtest/include/gtest/gtest.h"
      8 
      9 namespace ui {
     10 namespace {
     11 
     12 struct InputModeTestCase {
     13   TextInputMode input_mode;
     14   DWORD conversion_mode;
     15   BOOL expected_open;
     16   DWORD expected_conversion_mode;
     17 };
     18 
     19 // Google Test pretty-printer.
     20 void PrintTo(const InputModeTestCase& data, std::ostream* os) {
     21   *os << " input_mode: " << testing::PrintToString(data.input_mode)
     22       << "; conversion_mode: " << testing::PrintToString(data.conversion_mode);
     23 }
     24 
     25 class IMM32ManagerTest
     26     : public ::testing::TestWithParam<InputModeTestCase> {
     27 };
     28 
     29 const InputModeTestCase
     30     kInputModeTestCases[] = {
     31   {TEXT_INPUT_MODE_DEFAULT, 0, FALSE, 0},
     32   {TEXT_INPUT_MODE_DEFAULT, IME_CMODE_NATIVE, FALSE, IME_CMODE_NATIVE},
     33   {TEXT_INPUT_MODE_VERBATIM, 0, FALSE, 0},
     34   {TEXT_INPUT_MODE_VERBATIM, IME_CMODE_KATAKANA, FALSE, IME_CMODE_KATAKANA},
     35   {TEXT_INPUT_MODE_LATIN, 0, FALSE, 0},
     36   {TEXT_INPUT_MODE_LATIN, IME_CMODE_NATIVE, FALSE, IME_CMODE_NATIVE},
     37   {TEXT_INPUT_MODE_LATIN_NAME, 0, FALSE, 0},
     38   {TEXT_INPUT_MODE_LATIN_NAME, IME_CMODE_NATIVE, FALSE, IME_CMODE_NATIVE},
     39   {TEXT_INPUT_MODE_LATIN_PROSE, 0, FALSE, 0},
     40   {TEXT_INPUT_MODE_LATIN_PROSE, IME_CMODE_NATIVE, FALSE, IME_CMODE_NATIVE},
     41   {TEXT_INPUT_MODE_FULL_WIDTH_LATIN,
     42        IME_CMODE_NATIVE | IME_CMODE_KATAKANA | IME_CMODE_FULLSHAPE,
     43        TRUE,
     44        IME_CMODE_FULLSHAPE},
     45   {TEXT_INPUT_MODE_KANA,
     46        0,
     47        TRUE,
     48        IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE},
     49   {TEXT_INPUT_MODE_KANA,
     50        IME_CMODE_ROMAN,
     51        TRUE,
     52        IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE | IME_CMODE_ROMAN},
     53   {TEXT_INPUT_MODE_KATAKANA,
     54        IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE,
     55        TRUE,
     56        IME_CMODE_NATIVE | IME_CMODE_KATAKANA | IME_CMODE_FULLSHAPE},
     57   {TEXT_INPUT_MODE_KATAKANA,
     58        IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE | IME_CMODE_ROMAN,
     59        TRUE,
     60        IME_CMODE_NATIVE | IME_CMODE_KATAKANA | IME_CMODE_FULLSHAPE
     61            | IME_CMODE_ROMAN},
     62   {TEXT_INPUT_MODE_NUMERIC, 0, FALSE, 0},
     63   {TEXT_INPUT_MODE_NUMERIC, IME_CMODE_FULLSHAPE, FALSE, IME_CMODE_FULLSHAPE},
     64   {TEXT_INPUT_MODE_TEL, 0, FALSE, 0},
     65   {TEXT_INPUT_MODE_TEL, IME_CMODE_ROMAN, FALSE, IME_CMODE_ROMAN},
     66   {TEXT_INPUT_MODE_EMAIL, 0, FALSE, 0},
     67   {TEXT_INPUT_MODE_EMAIL, IME_CMODE_CHARCODE, FALSE, IME_CMODE_CHARCODE},
     68   {TEXT_INPUT_MODE_URL, 0, FALSE, 0},
     69   {TEXT_INPUT_MODE_URL, IME_CMODE_HANJACONVERT, FALSE, IME_CMODE_HANJACONVERT},
     70 };
     71 
     72 TEST_P(IMM32ManagerTest, ConvertInputModeToImmFlags) {
     73   const InputModeTestCase& test_case = GetParam();
     74 
     75   BOOL open;
     76   DWORD conversion_mode;
     77   // Call testee method.
     78   IMM32Manager::ConvertInputModeToImmFlags(test_case.input_mode,
     79                                            test_case.conversion_mode,
     80                                            &open,
     81                                            &conversion_mode);
     82 
     83   EXPECT_EQ(test_case.expected_open, open);
     84   EXPECT_EQ(test_case.expected_conversion_mode, conversion_mode);
     85 }
     86 
     87 INSTANTIATE_TEST_CASE_P(,
     88                         IMM32ManagerTest,
     89                         ::testing::ValuesIn(kInputModeTestCases));
     90 
     91 }  // namespace
     92 }  // namespace ui
     93