OLD | NEW |
| (Empty) |
1 // Copyright 2015 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 GEN_INCLUDE(['options_browsertest_base.js']); | |
6 GEN('#include "chrome/browser/ui/webui/options/' + | |
7 'multilanguage_options_browsertest.h"'); | |
8 | |
9 /** | |
10 * Test C++ fixture for Language Options WebUI testing. | |
11 * @constructor | |
12 * @extends {testing.Test} | |
13 */ | |
14 function MultilanguageOptionsWebUIBrowserTest() {} | |
15 | |
16 MultilanguageOptionsWebUIBrowserTest.prototype = { | |
17 __proto__: OptionsBrowsertestBase.prototype, | |
18 | |
19 /** @override */ | |
20 browsePreload: 'chrome://settings-frame/languages', | |
21 | |
22 /** @override */ | |
23 typedefCppFixture: 'MultilanguageOptionsBrowserTest', | |
24 | |
25 /** @override */ | |
26 accessibilityIssuesAreErrors: true, | |
27 | |
28 /** @param {string} expected Sorted currently selected languages. */ | |
29 expectCurrentlySelected: function(expected) { | |
30 var languages = LanguageOptions.getInstance().spellCheckLanguages_; | |
31 expectEquals(expected, Object.keys(languages).sort().join()); | |
32 }, | |
33 | |
34 /** @override */ | |
35 setUp: function() { | |
36 OptionsBrowsertestBase.prototype.setUp.call(this); | |
37 | |
38 assertFalse(cr.isMac); | |
39 expectFalse($('edit-custom-dictionary-button').hidden); | |
40 this.expectEnableSpellcheckCheckboxVisible(); | |
41 this.expectCurrentlySelected('fr'); | |
42 | |
43 var requiredOwnedAriaRoleMissingSelectors = [ | |
44 '#default-search-engine-list', | |
45 '#other-search-engine-list', | |
46 ]; | |
47 | |
48 // Enable when failure is resolved. | |
49 // AX_ARIA_08: http://crbug.com/559320 | |
50 this.accessibilityAuditConfig.ignoreSelectors( | |
51 'requiredOwnedAriaRoleMissing', | |
52 requiredOwnedAriaRoleMissingSelectors); | |
53 | |
54 // Enable when failure is resolved. | |
55 // AX_ARIA_10: http://crbug.com/559266 | |
56 this.accessibilityAuditConfig.ignoreSelectors( | |
57 'unsupportedAriaAttribute', | |
58 '#language-options-list'); | |
59 | |
60 // Enable when failure is resolved. | |
61 // AX_TEXT_04: http://crbug.com/559271 | |
62 this.accessibilityAuditConfig.ignoreSelectors( | |
63 'linkWithUnclearPurpose', | |
64 '#languagePage > .content-area > .language-options-header > A'); | |
65 }, | |
66 | |
67 /** @override */ | |
68 tearDown: function() { | |
69 testing.Test.prototype.tearDown.call(this); | |
70 this.expectEnableSpellcheckCheckboxVisible(); | |
71 }, | |
72 | |
73 /** Make sure the 'Enable spell checking' checkbox is visible. */ | |
74 expectEnableSpellcheckCheckboxVisible: function() { | |
75 if ($('enable-spellcheck-container')) | |
76 expectFalse($('enable-spellcheck-container').hidden); | |
77 }, | |
78 }; | |
79 | |
80 // Test that opening language options has the correct location. | |
81 TEST_F('MultilanguageOptionsWebUIBrowserTest', 'TestOpenLanguageOptions', | |
82 function() { | |
83 expectEquals('chrome://settings-frame/languages', document.location.href); | |
84 }); | |
85 | |
86 // Test that only certain languages can be selected and used for spellchecking. | |
87 // prefs::kLanguagePreferredLanguages/prefs::kAcceptLanguages is set to | |
88 // 'fr,es,de,en' and prefs::kSpellCheckDictionaries is just 'fr' | |
89 TEST_F('MultilanguageOptionsWebUIBrowserTest', 'ChangeSpellcheckLanguages', | |
90 function() { | |
91 expectTrue($('language-options-list').selectLanguageByCode('es')); | |
92 expectFalse($('spellcheck-language-checkbox').checked, 'es'); | |
93 | |
94 // Click 'es' and ensure that it gets checked and 'fr' stays checked. | |
95 $('spellcheck-language-checkbox').click(); | |
96 expectTrue($('spellcheck-language-checkbox').checked, 'es'); | |
97 expectTrue($('language-options-list').selectLanguageByCode('fr')); | |
98 expectTrue($('spellcheck-language-checkbox').checked, 'fr'); | |
99 this.expectCurrentlySelected('es,fr'); | |
100 | |
101 // Click 'fr' and ensure that it gets unchecked and 'es' stays checked. | |
102 $('spellcheck-language-checkbox').click(); | |
103 expectFalse($('spellcheck-language-checkbox').checked, 'fr'); | |
104 $('language-options-list').selectLanguageByCode('es'); | |
105 expectTrue($('spellcheck-language-checkbox').checked, 'es'); | |
106 this.expectCurrentlySelected('es'); | |
107 }); | |
108 | |
109 // Make sure 'am' cannot be selected as a language and 'fr' stays selected. | |
110 TEST_F('MultilanguageOptionsWebUIBrowserTest', 'NotAcceptLanguage', function() { | |
111 expectFalse($('language-options-list').selectLanguageByCode('am')); | |
112 expectTrue($('language-options-list').selectLanguageByCode('fr')); | |
113 expectTrue($('spellcheck-language-checkbox').checked, 'fr'); | |
114 this.expectCurrentlySelected('fr'); | |
115 }); | |
116 | |
117 // Make sure 'en' cannot be used as a language and 'fr' stays selected. | |
118 TEST_F('MultilanguageOptionsWebUIBrowserTest', 'UnusableLanguage', function() { | |
119 expectTrue($('language-options-list').selectLanguageByCode('en')); | |
120 expectTrue($('spellcheck-language-checkbox-container').hidden); | |
121 expectFalse($('spellcheck-language-checkbox').checked, 'en'); | |
122 this.expectCurrentlySelected('fr'); | |
123 }); | |
124 | |
125 /** | |
126 * Test C++ fixture for Language Options WebUI testing. | |
127 * @constructor | |
128 * @extends {MultilanguageOptionsWebUIBrowserTest} | |
129 */ | |
130 function MultilanguagePreferenceWebUIBrowserTest() {} | |
131 | |
132 MultilanguagePreferenceWebUIBrowserTest.prototype = { | |
133 __proto__: MultilanguageOptionsWebUIBrowserTest.prototype, | |
134 | |
135 /** @override */ | |
136 testGenPreamble: function() { | |
137 GEN('ClearSpellcheckDictionaries();'); | |
138 }, | |
139 | |
140 /** @override */ | |
141 isAsync: true, | |
142 | |
143 /** | |
144 * @param {string} expected Sorted languages in the kSpellCheckDictionaries | |
145 * preference. | |
146 */ | |
147 expectRegisteredDictionariesPref: function(expected) { | |
148 var registeredPrefs = | |
149 options.Preferences.getInstance().registeredPreferences_; | |
150 expectEquals(expected, | |
151 registeredPrefs['spellcheck.dictionaries'].orig.value.sort().join()); | |
152 }, | |
153 | |
154 /** | |
155 * Watch for a change to the preference |pref| and then call |callback|. | |
156 * @param {string} pref The preference to listen for a change on. | |
157 * @param {function} callback The function to run after a listener event. | |
158 */ | |
159 addPreferenceListener: function(pref, callback) { | |
160 options.Preferences.getInstance().addEventListener(pref, callback); | |
161 }, | |
162 | |
163 /** @override */ | |
164 setUp: function() { | |
165 OptionsBrowsertestBase.prototype.setUp.call(this); | |
166 | |
167 assertFalse(cr.isMac); | |
168 expectTrue($('edit-custom-dictionary-button').hidden); | |
169 this.expectEnableSpellcheckCheckboxVisible(); | |
170 this.expectCurrentlySelected(''); | |
171 this.expectRegisteredDictionariesPref(''); | |
172 | |
173 // Enable when failure is resolved. | |
174 // AX_ARIA_10: http://crbug.com/559266 | |
175 this.accessibilityAuditConfig.ignoreSelectors( | |
176 'unsupportedAriaAttribute', | |
177 '#language-options-list'); | |
178 | |
179 // Enable when failure is resolved. | |
180 // AX_TEXT_04: http://crbug.com/559271 | |
181 this.accessibilityAuditConfig.ignoreSelectors( | |
182 'linkWithUnclearPurpose', | |
183 '#languagePage > .content-area > .language-options-header > A'); | |
184 | |
185 // Enable when failure is resolved. | |
186 // AX_FOCUS_01: http://crbug.com/570046 | |
187 this.accessibilityAuditConfig.ignoreSelectors( | |
188 'focusableElementNotVisibleAndNotAriaHidden', | |
189 '#offer-to-translate-in-this-language'); | |
190 }, | |
191 }; | |
192 | |
193 // Make sure the case where no languages are selected is handled properly. | |
194 TEST_F('MultilanguagePreferenceWebUIBrowserTest', 'SelectFromBlank', | |
195 function() { | |
196 expectTrue($('language-options-list').selectLanguageByCode('fr')); | |
197 expectFalse($('spellcheck-language-checkbox').checked, 'fr'); | |
198 expectTrue($('edit-custom-dictionary-button').hidden); | |
199 | |
200 // Add a preference change event listener which ensures that the preference is | |
201 // updated correctly and that 'fr' is the only thing in the dictionary object. | |
202 this.addPreferenceListener('spellcheck.dictionaries', function() { | |
203 expectTrue($('spellcheck-language-checkbox').checked, 'fr'); | |
204 this.expectRegisteredDictionariesPref('fr'); | |
205 this.expectCurrentlySelected('fr'); | |
206 expectFalse($('edit-custom-dictionary-button').hidden); | |
207 testDone(); | |
208 }.bind(this)); | |
209 | |
210 // Click 'fr' and trigger the preference listener. | |
211 $('spellcheck-language-checkbox').click(); | |
212 }); | |
OLD | NEW |