1 // Copyright (c) 2011 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/chromeos/status/input_method_menu.h" 6 7 #include "base/utf_string_conversions.h" 8 #include "chrome/browser/chromeos/cros/cros_library.h" 9 #include "testing/gtest/include/gtest/gtest.h" 10 11 namespace chromeos { 12 13 TEST(InputMethodMenuTest, GetTextForIndicatorTest) { 14 ScopedStubCrosEnabler enabler; 15 // Test normal cases. Two-letter language code should be returned. 16 { 17 InputMethodDescriptor desc("m17n:fa:isiri", // input method engine id 18 "isiri (m17n)", // input method name 19 "us", // keyboard layout name 20 "fa"); // language name 21 EXPECT_EQ(L"FA", InputMethodMenu::GetTextForIndicator(desc)); 22 } 23 { 24 InputMethodDescriptor desc("hangul", "Korean", "us", "ko"); 25 EXPECT_EQ(UTF8ToWide("\xed\x95\x9c"), 26 InputMethodMenu::GetTextForIndicator(desc)); 27 } 28 { 29 InputMethodDescriptor desc("invalid-id", "unregistered string", "us", "xx"); 30 // Upper-case string of the unknown language code, "xx", should be returned. 31 EXPECT_EQ(L"XX", InputMethodMenu::GetTextForIndicator(desc)); 32 } 33 34 // Test special cases. 35 { 36 InputMethodDescriptor desc("xkb:us:dvorak:eng", "Dvorak", "us", "eng"); 37 EXPECT_EQ(L"DV", InputMethodMenu::GetTextForIndicator(desc)); 38 } 39 { 40 InputMethodDescriptor desc("xkb:us:colemak:eng", "Colemak", "us", "eng"); 41 EXPECT_EQ(L"CO", InputMethodMenu::GetTextForIndicator(desc)); 42 } 43 { 44 InputMethodDescriptor desc("xkb:us:altgr-intl:eng", "US extd", "us", "eng"); 45 EXPECT_EQ(L"EXTD", InputMethodMenu::GetTextForIndicator(desc)); 46 } 47 { 48 InputMethodDescriptor desc("xkb:us:intl:eng", "US intl", "us", "eng"); 49 EXPECT_EQ(L"INTL", InputMethodMenu::GetTextForIndicator(desc)); 50 } 51 { 52 InputMethodDescriptor desc("xkb:de:neo:ger", "Germany - Neo 2", "de(neo)", 53 "ger"); 54 EXPECT_EQ(L"NEO", InputMethodMenu::GetTextForIndicator(desc)); 55 } 56 { 57 InputMethodDescriptor desc("mozc", "Mozc", "us", "ja"); 58 EXPECT_EQ(UTF8ToWide("\xe3\x81\x82"), 59 InputMethodMenu::GetTextForIndicator(desc)); 60 } 61 { 62 InputMethodDescriptor desc("mozc-jp", "Mozc", "jp", "ja"); 63 EXPECT_EQ(UTF8ToWide("\xe3\x81\x82"), 64 InputMethodMenu::GetTextForIndicator(desc)); 65 } 66 { 67 InputMethodDescriptor desc("pinyin", "Pinyin", "us", "zh-CN"); 68 EXPECT_EQ(UTF8ToWide("\xe6\x8b\xbc"), 69 InputMethodMenu::GetTextForIndicator(desc)); 70 } 71 { 72 InputMethodDescriptor desc("mozc-chewing", "Chewing", "us", "zh-TW"); 73 EXPECT_EQ(UTF8ToWide("\xe9\x85\xb7"), 74 InputMethodMenu::GetTextForIndicator(desc)); 75 } 76 { 77 InputMethodDescriptor desc("m17n:zh:cangjie", "Cangjie", "us", "zh-TW"); 78 EXPECT_EQ(UTF8ToWide("\xe5\x80\x89"), 79 InputMethodMenu::GetTextForIndicator(desc)); 80 } 81 { 82 InputMethodDescriptor desc("m17n:zh:quick", "Quick", "us", "zh-TW"); 83 EXPECT_EQ(UTF8ToWide("\xe9\x80\x9f"), 84 InputMethodMenu::GetTextForIndicator(desc)); 85 } 86 } 87 88 89 // Test whether the function returns language name for non-ambiguous languages. 90 TEST(InputMethodMenuTest, GetTextForMenuTest) { 91 // For most languages input method or keyboard layout name is returned. 92 // See below for exceptions. 93 { 94 InputMethodDescriptor desc("m17n:fa:isiri", "isiri (m17n)", "us", "fa"); 95 EXPECT_EQ(L"Persian input method (ISIRI 2901 layout)", 96 InputMethodMenu::GetTextForMenu(desc)); 97 } 98 { 99 InputMethodDescriptor desc("hangul", "Korean", "us", "ko"); 100 EXPECT_EQ(L"Korean input method", 101 InputMethodMenu::GetTextForMenu(desc)); 102 } 103 { 104 InputMethodDescriptor desc("m17n:vi:tcvn", "tcvn (m17n)", "us", "vi"); 105 EXPECT_EQ(L"Vietnamese input method (TCVN6064)", 106 InputMethodMenu::GetTextForMenu(desc)); 107 } 108 { 109 InputMethodDescriptor desc("mozc", "Mozc (US keyboard layout)", "us", "ja"); 110 EXPECT_EQ(L"Japanese input method (for US keyboard)", 111 InputMethodMenu::GetTextForMenu(desc)); 112 } 113 { 114 InputMethodDescriptor desc("xkb:jp::jpn", "Japan", "jp", "jpn"); 115 EXPECT_EQ(L"Japanese keyboard", 116 InputMethodMenu::GetTextForMenu(desc)); 117 } 118 { 119 InputMethodDescriptor desc("xkb:us:dvorak:eng", "USA - Dvorak", 120 "us(dvorak)", "eng"); 121 EXPECT_EQ(L"US Dvorak keyboard", 122 InputMethodMenu::GetTextForMenu(desc)); 123 } 124 { 125 InputMethodDescriptor desc("xkb:gb:dvorak:eng", "United Kingdom - Dvorak", 126 "gb(dvorak)", "eng"); 127 EXPECT_EQ(L"UK Dvorak keyboard", 128 InputMethodMenu::GetTextForMenu(desc)); 129 } 130 131 // For Arabic, Dutch, French, German and Hindi, 132 // "language - keyboard layout" pair is returned. 133 { 134 InputMethodDescriptor desc("m17n:ar:kbd", "kbd (m17n)", "us", "ar"); 135 EXPECT_EQ(L"Arabic - Standard input method", 136 InputMethodMenu::GetTextForMenu(desc)); 137 } 138 { 139 InputMethodDescriptor desc("xkb:nl::nld", "Netherlands", "nl", "nld"); 140 EXPECT_EQ(L"Dutch - Dutch keyboard", 141 InputMethodMenu::GetTextForMenu(desc)); 142 } 143 { 144 InputMethodDescriptor desc("xkb:be::nld", "Belgium", "be", "nld"); 145 EXPECT_EQ(L"Dutch - Belgian keyboard", 146 InputMethodMenu::GetTextForMenu(desc)); 147 } 148 { 149 InputMethodDescriptor desc("xkb:fr::fra", "France", "fr", "fra"); 150 EXPECT_EQ(L"French - French keyboard", 151 InputMethodMenu::GetTextForMenu(desc)); 152 } 153 { 154 InputMethodDescriptor desc("xkb:be::fra", "Belgium", "be", "fra"); 155 EXPECT_EQ(L"French - Belgian keyboard", 156 InputMethodMenu::GetTextForMenu(desc)); 157 } 158 { 159 InputMethodDescriptor desc("xkb:de::ger", "Germany", "de", "ger"); 160 EXPECT_EQ(L"German - German keyboard", 161 InputMethodMenu::GetTextForMenu(desc)); 162 } 163 { 164 InputMethodDescriptor desc("xkb:be::ger", "Belgium", "be", "ger"); 165 EXPECT_EQ(L"German - Belgian keyboard", 166 InputMethodMenu::GetTextForMenu(desc)); 167 } 168 { 169 InputMethodDescriptor desc("m17n:hi:itrans", "itrans (m17n)", "us", "hi"); 170 EXPECT_EQ(L"Hindi - Standard input method", 171 InputMethodMenu::GetTextForMenu(desc)); 172 } 173 174 { 175 InputMethodDescriptor desc("invalid-id", "unregistered string", "us", "xx"); 176 // You can safely ignore the "Resouce ID is not found for: unregistered 177 // string" error. 178 EXPECT_EQ(L"unregistered string", 179 InputMethodMenu::GetTextForMenu(desc)); 180 } 181 } 182 183 } // namespace chromeos 184