OLD | NEW |
| (Empty) |
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/ui/webui/options/chromeos/virtual_keyboard_manager_hand
ler.h" | |
6 | |
7 #include <map> | |
8 #include <set> | |
9 #include <string> | |
10 | |
11 #include "base/logging.h" | |
12 #include "base/values.h" | |
13 #include "chrome/browser/chromeos/input_method/virtual_keyboard_selector.h" | |
14 #include "testing/gtest/include/gtest/gtest.h" | |
15 | |
16 namespace { | |
17 | |
18 typedef std::multimap< | |
19 std::string, const chromeos::input_method::VirtualKeyboard*> LayoutToKeyboard; | |
20 typedef std::map< | |
21 GURL, const chromeos::input_method::VirtualKeyboard*> UrlToKeyboard; | |
22 | |
23 template <size_t L> | |
24 std::set<std::string> CreateLayoutSet(const char* (&layouts)[L]) { | |
25 return std::set<std::string>(layouts, layouts + L); | |
26 } | |
27 | |
28 } // namespace | |
29 | |
30 namespace chromeos { | |
31 | |
32 class Testee : public VirtualKeyboardManagerHandler { | |
33 public: | |
34 // Change access rights. | |
35 using VirtualKeyboardManagerHandler::ValidateUrl; | |
36 using VirtualKeyboardManagerHandler::CreateVirtualKeyboardList; | |
37 }; | |
38 | |
39 TEST(VirtualKeyboardManagerHandler, TestValidateUrl) { | |
40 static const char* layouts1[] = { "a", "b" }; | |
41 static const char* layouts2[] = { "b" }; | |
42 input_method::VirtualKeyboard virtual_keyboard_1( | |
43 GURL("http://url1/"), "name 1", CreateLayoutSet(layouts1), true); | |
44 input_method::VirtualKeyboard virtual_keyboard_2( | |
45 GURL("http://url2/"), "name 2", CreateLayoutSet(layouts2), true); | |
46 | |
47 input_method::VirtualKeyboardSelector selector; | |
48 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
49 virtual_keyboard_1.url(), | |
50 virtual_keyboard_1.name(), | |
51 virtual_keyboard_1.supported_layouts(), | |
52 virtual_keyboard_1.is_system())); | |
53 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
54 virtual_keyboard_2.url(), | |
55 virtual_keyboard_2.name(), | |
56 virtual_keyboard_2.supported_layouts(), | |
57 virtual_keyboard_2.is_system())); | |
58 | |
59 const UrlToKeyboard& url_to_keyboard = selector.url_to_keyboard(); | |
60 ASSERT_EQ(2U, url_to_keyboard.size()); | |
61 | |
62 EXPECT_TRUE(Testee::ValidateUrl(url_to_keyboard, "a", "http://url1/")); | |
63 EXPECT_TRUE(Testee::ValidateUrl(url_to_keyboard, "b", "http://url1/")); | |
64 EXPECT_TRUE(Testee::ValidateUrl(url_to_keyboard, "b", "http://url2/")); | |
65 | |
66 EXPECT_FALSE(Testee::ValidateUrl(url_to_keyboard, "a", "http://url3/")); | |
67 EXPECT_FALSE(Testee::ValidateUrl(url_to_keyboard, "b", "http://url3/")); | |
68 EXPECT_FALSE(Testee::ValidateUrl(url_to_keyboard, "c", "http://url1/")); | |
69 EXPECT_FALSE(Testee::ValidateUrl(url_to_keyboard, "c", "http://url2/")); | |
70 } | |
71 | |
72 TEST(VirtualKeyboardManagerHandler, TestSingleKeyboard) { | |
73 static const char* layouts[] = { "a", "b" }; | |
74 input_method::VirtualKeyboard virtual_keyboard_1( | |
75 GURL("http://url1/"), "name 1", CreateLayoutSet(layouts), true); | |
76 | |
77 input_method::VirtualKeyboardSelector selector; | |
78 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
79 virtual_keyboard_1.url(), | |
80 virtual_keyboard_1.name(), | |
81 virtual_keyboard_1.supported_layouts(), | |
82 virtual_keyboard_1.is_system())); | |
83 | |
84 const LayoutToKeyboard& layout_to_keyboard = selector.layout_to_keyboard(); | |
85 ASSERT_EQ(arraysize(layouts), layout_to_keyboard.size()); | |
86 const UrlToKeyboard& url_to_keyboard = selector.url_to_keyboard(); | |
87 ASSERT_EQ(1U, url_to_keyboard.size()); | |
88 | |
89 scoped_ptr<ListValue> keyboards(Testee::CreateVirtualKeyboardList( | |
90 layout_to_keyboard, url_to_keyboard, NULL)); | |
91 ASSERT_TRUE(keyboards.get()); | |
92 ASSERT_EQ(arraysize(layouts), keyboards->GetSize()); | |
93 | |
94 DictionaryValue* dictionary_value; | |
95 std::string string_value; | |
96 ListValue* list_value; | |
97 | |
98 // Check the first element (for the layout "a"). | |
99 ASSERT_TRUE(keyboards->GetDictionary(0, &dictionary_value)); | |
100 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
101 EXPECT_EQ("a", string_value); | |
102 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
103 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
104 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
105 ASSERT_EQ(1U, list_value->GetSize()); | |
106 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
107 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
108 EXPECT_EQ("http://url1/", string_value); | |
109 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
110 EXPECT_EQ("name 1", string_value); | |
111 | |
112 // Check the second element (for the layout "b"). | |
113 ASSERT_TRUE(keyboards->GetDictionary(1, &dictionary_value)); | |
114 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
115 EXPECT_EQ("b", string_value); | |
116 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
117 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
118 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
119 ASSERT_EQ(1U, list_value->GetSize()); | |
120 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
121 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
122 EXPECT_EQ("http://url1/", string_value); | |
123 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
124 EXPECT_EQ("name 1", string_value); | |
125 } | |
126 | |
127 TEST(VirtualKeyboardManagerHandler, TestSingleKeyboardWithPref) { | |
128 static const char* layouts[] = { "a", "b" }; | |
129 input_method::VirtualKeyboard virtual_keyboard_1( | |
130 GURL("http://url1/"), "name 1", CreateLayoutSet(layouts), true); | |
131 | |
132 input_method::VirtualKeyboardSelector selector; | |
133 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
134 virtual_keyboard_1.url(), | |
135 virtual_keyboard_1.name(), | |
136 virtual_keyboard_1.supported_layouts(), | |
137 virtual_keyboard_1.is_system())); | |
138 | |
139 const LayoutToKeyboard& layout_to_keyboard = selector.layout_to_keyboard(); | |
140 ASSERT_EQ(arraysize(layouts), layout_to_keyboard.size()); | |
141 const UrlToKeyboard& url_to_keyboard = selector.url_to_keyboard(); | |
142 ASSERT_EQ(1U, url_to_keyboard.size()); | |
143 | |
144 // create pref object. | |
145 scoped_ptr<DictionaryValue> pref(new DictionaryValue); | |
146 pref->SetString("b", "http://url1/"); | |
147 | |
148 scoped_ptr<ListValue> keyboards(Testee::CreateVirtualKeyboardList( | |
149 layout_to_keyboard, url_to_keyboard, pref.get())); | |
150 ASSERT_TRUE(keyboards.get()); | |
151 ASSERT_EQ(arraysize(layouts), keyboards->GetSize()); | |
152 | |
153 DictionaryValue* dictionary_value; | |
154 std::string string_value; | |
155 ListValue* list_value; | |
156 | |
157 // Check the first element (for the layout "a"). | |
158 ASSERT_TRUE(keyboards->GetDictionary(0, &dictionary_value)); | |
159 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
160 EXPECT_EQ("a", string_value); | |
161 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
162 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
163 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
164 ASSERT_EQ(1U, list_value->GetSize()); | |
165 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
166 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
167 EXPECT_EQ("http://url1/", string_value); | |
168 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
169 EXPECT_EQ("name 1", string_value); | |
170 | |
171 // Check the second element (for the layout "b"). | |
172 ASSERT_TRUE(keyboards->GetDictionary(1, &dictionary_value)); | |
173 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
174 EXPECT_EQ("b", string_value); | |
175 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
176 EXPECT_TRUE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
177 EXPECT_EQ("http://url1/", string_value); | |
178 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
179 ASSERT_EQ(1U, list_value->GetSize()); | |
180 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
181 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
182 EXPECT_EQ("http://url1/", string_value); | |
183 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
184 EXPECT_EQ("name 1", string_value); | |
185 } | |
186 | |
187 TEST(VirtualKeyboardManagerHandler, TestSingleKeyboardWithTwoPrefs) { | |
188 static const char* layouts[] = { "a", "b" }; | |
189 input_method::VirtualKeyboard virtual_keyboard_1( | |
190 GURL("http://url1/"), "name 1", CreateLayoutSet(layouts), true); | |
191 | |
192 input_method::VirtualKeyboardSelector selector; | |
193 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
194 virtual_keyboard_1.url(), | |
195 virtual_keyboard_1.name(), | |
196 virtual_keyboard_1.supported_layouts(), | |
197 virtual_keyboard_1.is_system())); | |
198 | |
199 const LayoutToKeyboard& layout_to_keyboard = selector.layout_to_keyboard(); | |
200 ASSERT_EQ(arraysize(layouts), layout_to_keyboard.size()); | |
201 const UrlToKeyboard& url_to_keyboard = selector.url_to_keyboard(); | |
202 ASSERT_EQ(1U, url_to_keyboard.size()); | |
203 | |
204 // create pref object. | |
205 scoped_ptr<DictionaryValue> pref(new DictionaryValue); | |
206 pref->SetString("a", "http://url1/"); | |
207 pref->SetString("b", "http://url1/"); | |
208 | |
209 scoped_ptr<ListValue> keyboards(Testee::CreateVirtualKeyboardList( | |
210 layout_to_keyboard, url_to_keyboard, pref.get())); | |
211 ASSERT_TRUE(keyboards.get()); | |
212 ASSERT_EQ(arraysize(layouts), keyboards->GetSize()); | |
213 | |
214 DictionaryValue* dictionary_value; | |
215 std::string string_value; | |
216 ListValue* list_value; | |
217 | |
218 // Check the first element (for the layout "a"). | |
219 ASSERT_TRUE(keyboards->GetDictionary(0, &dictionary_value)); | |
220 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
221 EXPECT_EQ("a", string_value); | |
222 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
223 EXPECT_TRUE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
224 EXPECT_EQ("http://url1/", string_value); | |
225 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
226 ASSERT_EQ(1U, list_value->GetSize()); | |
227 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
228 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
229 EXPECT_EQ("http://url1/", string_value); | |
230 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
231 EXPECT_EQ("name 1", string_value); | |
232 | |
233 // Check the second element (for the layout "b"). | |
234 ASSERT_TRUE(keyboards->GetDictionary(1, &dictionary_value)); | |
235 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
236 EXPECT_EQ("b", string_value); | |
237 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
238 EXPECT_TRUE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
239 EXPECT_EQ("http://url1/", string_value); | |
240 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
241 ASSERT_EQ(1U, list_value->GetSize()); | |
242 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
243 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
244 EXPECT_EQ("http://url1/", string_value); | |
245 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
246 EXPECT_EQ("name 1", string_value); | |
247 } | |
248 | |
249 TEST(VirtualKeyboardManagerHandler, TestSingleKeyboardWithBadPref1) { | |
250 static const char* layouts[] = { "a", "b" }; | |
251 input_method::VirtualKeyboard virtual_keyboard_1( | |
252 GURL("http://url1/"), "name 1", CreateLayoutSet(layouts), true); | |
253 | |
254 input_method::VirtualKeyboardSelector selector; | |
255 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
256 virtual_keyboard_1.url(), | |
257 virtual_keyboard_1.name(), | |
258 virtual_keyboard_1.supported_layouts(), | |
259 virtual_keyboard_1.is_system())); | |
260 | |
261 const LayoutToKeyboard& layout_to_keyboard = selector.layout_to_keyboard(); | |
262 ASSERT_EQ(arraysize(layouts), layout_to_keyboard.size()); | |
263 const UrlToKeyboard& url_to_keyboard = selector.url_to_keyboard(); | |
264 ASSERT_EQ(1U, url_to_keyboard.size()); | |
265 | |
266 // create pref object. | |
267 scoped_ptr<DictionaryValue> pref(new DictionaryValue); | |
268 pref->SetString("unknownlayout", "http://url1/"); | |
269 | |
270 scoped_ptr<ListValue> keyboards(Testee::CreateVirtualKeyboardList( | |
271 layout_to_keyboard, url_to_keyboard, pref.get())); | |
272 ASSERT_TRUE(keyboards.get()); | |
273 ASSERT_EQ(arraysize(layouts), keyboards->GetSize()); | |
274 | |
275 DictionaryValue* dictionary_value; | |
276 std::string string_value; | |
277 ListValue* list_value; | |
278 | |
279 // Check the first element (for the layout "a"). | |
280 ASSERT_TRUE(keyboards->GetDictionary(0, &dictionary_value)); | |
281 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
282 EXPECT_EQ("a", string_value); | |
283 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
284 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
285 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
286 ASSERT_EQ(1U, list_value->GetSize()); | |
287 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
288 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
289 EXPECT_EQ("http://url1/", string_value); | |
290 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
291 EXPECT_EQ("name 1", string_value); | |
292 | |
293 // Check the second element (for the layout "b"). | |
294 ASSERT_TRUE(keyboards->GetDictionary(1, &dictionary_value)); | |
295 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
296 EXPECT_EQ("b", string_value); | |
297 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
298 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
299 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
300 ASSERT_EQ(1U, list_value->GetSize()); | |
301 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
302 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
303 EXPECT_EQ("http://url1/", string_value); | |
304 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
305 EXPECT_EQ("name 1", string_value); | |
306 } | |
307 | |
308 TEST(VirtualKeyboardManagerHandler, TestSingleKeyboardWithBadPref2) { | |
309 static const char* layouts[] = { "a", "b" }; | |
310 input_method::VirtualKeyboard virtual_keyboard_1( | |
311 GURL("http://url1/"), "name 1", CreateLayoutSet(layouts), true); | |
312 | |
313 input_method::VirtualKeyboardSelector selector; | |
314 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
315 virtual_keyboard_1.url(), | |
316 virtual_keyboard_1.name(), | |
317 virtual_keyboard_1.supported_layouts(), | |
318 virtual_keyboard_1.is_system())); | |
319 | |
320 const LayoutToKeyboard& layout_to_keyboard = selector.layout_to_keyboard(); | |
321 ASSERT_EQ(arraysize(layouts), layout_to_keyboard.size()); | |
322 const UrlToKeyboard& url_to_keyboard = selector.url_to_keyboard(); | |
323 ASSERT_EQ(1U, url_to_keyboard.size()); | |
324 | |
325 // create pref object. | |
326 scoped_ptr<DictionaryValue> pref(new DictionaryValue); | |
327 pref->SetString("a", "http://unknownurl/"); | |
328 | |
329 scoped_ptr<ListValue> keyboards(Testee::CreateVirtualKeyboardList( | |
330 layout_to_keyboard, url_to_keyboard, pref.get())); | |
331 ASSERT_TRUE(keyboards.get()); | |
332 ASSERT_EQ(arraysize(layouts), keyboards->GetSize()); | |
333 | |
334 DictionaryValue* dictionary_value; | |
335 std::string string_value; | |
336 ListValue* list_value; | |
337 | |
338 // Check the first element (for the layout "a"). | |
339 ASSERT_TRUE(keyboards->GetDictionary(0, &dictionary_value)); | |
340 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
341 EXPECT_EQ("a", string_value); | |
342 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
343 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
344 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
345 ASSERT_EQ(1U, list_value->GetSize()); | |
346 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
347 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
348 EXPECT_EQ("http://url1/", string_value); | |
349 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
350 EXPECT_EQ("name 1", string_value); | |
351 | |
352 // Check the second element (for the layout "b"). | |
353 ASSERT_TRUE(keyboards->GetDictionary(1, &dictionary_value)); | |
354 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
355 EXPECT_EQ("b", string_value); | |
356 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
357 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
358 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
359 ASSERT_EQ(1U, list_value->GetSize()); | |
360 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
361 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
362 EXPECT_EQ("http://url1/", string_value); | |
363 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
364 EXPECT_EQ("name 1", string_value); | |
365 } | |
366 | |
367 TEST(VirtualKeyboardManagerHandler, TestSingleKeyboardWithBadPref3) { | |
368 static const char* layout1[] = { "a" }; | |
369 static const char* layout2[] = { "b" }; | |
370 input_method::VirtualKeyboard virtual_keyboard_1( | |
371 GURL("http://url1/"), "name 1", CreateLayoutSet(layout1), true); | |
372 input_method::VirtualKeyboard virtual_keyboard_2( | |
373 GURL("http://url2/"), "name 2", CreateLayoutSet(layout2), true); | |
374 | |
375 input_method::VirtualKeyboardSelector selector; | |
376 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
377 virtual_keyboard_1.url(), | |
378 virtual_keyboard_1.name(), | |
379 virtual_keyboard_1.supported_layouts(), | |
380 virtual_keyboard_1.is_system())); | |
381 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
382 virtual_keyboard_2.url(), | |
383 virtual_keyboard_2.name(), | |
384 virtual_keyboard_2.supported_layouts(), | |
385 virtual_keyboard_2.is_system())); | |
386 | |
387 const LayoutToKeyboard& layout_to_keyboard = selector.layout_to_keyboard(); | |
388 ASSERT_EQ(2U, layout_to_keyboard.size()); | |
389 const UrlToKeyboard& url_to_keyboard = selector.url_to_keyboard(); | |
390 ASSERT_EQ(2U, url_to_keyboard.size()); | |
391 | |
392 // create pref object. | |
393 scoped_ptr<DictionaryValue> pref(new DictionaryValue); | |
394 pref->SetString("a", "http://url2/"); // url2 does not support "a". | |
395 | |
396 scoped_ptr<ListValue> keyboards(Testee::CreateVirtualKeyboardList( | |
397 layout_to_keyboard, url_to_keyboard, pref.get())); | |
398 ASSERT_TRUE(keyboards.get()); | |
399 ASSERT_EQ(2U, keyboards->GetSize()); | |
400 | |
401 DictionaryValue* dictionary_value; | |
402 std::string string_value; | |
403 ListValue* list_value; | |
404 | |
405 // Check the first element (for the layout "a"). | |
406 ASSERT_TRUE(keyboards->GetDictionary(0, &dictionary_value)); | |
407 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
408 EXPECT_EQ("a", string_value); | |
409 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
410 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
411 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
412 ASSERT_EQ(1U, list_value->GetSize()); | |
413 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
414 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
415 EXPECT_EQ("http://url1/", string_value); | |
416 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
417 EXPECT_EQ("name 1", string_value); | |
418 | |
419 // Check the second element (for the layout "b"). | |
420 ASSERT_TRUE(keyboards->GetDictionary(1, &dictionary_value)); | |
421 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
422 EXPECT_EQ("b", string_value); | |
423 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
424 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
425 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
426 ASSERT_EQ(1U, list_value->GetSize()); | |
427 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
428 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
429 EXPECT_EQ("http://url2/", string_value); | |
430 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
431 EXPECT_EQ("name 2", string_value); | |
432 } | |
433 | |
434 TEST(VirtualKeyboardManagerHandler, TestMultipleKeyboards) { | |
435 static const char* layouts1[] = { "a", "b" }; | |
436 static const char* layouts2[] = { "c" }; | |
437 static const char* layouts3[] = { "b", "d" }; | |
438 input_method::VirtualKeyboard virtual_keyboard_1( | |
439 GURL("http://url1/"), "name 1", CreateLayoutSet(layouts1), true); | |
440 input_method::VirtualKeyboard virtual_keyboard_2( | |
441 GURL("http://url2/"), "name 2", CreateLayoutSet(layouts2), false); | |
442 input_method::VirtualKeyboard virtual_keyboard_3( | |
443 GURL("http://url3/"), "name 3", CreateLayoutSet(layouts3), true); | |
444 | |
445 input_method::VirtualKeyboardSelector selector; | |
446 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
447 virtual_keyboard_1.url(), | |
448 virtual_keyboard_1.name(), | |
449 virtual_keyboard_1.supported_layouts(), | |
450 virtual_keyboard_1.is_system())); | |
451 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
452 virtual_keyboard_2.url(), | |
453 virtual_keyboard_2.name(), | |
454 virtual_keyboard_2.supported_layouts(), | |
455 virtual_keyboard_2.is_system())); | |
456 ASSERT_TRUE(selector.AddVirtualKeyboard( | |
457 virtual_keyboard_3.url(), | |
458 virtual_keyboard_3.name(), | |
459 virtual_keyboard_3.supported_layouts(), | |
460 virtual_keyboard_3.is_system())); | |
461 | |
462 const LayoutToKeyboard& layout_to_keyboard = selector.layout_to_keyboard(); | |
463 ASSERT_EQ(arraysize(layouts1) + arraysize(layouts2) + arraysize(layouts3), | |
464 layout_to_keyboard.size()); | |
465 const UrlToKeyboard& url_to_keyboard = selector.url_to_keyboard(); | |
466 ASSERT_EQ(3U, url_to_keyboard.size()); | |
467 | |
468 scoped_ptr<ListValue> keyboards(Testee::CreateVirtualKeyboardList( | |
469 layout_to_keyboard, url_to_keyboard, NULL)); | |
470 ASSERT_TRUE(keyboards.get()); | |
471 ASSERT_EQ(4U /* a, b, c, and d */, keyboards->GetSize()); | |
472 | |
473 DictionaryValue* dictionary_value; | |
474 std::string string_value; | |
475 ListValue* list_value; | |
476 bool boolean_value = false; | |
477 | |
478 // Check the first element (for the layout "a"). | |
479 ASSERT_TRUE(keyboards->GetDictionary(0, &dictionary_value)); | |
480 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
481 EXPECT_EQ("a", string_value); | |
482 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
483 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
484 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
485 ASSERT_EQ(1U, list_value->GetSize()); | |
486 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
487 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
488 EXPECT_EQ("http://url1/", string_value); | |
489 EXPECT_TRUE(dictionary_value->GetBoolean("isSystem", &boolean_value)); | |
490 EXPECT_TRUE(boolean_value); | |
491 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
492 EXPECT_EQ("name 1", string_value); | |
493 | |
494 // Check the second element (for the layout "b"). | |
495 ASSERT_TRUE(keyboards->GetDictionary(1, &dictionary_value)); | |
496 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
497 EXPECT_EQ("b", string_value); | |
498 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
499 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
500 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
501 ASSERT_EQ(2U, list_value->GetSize()); // keyboard1 and 3. | |
502 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
503 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
504 EXPECT_EQ("http://url1/", string_value); | |
505 EXPECT_TRUE(dictionary_value->GetBoolean("isSystem", &boolean_value)); | |
506 EXPECT_TRUE(boolean_value); | |
507 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
508 EXPECT_EQ("name 1", string_value); | |
509 ASSERT_TRUE(list_value->GetDictionary(1, &dictionary_value)); | |
510 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
511 EXPECT_EQ("http://url3/", string_value); | |
512 EXPECT_TRUE(dictionary_value->GetBoolean("isSystem", &boolean_value)); | |
513 EXPECT_TRUE(boolean_value); | |
514 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
515 EXPECT_EQ("name 3", string_value); | |
516 | |
517 // 3rd. | |
518 ASSERT_TRUE(keyboards->GetDictionary(2, &dictionary_value)); | |
519 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
520 EXPECT_EQ("c", string_value); | |
521 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
522 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
523 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
524 ASSERT_EQ(1U, list_value->GetSize()); | |
525 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
526 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
527 EXPECT_EQ("http://url2/", string_value); | |
528 EXPECT_TRUE(dictionary_value->GetBoolean("isSystem", &boolean_value)); | |
529 EXPECT_FALSE(boolean_value); | |
530 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
531 EXPECT_EQ("name 2", string_value); | |
532 | |
533 // 4th. | |
534 ASSERT_TRUE(keyboards->GetDictionary(3, &dictionary_value)); | |
535 EXPECT_TRUE(dictionary_value->GetString("layout", &string_value)); | |
536 EXPECT_EQ("d", string_value); | |
537 EXPECT_TRUE(dictionary_value->GetString("layoutName", &string_value)); | |
538 EXPECT_FALSE(dictionary_value->GetString("preferredKeyboard", &string_value)); | |
539 ASSERT_TRUE(dictionary_value->GetList("supportedKeyboards", &list_value)); | |
540 ASSERT_EQ(1U, list_value->GetSize()); | |
541 ASSERT_TRUE(list_value->GetDictionary(0, &dictionary_value)); | |
542 EXPECT_TRUE(dictionary_value->GetString("url", &string_value)); | |
543 EXPECT_EQ("http://url3/", string_value); | |
544 EXPECT_TRUE(dictionary_value->GetBoolean("isSystem", &boolean_value)); | |
545 EXPECT_TRUE(boolean_value); | |
546 EXPECT_TRUE(dictionary_value->GetString("name", &string_value)); | |
547 EXPECT_EQ("name 3", string_value); | |
548 } | |
549 | |
550 } // namespace chromeos | |
OLD | NEW |