OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/input_method/input_method_util.h" | 5 #include "chrome/browser/chromeos/input_method/input_method_util.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 virtual void SetUp() OVERRIDE { | 59 virtual void SetUp() OVERRIDE { |
60 InputMethodDescriptors input_methods; | 60 InputMethodDescriptors input_methods; |
61 | 61 |
62 std::vector<std::string> layouts; | 62 std::vector<std::string> layouts; |
63 std::vector<std::string> languages; | 63 std::vector<std::string> languages; |
64 layouts.push_back("us"); | 64 layouts.push_back("us"); |
65 languages.push_back("zh-CN"); | 65 languages.push_back("zh-CN"); |
66 | 66 |
67 InputMethodDescriptor pinyin_ime(pinyin_ime_id, | 67 InputMethodDescriptor pinyin_ime(pinyin_ime_id, |
68 "Pinyin input for testing", | 68 "Pinyin input for testing", |
| 69 "CN", |
69 layouts, | 70 layouts, |
70 languages, | 71 languages, |
71 false, | 72 false, |
72 GURL(""), | 73 GURL(""), |
73 GURL("")); | 74 GURL("")); |
74 input_methods.push_back(pinyin_ime); | 75 input_methods.push_back(pinyin_ime); |
75 | 76 |
76 languages.clear(); | 77 languages.clear(); |
77 languages.push_back("zh-TW"); | 78 languages.push_back("zh-TW"); |
78 InputMethodDescriptor zhuyin_ime(zhuyin_ime_id, | 79 InputMethodDescriptor zhuyin_ime(zhuyin_ime_id, |
79 "Zhuyin input for testing", | 80 "Zhuyin input for testing", |
| 81 "TW", |
80 layouts, | 82 layouts, |
81 languages, | 83 languages, |
82 false, | 84 false, |
83 GURL(""), | 85 GURL(""), |
84 GURL("")); | 86 GURL("")); |
85 input_methods.push_back(zhuyin_ime); | 87 input_methods.push_back(zhuyin_ime); |
86 | 88 |
87 util_.SetComponentExtensions(input_methods); | 89 util_.SetComponentExtensions(input_methods); |
88 } | 90 } |
89 | 91 |
90 InputMethodDescriptor GetDesc(const std::string& id, | 92 InputMethodDescriptor GetDesc(const std::string& id, |
91 const std::string& raw_layout, | 93 const std::string& raw_layout, |
92 const std::string& language_code) { | 94 const std::string& language_code, |
| 95 const std::string& indicator) { |
93 std::vector<std::string> layouts; | 96 std::vector<std::string> layouts; |
94 layouts.push_back(raw_layout); | 97 layouts.push_back(raw_layout); |
95 std::vector<std::string> languages; | 98 std::vector<std::string> languages; |
96 languages.push_back(language_code); | 99 languages.push_back(language_code); |
97 return InputMethodDescriptor(id, | 100 return InputMethodDescriptor(id, |
98 "", | 101 "", // Description. |
| 102 indicator, // Short name used for indicator. |
99 layouts, | 103 layouts, |
100 languages, | 104 languages, |
101 true, | 105 true, |
102 GURL(), // options page url | 106 GURL(), // options page url |
103 GURL()); // input view page url | 107 GURL()); // input view page url |
104 } | 108 } |
105 | 109 |
106 static base::string16 GetDisplayLanguageName(const std::string& language_code)
{ | 110 static base::string16 GetDisplayLanguageName(const std::string& language_code)
{ |
107 return l10n_util::GetDisplayNameForLocale(language_code, "en", true); | 111 return l10n_util::GetDisplayNameForLocale(language_code, "en", true); |
108 } | 112 } |
109 | 113 |
110 FakeInputMethodDelegate delegate_; | 114 FakeInputMethodDelegate delegate_; |
111 InputMethodWhitelist whitelist_; | 115 InputMethodWhitelist whitelist_; |
112 TestableInputMethodUtil util_; | 116 TestableInputMethodUtil util_; |
113 }; | 117 }; |
114 | 118 |
115 TEST_F(InputMethodUtilTest, GetInputMethodShortNameTest) { | 119 TEST_F(InputMethodUtilTest, GetInputMethodShortNameTest) { |
116 // Test normal cases. Two-letter language code should be returned. | 120 // Test normal cases. Two-letter language code should be returned. |
117 { | 121 { |
118 InputMethodDescriptor desc = GetDesc("m17n:fa:isiri", // input method id | 122 InputMethodDescriptor desc = GetDesc("m17n:fa:isiri", // input method id |
119 "us", // keyboard layout name | 123 "us", // keyboard layout name |
120 "fa"); // language name | 124 "fa", // language name |
| 125 ""); // indicator |
121 EXPECT_EQ(ASCIIToUTF16("FA"), util_.GetInputMethodShortName(desc)); | 126 EXPECT_EQ(ASCIIToUTF16("FA"), util_.GetInputMethodShortName(desc)); |
122 } | 127 } |
123 { | 128 { |
124 InputMethodDescriptor desc = GetDesc("mozc-hangul", "us", "ko"); | 129 InputMethodDescriptor desc = GetDesc("mozc-hangul", "us", "ko", ""); |
125 EXPECT_EQ(base::UTF8ToUTF16("\xed\x95\x9c"), | 130 EXPECT_EQ(base::UTF8ToUTF16("\xed\x95\x9c"), |
126 util_.GetInputMethodShortName(desc)); | 131 util_.GetInputMethodShortName(desc)); |
127 } | 132 } |
128 { | 133 { |
129 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx"); | 134 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", ""); |
130 // Upper-case string of the unknown language code, "xx", should be returned. | 135 // Upper-case string of the unknown language code, "xx", should be returned. |
131 EXPECT_EQ(ASCIIToUTF16("XX"), util_.GetInputMethodShortName(desc)); | 136 EXPECT_EQ(ASCIIToUTF16("XX"), util_.GetInputMethodShortName(desc)); |
132 } | 137 } |
133 | 138 |
134 // Test special cases. | 139 // Test special cases. |
135 { | 140 { |
136 InputMethodDescriptor desc = GetDesc("xkb:us:dvorak:eng", "us", "en-US"); | 141 InputMethodDescriptor desc = |
| 142 GetDesc("xkb:us:dvorak:eng", "us", "en-US", "DV"); |
137 EXPECT_EQ(ASCIIToUTF16("DV"), util_.GetInputMethodShortName(desc)); | 143 EXPECT_EQ(ASCIIToUTF16("DV"), util_.GetInputMethodShortName(desc)); |
138 } | 144 } |
139 { | 145 { |
140 InputMethodDescriptor desc = GetDesc("xkb:us:colemak:eng", "us", "en-US"); | 146 InputMethodDescriptor desc = |
| 147 GetDesc("xkb:us:colemak:eng", "us", "en-US", "CO"); |
141 EXPECT_EQ(ASCIIToUTF16("CO"), util_.GetInputMethodShortName(desc)); | 148 EXPECT_EQ(ASCIIToUTF16("CO"), util_.GetInputMethodShortName(desc)); |
142 } | 149 } |
143 { | 150 { |
144 InputMethodDescriptor desc = | 151 InputMethodDescriptor desc = |
145 GetDesc("xkb:us:altgr-intl:eng", "us", "en-US"); | 152 GetDesc("xkb:us:altgr-intl:eng", "us", "en-US", "EXTD"); |
146 EXPECT_EQ(ASCIIToUTF16("EXTD"), util_.GetInputMethodShortName(desc)); | 153 EXPECT_EQ(ASCIIToUTF16("EXTD"), util_.GetInputMethodShortName(desc)); |
147 } | 154 } |
148 { | 155 { |
149 InputMethodDescriptor desc = GetDesc("xkb:us:intl:eng", "us", "en-US"); | 156 InputMethodDescriptor desc = |
| 157 GetDesc("xkb:us:intl:eng", "us", "en-US", "INTL"); |
150 EXPECT_EQ(ASCIIToUTF16("INTL"), util_.GetInputMethodShortName(desc)); | 158 EXPECT_EQ(ASCIIToUTF16("INTL"), util_.GetInputMethodShortName(desc)); |
151 } | 159 } |
152 { | 160 { |
153 InputMethodDescriptor desc = GetDesc("xkb:de:neo:ger", "de(neo)", "de"); | 161 InputMethodDescriptor desc = |
| 162 GetDesc("xkb:de:neo:ger", "de(neo)", "de", "NEO"); |
154 EXPECT_EQ(ASCIIToUTF16("NEO"), util_.GetInputMethodShortName(desc)); | 163 EXPECT_EQ(ASCIIToUTF16("NEO"), util_.GetInputMethodShortName(desc)); |
155 } | 164 } |
156 { | 165 { |
157 InputMethodDescriptor desc = GetDesc("xkb:es:cat:cat", "es(cat)", "ca"); | 166 InputMethodDescriptor desc = |
| 167 GetDesc("xkb:es:cat:cat", "es(cat)", "ca", "CAS"); |
158 EXPECT_EQ(ASCIIToUTF16("CAS"), util_.GetInputMethodShortName(desc)); | 168 EXPECT_EQ(ASCIIToUTF16("CAS"), util_.GetInputMethodShortName(desc)); |
159 } | 169 } |
160 { | 170 { |
161 InputMethodDescriptor desc = GetDesc(pinyin_ime_id, "us", "zh-CN"); | 171 InputMethodDescriptor desc = |
| 172 GetDesc(pinyin_ime_id, "us", "zh-CN", ""); |
162 EXPECT_EQ(base::UTF8ToUTF16("\xe6\x8b\xbc"), | 173 EXPECT_EQ(base::UTF8ToUTF16("\xe6\x8b\xbc"), |
163 util_.GetInputMethodShortName(desc)); | 174 util_.GetInputMethodShortName(desc)); |
164 } | 175 } |
165 { | 176 { |
166 InputMethodDescriptor desc = GetDesc(zhuyin_ime_id, "us", "zh-TW"); | 177 InputMethodDescriptor desc = |
| 178 GetDesc(zhuyin_ime_id, "us", "zh-TW", ""); |
167 EXPECT_EQ(base::UTF8ToUTF16("\xE6\xB3\xA8"), | 179 EXPECT_EQ(base::UTF8ToUTF16("\xE6\xB3\xA8"), |
168 util_.GetInputMethodShortName(desc)); | 180 util_.GetInputMethodShortName(desc)); |
169 } | 181 } |
170 } | 182 } |
171 | 183 |
172 TEST_F(InputMethodUtilTest, GetInputMethodMediumNameTest) { | 184 TEST_F(InputMethodUtilTest, GetInputMethodMediumNameTest) { |
173 { | 185 { |
174 // input methods with medium name equal to short name | 186 // input methods with medium name equal to short name |
175 const char * input_method_id[] = { | 187 const char * input_method_id[] = { |
176 "xkb:us:altgr-intl:eng", | 188 "xkb:us:altgr-intl:eng", |
177 "xkb:us:dvorak:eng", | 189 "xkb:us:dvorak:eng", |
178 "xkb:us:intl:eng", | 190 "xkb:us:intl:eng", |
179 "xkb:us:colemak:eng", | 191 "xkb:us:colemak:eng", |
180 "english-m", | |
181 "xkb:de:neo:ger", | 192 "xkb:de:neo:ger", |
182 "xkb:es:cat:cat", | 193 "xkb:es:cat:cat", |
183 "xkb:gb:dvorak:eng", | 194 "xkb:gb:dvorak:eng", |
184 }; | 195 }; |
185 const int len = ARRAYSIZE_UNSAFE(input_method_id); | 196 const int len = ARRAYSIZE_UNSAFE(input_method_id); |
186 for (int i=0; i<len; ++i) { | 197 for (int i=0; i<len; ++i) { |
187 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", ""); | 198 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", "", ""); |
188 base::string16 medium_name = util_.GetInputMethodMediumName(desc); | 199 base::string16 medium_name = util_.GetInputMethodMediumName(desc); |
189 base::string16 short_name = util_.GetInputMethodShortName(desc); | 200 base::string16 short_name = util_.GetInputMethodShortName(desc); |
190 EXPECT_EQ(medium_name,short_name); | 201 EXPECT_EQ(medium_name,short_name); |
191 } | 202 } |
192 } | 203 } |
193 { | 204 { |
194 // input methods with medium name not equal to short name | 205 // input methods with medium name not equal to short name |
195 const char * input_method_id[] = { | 206 const char * input_method_id[] = { |
196 "m17n:zh:cangjie", | 207 "m17n:zh:cangjie", |
197 "m17n:zh:quick", | 208 "m17n:zh:quick", |
198 pinyin_ime_id, | 209 pinyin_ime_id, |
199 zhuyin_ime_id, | 210 zhuyin_ime_id, |
200 "mozc-hangul", | 211 "mozc-hangul", |
201 pinyin_ime_id, | 212 pinyin_ime_id, |
202 pinyin_ime_id, | 213 pinyin_ime_id, |
203 }; | 214 }; |
204 const int len = ARRAYSIZE_UNSAFE(input_method_id); | 215 const int len = ARRAYSIZE_UNSAFE(input_method_id); |
205 for (int i=0; i<len; ++i) { | 216 for (int i=0; i<len; ++i) { |
206 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", ""); | 217 InputMethodDescriptor desc = GetDesc(input_method_id[i], "", "", ""); |
207 base::string16 medium_name = util_.GetInputMethodMediumName(desc); | 218 base::string16 medium_name = util_.GetInputMethodMediumName(desc); |
208 base::string16 short_name = util_.GetInputMethodShortName(desc); | 219 base::string16 short_name = util_.GetInputMethodShortName(desc); |
209 EXPECT_NE(medium_name,short_name); | 220 EXPECT_NE(medium_name,short_name); |
210 } | 221 } |
211 } | 222 } |
212 } | 223 } |
213 | 224 |
214 TEST_F(InputMethodUtilTest, GetInputMethodLongNameTest) { | 225 TEST_F(InputMethodUtilTest, GetInputMethodLongNameTest) { |
215 // For most languages input method or keyboard layout name is returned. | 226 // For most languages input method or keyboard layout name is returned. |
216 // See below for exceptions. | 227 // See below for exceptions. |
217 { | 228 { |
218 InputMethodDescriptor desc = GetDesc("m17n:fa:isiri", "us", "fa"); | 229 InputMethodDescriptor desc = GetDesc("m17n:fa:isiri", "us", "fa", ""); |
219 EXPECT_EQ(ASCIIToUTF16("Persian input method (ISIRI 2901 layout)"), | 230 EXPECT_EQ(ASCIIToUTF16("Persian input method (ISIRI 2901 layout)"), |
220 util_.GetInputMethodLongName(desc)); | 231 util_.GetInputMethodLongName(desc)); |
221 } | 232 } |
222 { | 233 { |
223 InputMethodDescriptor desc = GetDesc("mozc-hangul", "us", "ko"); | 234 InputMethodDescriptor desc = GetDesc("mozc-hangul", "us", "ko", ""); |
224 EXPECT_EQ(ASCIIToUTF16("Korean input method"), | 235 EXPECT_EQ(ASCIIToUTF16("Korean input method"), |
225 util_.GetInputMethodLongName(desc)); | 236 util_.GetInputMethodLongName(desc)); |
226 } | 237 } |
227 { | 238 { |
228 InputMethodDescriptor desc = GetDesc("m17n:vi:tcvn", "us", "vi"); | 239 InputMethodDescriptor desc = GetDesc("m17n:vi:tcvn", "us", "vi", ""); |
229 EXPECT_EQ(ASCIIToUTF16("Vietnamese input method (TCVN6064)"), | 240 EXPECT_EQ(ASCIIToUTF16("Vietnamese input method (TCVN6064)"), |
230 util_.GetInputMethodLongName(desc)); | 241 util_.GetInputMethodLongName(desc)); |
231 } | 242 } |
232 { | 243 { |
233 InputMethodDescriptor desc = GetDesc("xkb:jp::jpn", "jp", "ja"); | 244 InputMethodDescriptor desc = GetDesc("xkb:jp::jpn", "jp", "ja", ""); |
234 EXPECT_EQ(ASCIIToUTF16("Japanese keyboard"), | 245 EXPECT_EQ(ASCIIToUTF16("Japanese keyboard"), |
235 util_.GetInputMethodLongName(desc)); | 246 util_.GetInputMethodLongName(desc)); |
236 } | 247 } |
237 { | 248 { |
238 InputMethodDescriptor desc = | 249 InputMethodDescriptor desc = |
239 GetDesc("xkb:us:dvorak:eng", "us(dvorak)", "en-US"); | 250 GetDesc("xkb:us:dvorak:eng", "us(dvorak)", "en-US", ""); |
240 EXPECT_EQ(ASCIIToUTF16("US Dvorak keyboard"), | 251 EXPECT_EQ(ASCIIToUTF16("US Dvorak keyboard"), |
241 util_.GetInputMethodLongName(desc)); | 252 util_.GetInputMethodLongName(desc)); |
242 } | 253 } |
243 { | 254 { |
244 InputMethodDescriptor desc = | 255 InputMethodDescriptor desc = |
245 GetDesc("xkb:gb:dvorak:eng", "gb(dvorak)", "en-US"); | 256 GetDesc("xkb:gb:dvorak:eng", "gb(dvorak)", "en-US", ""); |
246 EXPECT_EQ(ASCIIToUTF16("UK Dvorak keyboard"), | 257 EXPECT_EQ(ASCIIToUTF16("UK Dvorak keyboard"), |
247 util_.GetInputMethodLongName(desc)); | 258 util_.GetInputMethodLongName(desc)); |
248 } | 259 } |
249 | 260 |
250 // For Arabic, Dutch, French, German and Hindi, | 261 // For Arabic, Dutch, French, German and Hindi, |
251 // "language - keyboard layout" pair is returned. | 262 // "language - keyboard layout" pair is returned. |
252 { | 263 { |
253 InputMethodDescriptor desc = GetDesc("m17n:ar:kbd", "us", "ar"); | 264 InputMethodDescriptor desc = GetDesc("m17n:ar:kbd", "us", "ar", ""); |
254 EXPECT_EQ(ASCIIToUTF16("Arabic - Standard input method"), | 265 EXPECT_EQ(ASCIIToUTF16("Arabic - Standard input method"), |
255 util_.GetInputMethodLongName(desc)); | 266 util_.GetInputMethodLongName(desc)); |
256 } | 267 } |
257 { | 268 { |
258 InputMethodDescriptor desc = GetDesc("xkb:be::nld", "be", "nl"); | 269 InputMethodDescriptor desc = GetDesc("xkb:be::nld", "be", "nl", ""); |
259 EXPECT_EQ(ASCIIToUTF16("Dutch - Belgian keyboard"), | 270 EXPECT_EQ(ASCIIToUTF16("Dutch - Belgian keyboard"), |
260 util_.GetInputMethodLongName(desc)); | 271 util_.GetInputMethodLongName(desc)); |
261 } | 272 } |
262 { | 273 { |
263 InputMethodDescriptor desc = GetDesc("xkb:fr::fra", "fr", "fr"); | 274 InputMethodDescriptor desc = GetDesc("xkb:fr::fra", "fr", "fr", ""); |
264 EXPECT_EQ(ASCIIToUTF16("French - French keyboard"), | 275 EXPECT_EQ(ASCIIToUTF16("French - French keyboard"), |
265 util_.GetInputMethodLongName(desc)); | 276 util_.GetInputMethodLongName(desc)); |
266 } | 277 } |
267 { | 278 { |
268 InputMethodDescriptor desc = GetDesc("xkb:be::fra", "be", "fr"); | 279 InputMethodDescriptor desc = GetDesc("xkb:be::fra", "be", "fr", ""); |
269 EXPECT_EQ(ASCIIToUTF16("French - Belgian keyboard"), | 280 EXPECT_EQ(ASCIIToUTF16("French - Belgian keyboard"), |
270 util_.GetInputMethodLongName(desc)); | 281 util_.GetInputMethodLongName(desc)); |
271 } | 282 } |
272 { | 283 { |
273 InputMethodDescriptor desc = GetDesc("xkb:de::ger", "de", "de"); | 284 InputMethodDescriptor desc = GetDesc("xkb:de::ger", "de", "de", ""); |
274 EXPECT_EQ(ASCIIToUTF16("German - German keyboard"), | 285 EXPECT_EQ(ASCIIToUTF16("German - German keyboard"), |
275 util_.GetInputMethodLongName(desc)); | 286 util_.GetInputMethodLongName(desc)); |
276 } | 287 } |
277 { | 288 { |
278 InputMethodDescriptor desc = GetDesc("xkb:be::ger", "be", "de"); | 289 InputMethodDescriptor desc = GetDesc("xkb:be::ger", "be", "de", ""); |
279 EXPECT_EQ(ASCIIToUTF16("German - Belgian keyboard"), | 290 EXPECT_EQ(ASCIIToUTF16("German - Belgian keyboard"), |
280 util_.GetInputMethodLongName(desc)); | 291 util_.GetInputMethodLongName(desc)); |
281 } | 292 } |
282 { | 293 { |
283 InputMethodDescriptor desc = GetDesc("m17n:hi:itrans", "us", "hi"); | 294 InputMethodDescriptor desc = GetDesc("m17n:hi:itrans", "us", "hi", ""); |
284 EXPECT_EQ(ASCIIToUTF16("Hindi - Standard input method"), | 295 EXPECT_EQ(ASCIIToUTF16("Hindi - Standard input method"), |
285 util_.GetInputMethodLongName(desc)); | 296 util_.GetInputMethodLongName(desc)); |
286 } | 297 } |
287 | 298 |
288 { | 299 { |
289 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx"); | 300 InputMethodDescriptor desc = GetDesc("invalid-id", "us", "xx", ""); |
290 // You can safely ignore the "Resouce ID is not found for: invalid-id" | 301 // You can safely ignore the "Resouce ID is not found for: invalid-id" |
291 // error. | 302 // error. |
292 EXPECT_EQ(ASCIIToUTF16("invalid-id"), | 303 EXPECT_EQ(ASCIIToUTF16("invalid-id"), |
293 util_.GetInputMethodLongName(desc)); | 304 util_.GetInputMethodLongName(desc)); |
294 } | 305 } |
295 } | 306 } |
296 | 307 |
297 TEST_F(InputMethodUtilTest, TestIsValidInputMethodId) { | 308 TEST_F(InputMethodUtilTest, TestIsValidInputMethodId) { |
298 EXPECT_TRUE(util_.IsValidInputMethodId("xkb:us:colemak:eng")); | 309 EXPECT_TRUE(util_.IsValidInputMethodId("xkb:us:colemak:eng")); |
299 EXPECT_TRUE(util_.IsValidInputMethodId(pinyin_ime_id)); | 310 EXPECT_TRUE(util_.IsValidInputMethodId(pinyin_ime_id)); |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
480 EXPECT_FALSE(display_name.empty()) | 491 EXPECT_FALSE(display_name.empty()) |
481 << "Invalid language code " << language_code; | 492 << "Invalid language code " << language_code; |
482 // On error, GetDisplayNameForLocale() returns the |language_code| as-is. | 493 // On error, GetDisplayNameForLocale() returns the |language_code| as-is. |
483 EXPECT_NE(language_code, base::UTF16ToUTF8(display_name)) | 494 EXPECT_NE(language_code, base::UTF16ToUTF8(display_name)) |
484 << "Invalid language code " << language_code; | 495 << "Invalid language code " << language_code; |
485 } | 496 } |
486 } | 497 } |
487 | 498 |
488 } // namespace input_method | 499 } // namespace input_method |
489 } // namespace chromeos | 500 } // namespace chromeos |
OLD | NEW |