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