• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/language_options_handler.h"
6 
7 #include <string>
8 
9 #include "base/memory/scoped_ptr.h"
10 #include "base/values.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 
13 #if defined(OS_CHROMEOS)
14 #include "chrome/browser/chromeos/cros/cros_library.h"
15 #include "chrome/browser/chromeos/cros/input_method_library.h"
16 #include "chrome/browser/ui/webui/options/chromeos/cros_language_options_handler.h"
17 #endif  // defined(OS_CHROMEOS)
18 
19 #if defined(OS_CHROMEOS)
CreateInputMethodDescriptors()20 static chromeos::InputMethodDescriptors CreateInputMethodDescriptors() {
21   chromeos::InputMethodDescriptors descriptors;
22   descriptors.push_back(
23       chromeos::InputMethodDescriptor("xkb:us::eng", "USA", "us", "eng"));
24   descriptors.push_back(
25       chromeos::InputMethodDescriptor("xkb:fr::fra", "France", "fr", "fra"));
26   descriptors.push_back(
27       chromeos::InputMethodDescriptor("xkb:be::fra", "Belgium", "be", "fr"));
28   descriptors.push_back(
29       chromeos::InputMethodDescriptor("mozc", "Mozc (US keyboard layout)", "us",
30                                       "ja"));
31   return descriptors;
32 }
33 
TEST(LanguageOptionsHandlerTest,GetInputMethodList)34 TEST(LanguageOptionsHandlerTest, GetInputMethodList) {
35   // Use the stub libcros. The object will take care of the cleanup.
36   chromeos::ScopedStubCrosEnabler stub_cros_enabler;
37 
38   // Reset the library implementation so it will be initialized
39   // again. Otherwise, non-stub implementation can be reused, if it's
40   // already initialized elsewhere, which results in a crash.
41   chromeos::CrosLibrary::Get()->GetTestApi()->SetInputMethodLibrary(NULL,
42                                                                     false);
43 
44   chromeos::InputMethodDescriptors descriptors = CreateInputMethodDescriptors();
45   scoped_ptr<ListValue> list(
46       chromeos::CrosLanguageOptionsHandler::GetInputMethodList(descriptors));
47   ASSERT_EQ(4U, list->GetSize());
48 
49   DictionaryValue* entry = NULL;
50   DictionaryValue *language_code_set = NULL;
51   std::string input_method_id;
52   std::string display_name;
53   std::string language_code;
54 
55   // As shown below, the list should be input method ids should appear in
56   // the same order of the descriptors.
57   ASSERT_TRUE(list->GetDictionary(0, &entry));
58   ASSERT_TRUE(entry->GetString("id", &input_method_id));
59   ASSERT_TRUE(entry->GetString("displayName", &display_name));
60   ASSERT_TRUE(entry->GetDictionary("languageCodeSet", &language_code_set));
61   EXPECT_EQ("xkb:us::eng", input_method_id);
62   // Commented out as it depends on translation in generated_resources.grd
63   // (i.e. makes the test fragile).
64   // EXPECT_EQ("English (USA) keyboard layout", display_name);
65   ASSERT_TRUE(language_code_set->HasKey("en-US"));
66   ASSERT_TRUE(language_code_set->HasKey("id"));  // From kExtraLanguages.
67   ASSERT_TRUE(language_code_set->HasKey("fil"));  // From kExtraLanguages.
68 
69   ASSERT_TRUE(list->GetDictionary(1, &entry));
70   ASSERT_TRUE(entry->GetString("id", &input_method_id));
71   ASSERT_TRUE(entry->GetString("displayName", &display_name));
72   ASSERT_TRUE(entry->GetDictionary("languageCodeSet", &language_code_set));
73   EXPECT_EQ("xkb:fr::fra", input_method_id);
74   // Commented out. See above.
75   // EXPECT_EQ("French keyboard layout", display_name);
76   ASSERT_TRUE(language_code_set->HasKey("fr"));
77 
78   ASSERT_TRUE(list->GetDictionary(2, &entry));
79   ASSERT_TRUE(entry->GetString("id", &input_method_id));
80   ASSERT_TRUE(entry->GetString("displayName", &display_name));
81   ASSERT_TRUE(entry->GetDictionary("languageCodeSet", &language_code_set));
82   EXPECT_EQ("xkb:be::fra", input_method_id);
83   // Commented out. See above.
84   // EXPECT_EQ("Belgian keyboard layout", display_name);
85   ASSERT_TRUE(language_code_set->HasKey("fr"));
86 
87   ASSERT_TRUE(list->GetDictionary(3, &entry));
88   ASSERT_TRUE(entry->GetString("id", &input_method_id));
89   ASSERT_TRUE(entry->GetString("displayName", &display_name));
90   ASSERT_TRUE(entry->GetDictionary("languageCodeSet", &language_code_set));
91   EXPECT_EQ("mozc", input_method_id);
92   // Commented out. See above.
93   // EXPECT_EQ("Japanese input method (for US keyboard)", display_name);
94   ASSERT_TRUE(language_code_set->HasKey("ja"));
95 }
96 
TEST(LanguageOptionsHandlerTest,GetLanguageList)97 TEST(LanguageOptionsHandlerTest, GetLanguageList) {
98   chromeos::InputMethodDescriptors descriptors = CreateInputMethodDescriptors();
99   scoped_ptr<ListValue> list(
100       chromeos::CrosLanguageOptionsHandler::GetLanguageList(descriptors));
101   ASSERT_EQ(7U, list->GetSize());
102 
103   DictionaryValue* entry = NULL;
104   std::string language_code;
105   std::string display_name;
106   std::string native_display_name;
107 
108   // As shown below, the list should be sorted by the display names,
109   // and these names should not have duplicates.
110 
111   // This comes from kExtraLanguages.
112   ASSERT_TRUE(list->GetDictionary(0, &entry));
113   ASSERT_TRUE(entry->GetString("code", &language_code));
114   ASSERT_TRUE(entry->GetString("displayName", &display_name));
115   ASSERT_TRUE(entry->GetString("nativeDisplayName", &native_display_name));
116   EXPECT_EQ("en-AU", language_code);
117   EXPECT_EQ("English (Australia)", display_name);
118   EXPECT_EQ("English (Australia)", native_display_name);
119 
120   ASSERT_TRUE(list->GetDictionary(1, &entry));
121   ASSERT_TRUE(entry->GetString("code", &language_code));
122   ASSERT_TRUE(entry->GetString("displayName", &display_name));
123   ASSERT_TRUE(entry->GetString("nativeDisplayName", &native_display_name));
124   EXPECT_EQ("en-US", language_code);
125   EXPECT_EQ("English (United States)", display_name);
126   EXPECT_EQ("English (United States)", native_display_name);
127 
128   // This comes from kExtraLanguages.
129   ASSERT_TRUE(list->GetDictionary(2, &entry));
130   ASSERT_TRUE(entry->GetString("code", &language_code));
131   ASSERT_TRUE(entry->GetString("displayName", &display_name));
132   ASSERT_TRUE(entry->GetString("nativeDisplayName", &native_display_name));
133   EXPECT_EQ("fil", language_code);
134   EXPECT_EQ("Filipino", display_name);
135   EXPECT_EQ("Filipino", native_display_name);
136 
137   ASSERT_TRUE(list->GetDictionary(3, &entry));
138   ASSERT_TRUE(entry->GetString("code", &language_code));
139   ASSERT_TRUE(entry->GetString("displayName", &display_name));
140   ASSERT_TRUE(entry->GetString("nativeDisplayName", &native_display_name));
141   EXPECT_EQ("fr", language_code);
142   EXPECT_EQ("French", display_name);
143   EXPECT_EQ("fran\u00E7ais", native_display_name);
144 
145   // This comes from kExtraLanguages.
146   ASSERT_TRUE(list->GetDictionary(4, &entry));
147   ASSERT_TRUE(entry->GetString("code", &language_code));
148   ASSERT_TRUE(entry->GetString("displayName", &display_name));
149   ASSERT_TRUE(entry->GetString("nativeDisplayName", &native_display_name));
150   EXPECT_EQ("id", language_code);
151   EXPECT_EQ("Indonesian", display_name);
152   EXPECT_EQ("Bahasa Indonesia", native_display_name);
153 
154   ASSERT_TRUE(list->GetDictionary(5, &entry));
155   ASSERT_TRUE(entry->GetString("code", &language_code));
156   ASSERT_TRUE(entry->GetString("displayName", &display_name));
157   ASSERT_TRUE(entry->GetString("nativeDisplayName", &native_display_name));
158   EXPECT_EQ("ja", language_code);
159   EXPECT_EQ("Japanese", display_name);
160   EXPECT_EQ("\u65E5\u672C\u8A9E", native_display_name);
161 
162   // This comes from kExtraLanguages.
163   ASSERT_TRUE(list->GetDictionary(6, &entry));
164   ASSERT_TRUE(entry->GetString("code", &language_code));
165   ASSERT_TRUE(entry->GetString("displayName", &display_name));
166   ASSERT_TRUE(entry->GetString("nativeDisplayName", &native_display_name));
167   EXPECT_EQ("es-419", language_code);
168   EXPECT_EQ("Spanish (Latin America)", display_name);
169   EXPECT_EQ("espa\u00F1ol (Latinoam\u00E9rica y el Caribe)",
170             native_display_name);
171 }
172 #endif  // defined(OS_CHROMEOS)
173 
174 #if !defined(OS_MACOSX)
TEST(LanguageOptionsHandlerTest,GetUILanguageCodeSet)175 TEST(LanguageOptionsHandlerTest, GetUILanguageCodeSet) {
176   scoped_ptr<DictionaryValue> dictionary(
177       LanguageOptionsHandler::GetUILanguageCodeSet());
178   EXPECT_TRUE(dictionary->HasKey("en-US"));
179   // Note that we don't test a false case, as such an expectation will
180   // fail when we add support for the language.
181   // EXPECT_FALSE(dictionary->HasKey("no"));
182 }
183 #endif  // !defined(OS_MACOSX)
184 
TEST(LanguageOptionsHandlerTest,GetSpellCheckLanguageCodeSet)185 TEST(LanguageOptionsHandlerTest, GetSpellCheckLanguageCodeSet) {
186   scoped_ptr<DictionaryValue> dictionary(
187       LanguageOptionsHandler::GetSpellCheckLanguageCodeSet());
188   EXPECT_TRUE(dictionary->HasKey("en-US"));
189 }
190