Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(103)

Side by Side Diff: chrome/test/data/webui/settings/languages_page_tests.js

Issue 2837703002: Change SettingsLanguagesPageBrowserTest to CrSettingsLanguagesPageTest (Closed)
Patch Set: rebase Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 /** @fileoverview Suite of tests for settings-languages-page. */ 5 cr.define('languages_page_tests', function() {
6 6 /** @enum {string} */
7 /** @const {string} Path to root from chrome/test/data/webui/settings/. */ 7 const TestNames = {
8 var ROOT_PATH = '../../../../../'; 8 AddLanguagesDialog: 'add languages dialog',
9 9 LanguageMenu: 'language menu',
10 // Polymer BrowserTest fixture. 10 InputMethods: 'input methods',
11 GEN_INCLUDE( 11 Spellcheck: 'spellcheck',
12 [ROOT_PATH + 'chrome/test/data/webui/polymer_browser_test_base.js']); 12 };
13 // SettingsPageBrowserTest fixture.
14 GEN_INCLUDE([ROOT_PATH +
15 'chrome/test/data/webui/settings/settings_page_browsertest.js']);
16
17 /**
18 * Test class for settings-languages-page UI.
19 * @constructor
20 * @extends {SettingsPageBrowserTest}
21 */
22 function SettingsLanguagesPageBrowserTest() {}
23
24 SettingsLanguagesPageBrowserTest.prototype = {
25 __proto__: SettingsPageBrowserTest.prototype,
26
27 /** @override */
28 preLoad: function() {
29 SettingsPageBrowserTest.prototype.preLoad.call(this);
30 settingsHidePagesByDefaultForTest = true;
31 },
32 };
33
34 // Flaky on Windows, Mac and Linux. See https://crbug.com/641400.
35 //
36 // May time out on debug builders and memory bots because the Settings page can
37 // take several seconds to load in a Release build and several times that in a
38 // Debug build. See https://crbug.com/558434.
39 //
40 // Disabling this test in general.
41 GEN('#define MAYBE_LanguagesPage DISABLED_LanguagesPage');
42
43 // Runs languages page tests.
44 TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
45 var self = this;
46
47 suiteSetup(function() {
48 self.toggleAdvanced();
49 });
50 13
51 suite('languages page', function() { 14 suite('languages page', function() {
52 testing.Test.disableAnimationsAndTransitions(); 15 /** @type {?LanguageHelper} */
16 var languageHelper = null;
17 /** @type {?SettingsLanguagesPageElement} */
18 var languagesPage = null;
19 /** @type {?IronCollapseElement} */
20 var languagesCollapse = null;
21 /** @type {?CrActionMenuElement} */
22 var actionMenu = null;
23 /** @type {?settings.LanguagesBrowserProxy} */
24 var browserProxy = null;
53 25
54 var languagesSection; 26 // Enabled language pref name for the platform.
55 var languagesPage; 27 const languagesPref =
56 var languagesCollapse; 28 cr.isChromeOS ? 'settings.language.preferred_languages'
57 var languageHelper; 29 : 'intl.accept_languages';
58 var actionMenu;
59 30
60 /** 31 // Initial value of enabled languages pref used in tests.
61 * @param {numExpected} Expected number of languages to eventually be 32 const initialLanguages = 'en-US,sw';
62 * enabled.
63 * @return {!Promise} Resolved when the number of enabled languages changes
64 * to match expectations.
65 */
66 function whenNumEnabledLanguagesBecomes(numExpected) {
67 assert(!!languagesPage);
68 return new Promise(function(resolve, reject) {
69 languagesPage.addEventListener('languages-changed', function changed() {
70 if (languagesPage.languages.enabled.length != numExpected)
71 return;
72 resolve();
73 languagesPage.removeEventListener('languages-changed', changed);
74 });
75 });
76 }
77
78 // Returns supported languages that are not enabled.
79 function getAvailableLanguages() {
80 return languagesPage.languages.supported.filter(function(language) {
81 return !languageHelper.isLanguageEnabled(language.code);
82 });
83 }
84 33
85 suiteSetup(function() { 34 suiteSetup(function() {
86 var page = self.basicPage; 35 testing.Test.disableAnimationsAndTransitions();
87 page.set('pageVisibility.languages', true); 36 PolymerTest.clearBody();
88 Polymer.dom.flush(); 37 CrSettingsPrefs.deferInitialization = true;
89
90 languagesSection = assert(this.getSection(page, 'languages'));
91 languagesPage = assert(
92 languagesSection.querySelector('settings-languages-page'));
93 languagesCollapse = languagesPage.$.languagesCollapse;
94 languagesCollapse.opened = true;
95 actionMenu = languagesPage.$.menu.get();
96
97 languageHelper = languagesPage.languageHelper;
98 return languageHelper.whenReady();
99 }.bind(this));
100
101 teardown(function(done) {
102 if (actionMenu.open)
103 actionMenu.close();
104
105 // Close the section if we're in a sub-page.
106 if (settings.getCurrentRoute().isSubpage()) {
107 settings.navigateTo(settings.Route.BASIC);
108 setTimeout(done);
109 } else {
110 done();
111 }
112 }); 38 });
113 39
114 suite('add languages dialog', function() { 40 setup(function() {
41 var settingsPrefs = document.createElement('settings-prefs');
42 var settingsPrivate =
43 new settings.FakeSettingsPrivate(settings.getFakeLanguagePrefs());
44 settingsPrefs.initialize(settingsPrivate);
45 document.body.appendChild(settingsPrefs);
46 return CrSettingsPrefs.initialized.then(function() {
47 // Set up test browser proxy.
48 browserProxy = new settings.TestLanguagesBrowserProxy();
49 settings.LanguagesBrowserProxyImpl.instance_ = browserProxy;
50
51 // Set up fake languageSettingsPrivate API.
52 var languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate();
53 languageSettingsPrivate.setSettingsPrefs(settingsPrefs);
54
55 languagesPage = document.createElement('settings-languages-page');
56
57 // Prefs would normally be data-bound to settings-languages-page.
58 languagesPage.prefs = settingsPrefs.prefs;
59 test_util.fakeDataBind(settingsPrefs, languagesPage, 'prefs');
60
61 document.body.appendChild(languagesPage);
62 languagesCollapse = languagesPage.$.languagesCollapse;
63 languagesCollapse.opened = true;
64 actionMenu = languagesPage.$.menu.get();
65
66 languageHelper = languagesPage.languageHelper;
67 return languageHelper.whenReady();
68 });
69 });
70
71 teardown(function() {
72 PolymerTest.clearBody();
73 });
74
75 suite(TestNames.AddLanguagesDialog, function() {
115 var dialog; 76 var dialog;
116 var dialogItems; 77 var dialogItems;
117 var cancelButton; 78 var cancelButton;
118 var actionButton; 79 var actionButton;
119 80
120 setup(function(done) { 81 setup(function(done) {
121 var addLanguagesButton = 82 var addLanguagesButton =
122 languagesCollapse.querySelector('#addLanguages'); 83 languagesCollapse.querySelector('#addLanguages');
123 MockInteractions.tap(addLanguagesButton); 84 MockInteractions.tap(addLanguagesButton);
124 85
(...skipping 26 matching lines...) Expand all
151 Polymer.dom.flush(); 112 Polymer.dom.flush();
152 assertEquals(null, languagesPage.$$('settings-add-languages-dialog')); 113 assertEquals(null, languagesPage.$$('settings-add-languages-dialog'));
153 }); 114 });
154 115
155 test('cancel', function() { 116 test('cancel', function() {
156 // Canceling the dialog should close and remove it. 117 // Canceling the dialog should close and remove it.
157 MockInteractions.tap(cancelButton); 118 MockInteractions.tap(cancelButton);
158 }); 119 });
159 120
160 test('add languages and cancel', function(done) { 121 test('add languages and cancel', function(done) {
161 var numEnabled = languagesPage.languages.enabled.length;
162
163 // Check some languages. 122 // Check some languages.
164 MockInteractions.tap(dialogItems[0]); 123 MockInteractions.tap(dialogItems[1]); // en-CA.
165 MockInteractions.tap(dialogItems[1]); 124 MockInteractions.tap(dialogItems[2]); // tk.
166 125
167 // Canceling the dialog should close and remove it without enabling 126 // Canceling the dialog should close and remove it without enabling
168 // the checked languages. A small timeout lets us check this. 127 // the checked languages. A small timeout lets us check this.
169 MockInteractions.tap(cancelButton); 128 MockInteractions.tap(cancelButton);
170 setTimeout(function() { 129 setTimeout(function() {
171 // Number of enabled languages should be the same. 130 assertEquals(initialLanguages,
172 assertEquals(numEnabled, languagesPage.languages.enabled.length); 131 languageHelper.getPref(languagesPref).value);
173 done(); 132 done();
174 }, 100); 133 }, 100);
175 }); 134 });
176 135
177 test('add languages and confirm', function() { 136 test('add languages and confirm', function() {
178 var numEnabled = languagesPage.languages.enabled.length;
179
180 // No languages have been checked, so the action button is inert. 137 // No languages have been checked, so the action button is inert.
181 MockInteractions.tap(actionButton); 138 MockInteractions.tap(actionButton);
182 Polymer.dom.flush(); 139 Polymer.dom.flush();
183 assertEquals(dialog, languagesPage.$$('settings-add-languages-dialog')); 140 assertEquals(dialog, languagesPage.$$('settings-add-languages-dialog'));
184 141
185 // Check and uncheck one language. 142 // Check and uncheck one language.
186 MockInteractions.tap(dialogItems[0]); 143 MockInteractions.tap(dialogItems[0]);
187 assertFalse(actionButton.disabled); 144 assertFalse(actionButton.disabled);
188 MockInteractions.tap(dialogItems[0]); 145 MockInteractions.tap(dialogItems[0]);
189 assertTrue(actionButton.disabled); 146 assertTrue(actionButton.disabled);
190 147
191 // Check multiple languages. 148 // Check multiple languages.
192 MockInteractions.tap(dialogItems[0]); 149 MockInteractions.tap(dialogItems[0]); // en.
193 MockInteractions.tap(dialogItems[1]); 150 MockInteractions.tap(dialogItems[2]); // tk.
194 assertFalse(actionButton.disabled); 151 assertFalse(actionButton.disabled);
195 152
196 // The action button should close and remove the dialog, enabling the 153 // The action button should close and remove the dialog, enabling the
197 // checked languages. 154 // checked languages.
198 MockInteractions.tap(actionButton); 155 MockInteractions.tap(actionButton);
199 156
200 // Wait for the languages to be enabled by the browser. 157 assertEquals(
201 return whenNumEnabledLanguagesBecomes(numEnabled + 2); 158 initialLanguages + ',en,tk',
159 languageHelper.getPref(languagesPref).value);
202 }); 160 });
203 }); 161 });
204 162
205 suite('language menu', function() { 163 suite(TestNames.LanguageMenu, function() {
206 var origTranslateEnabled; 164 /*
207
208 /**
209 * Finds, asserts and returns the menu item for the given i18n key. 165 * Finds, asserts and returns the menu item for the given i18n key.
210 * @param {string} i18nKey Name of the i18n string for the item's text. 166 * @param {string} i18nKey Name of the i18n string for the item's text.
211 * @return {!HTMLElement} Menu item. 167 * @return {!HTMLElement} Menu item.
212 */ 168 */
213 function getMenuItem(i18nKey) { 169 function getMenuItem(i18nKey) {
214 var i18nString = assert(loadTimeData.getString(i18nKey)); 170 var i18nString = assert(loadTimeData.getString(i18nKey));
215 var menuItems = actionMenu.querySelectorAll('.dropdown-item'); 171 var menuItems = actionMenu.querySelectorAll('.dropdown-item');
216 var menuItem = Array.from(menuItems).find( 172 var menuItem = Array.from(menuItems).find(
217 item => item.textContent.trim() == i18nString); 173 item => item.textContent.trim() == i18nString);
218 return assert(menuItem, 'Menu item "' + i18nKey + '" not found'); 174 return assert(menuItem, 'Menu item "' + i18nKey + '" not found');
219 } 175 }
220 176
221 /** 177 /*
222 * Checks the visibility of each expected menu item button. 178 * Checks the visibility of each expected menu item button.
223 * param {!Object<boolean>} Dictionary from i18n keys to expected 179 * param {!Object<boolean>} Dictionary from i18n keys to expected
224 * visibility of those menu items. 180 * visibility of those menu items.
225 */ 181 */
226 function assertMenuItemButtonsVisible(buttonVisibility) { 182 function assertMenuItemButtonsVisible(buttonVisibility) {
227 assertTrue(actionMenu.open); 183 assertTrue(actionMenu.open);
228 for (var buttonKey of Object.keys(buttonVisibility)) { 184 for (var buttonKey of Object.keys(buttonVisibility)) {
229 var buttonItem = getMenuItem(buttonKey); 185 var buttonItem = getMenuItem(buttonKey);
230 assertEquals(!buttonVisibility[buttonKey], buttonItem.hidden, 186 assertEquals(!buttonVisibility[buttonKey], buttonItem.hidden,
231 'Menu item "' + buttonKey + '" hidden'); 187 'Menu item "' + buttonKey + '" hidden');
232 } 188 }
233 } 189 }
234 190
235 suiteSetup(function() {
236 // Cache the value of Translate to avoid side effects.
237 origTranslateEnabled = languageHelper.prefs.translate.enabled.value;
238 });
239
240 suiteTeardown(function() {
241 var cur = languageHelper.prefs.translate.enabled.value;
242 // Restore the value of Translate.
243 languageHelper.setPrefValue('translate.enabled', origTranslateEnabled);
244 cur = languageHelper.prefs.translate.enabled.value;
245 });
246
247 test('structure', function() { 191 test('structure', function() {
248 var languageOptionsDropdownTrigger = languagesCollapse.querySelector( 192 var languageOptionsDropdownTrigger = languagesCollapse.querySelector(
249 'paper-icon-button'); 193 'paper-icon-button');
250 assertTrue(!!languageOptionsDropdownTrigger); 194 assertTrue(!!languageOptionsDropdownTrigger);
251 MockInteractions.tap(languageOptionsDropdownTrigger); 195 MockInteractions.tap(languageOptionsDropdownTrigger);
252 assertTrue(actionMenu.open); 196 assertTrue(actionMenu.open);
253 197
254 // Enable Translate so the menu always shows the Translate checkbox.
255 languageHelper.setPrefValue('translate.enabled', true);
256
257 var separator = actionMenu.querySelector('hr'); 198 var separator = actionMenu.querySelector('hr');
258 assertEquals(1, separator.offsetHeight); 199 assertEquals(1, separator.offsetHeight);
259 200
260 // Disable Translate. On platforms that can't change the UI language, 201 // Disable Translate. On platforms that can't change the UI language,
261 // this hides all the checkboxes, so the separator isn't needed. 202 // this hides all the checkboxes, so the separator isn't needed.
262 // Chrome OS and Windows still show a checkbox and thus the separator. 203 // Chrome OS and Windows still show a checkbox and thus the separator.
263 languageHelper.setPrefValue('translate.enabled', false); 204 languageHelper.setPrefValue('translate.enabled', false);
264 assertEquals( 205 assertEquals(
265 cr.isChromeOS || cr.isWindows ? 1 : 0, separator.offsetHeight); 206 cr.isChromeOS || cr.isWindows ? 1 : 0, separator.offsetHeight);
266 }); 207 });
267 208
268 test('test translate.enable toggle', function() { 209 test('test translate.enable toggle', function() {
269 languageHelper.setPrefValue('translate.enabled', true); 210 var settingsToggle = languagesPage.$.offerTranslateOtherLangs;
270 var toggle = languagesPage.$.offerTranslateOtherLangs.root 211 assertTrue(!!settingsToggle);
271 .querySelectorAll('paper-toggle-button')[0]; 212 var paperToggle = settingsToggle.$$('paper-toggle-button');
272 assertTrue(!!toggle); 213 assertTrue(!!paperToggle);
273 214
274 // Clicking on toggle switch it to false. 215 // Clicking on the toggle switches it to false.
275 MockInteractions.tap(toggle); 216 MockInteractions.tap(paperToggle);
276 var newToggleValue = languageHelper.prefs.translate.enabled.value; 217 var newToggleValue = languageHelper.prefs.translate.enabled.value;
277 assertFalse(newToggleValue); 218 assertFalse(newToggleValue);
278 219
279 // Clicking on toggle switch it to true again. 220 // Clicking on the toggle switches it to true again.
280 MockInteractions.tap(toggle); 221 MockInteractions.tap(paperToggle);
281 newToggleValue = languageHelper.prefs.translate.enabled.value; 222 newToggleValue = languageHelper.prefs.translate.enabled.value;
282 assertTrue(newToggleValue); 223 assertTrue(newToggleValue);
283 }); 224 });
284 225
285 test('toggle translate for a specific language', function(done) { 226 test('toggle translate for a specific language', function(done) {
286 // Enable Translate so the menu always shows the Translate checkbox. 227 // Open options for 'sw'.
287 languageHelper.setPrefValue('translate.enabled', true);
288 languagesPage.set('languages.translateTarget', 'foo');
289 languagesPage.set('languages.enabled.1.supportsTranslate', true);
290
291 var languageOptionsDropdownTrigger = 228 var languageOptionsDropdownTrigger =
292 languagesCollapse.querySelectorAll('paper-icon-button')[1]; 229 languagesCollapse.querySelectorAll('paper-icon-button')[1];
293 assertTrue(!!languageOptionsDropdownTrigger); 230 assertTrue(!!languageOptionsDropdownTrigger);
294 MockInteractions.tap(languageOptionsDropdownTrigger); 231 MockInteractions.tap(languageOptionsDropdownTrigger);
295 assertTrue(actionMenu.open); 232 assertTrue(actionMenu.open);
296 233
297 // Toggle the translate option. 234 // 'sw' supports translate to the target language ('en').
298 var translateOption = getMenuItem('offerToTranslateInThisLanguage'); 235 var translateOption = getMenuItem('offerToTranslateInThisLanguage');
299 assertFalse(translateOption.disabled); 236 assertFalse(translateOption.disabled);
237 assertTrue(translateOption.checked);
238
239 // Toggle the translate option.
300 MockInteractions.tap(translateOption); 240 MockInteractions.tap(translateOption);
301 241
302 // Menu should stay open briefly. 242 // Menu should stay open briefly.
303 assertTrue(actionMenu.open); 243 assertTrue(actionMenu.open);
304 // Guaranteed to run later than the menu close delay. 244 // Guaranteed to run later than the menu close delay.
305 setTimeout(function() { 245 setTimeout(function() {
306 assertFalse(actionMenu.open); 246 assertFalse(actionMenu.open);
247 assertDeepEquals(
248 ['en-US', 'sw'],
249 languageHelper.prefs.translate_blocked_languages.value);
307 done(); 250 done();
308 }, settings.kMenuCloseDelay + 1); 251 }, settings.kMenuCloseDelay + 1);
309 }); 252 });
310 253
311 test('disable translate hides language-specific option', function() { 254 test('disable translate hides language-specific option', function() {
312 // Disables translate. 255 // Disables translate.
313 languageHelper.setPrefValue('translate.enabled', false); 256 languageHelper.setPrefValue('translate.enabled', false);
314 languagesPage.set('languages.translateTarget', 'foo');
315 languagesPage.set('languages.enabled.1.supportsTranslate', true);
316 257
317 // Makes sure language-specific menu exists. 258 // Open options for 'sw'.
318 var languageOptionsDropdownTrigger = 259 var languageOptionsDropdownTrigger =
319 languagesCollapse.querySelectorAll('paper-icon-button')[1]; 260 languagesCollapse.querySelectorAll('paper-icon-button')[1];
320 assertTrue(!!languageOptionsDropdownTrigger); 261 assertTrue(!!languageOptionsDropdownTrigger);
321 MockInteractions.tap(languageOptionsDropdownTrigger); 262 MockInteractions.tap(languageOptionsDropdownTrigger);
322 assertTrue(actionMenu.open); 263 assertTrue(actionMenu.open);
323 264
324 // The language-specific translation option should be hidden. 265 // The language-specific translation option should be hidden.
325 var translateOption = actionMenu.querySelector('#offerTranslations'); 266 var translateOption = actionMenu.querySelector('#offerTranslations');
326 assertTrue(!!translateOption); 267 assertTrue(!!translateOption);
327 assertTrue(translateOption.hidden); 268 assertTrue(translateOption.hidden);
328 }); 269 });
329 270
330 test('remove language', function() { 271 test('remove language', function() {
331 var numEnabled = languagesPage.languages.enabled.length; 272 // Enable a language which we can then disable.
273 languageHelper.enableLanguage('no');
332 274
333 // Enabled a language which we can then disable. 275 // Populate the dom-repeat.
334 var newLanguage = assert(getAvailableLanguages()[0]); 276 Polymer.dom.flush();
335 languageHelper.enableLanguage(newLanguage.code);
336 277
337 // Wait for the language to be enabled. 278 // Find the new language item.
338 return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() { 279 var items = languagesCollapse.querySelectorAll('.list-item');
339 // Populate the dom-repeat. 280 var domRepeat = assert(
340 Polymer.dom.flush(); 281 languagesCollapse.querySelector('template[is="dom-repeat"]'));
282 var item = Array.from(items).find(function(el) {
283 return domRepeat.itemForElement(el) &&
284 domRepeat.itemForElement(el).language.code == 'no';
285 });
341 286
342 // Find the new language item. 287 // Open the menu and select Remove.
343 var items = languagesCollapse.querySelectorAll('.list-item'); 288 MockInteractions.tap(item.querySelector('paper-icon-button'));
344 var domRepeat = assert(
345 languagesCollapse.querySelector('template[is="dom-repeat"]'));
346 var item = Array.from(items).find(function(el) {
347 return domRepeat.itemForElement(el) &&
348 domRepeat.itemForElement(el).language == newLanguage;
349 });
350 289
351 // Open the menu and select Remove. 290 assertTrue(actionMenu.open);
352 MockInteractions.tap(item.querySelector('paper-icon-button')); 291 var removeMenuItem = getMenuItem('removeLanguage');
292 assertFalse(removeMenuItem.disabled);
293 MockInteractions.tap(removeMenuItem);
294 assertFalse(actionMenu.open);
353 295
354 assertTrue(actionMenu.open); 296 assertEquals(
355 var removeMenuItem = getMenuItem('removeLanguage'); 297 initialLanguages, languageHelper.getPref(languagesPref).value);
356 assertFalse(removeMenuItem.disabled);
357 MockInteractions.tap(removeMenuItem);
358 assertFalse(actionMenu.open);
359
360 // We should go back down to the original number of enabled languages.
361 return whenNumEnabledLanguagesBecomes(numEnabled);
362 }).then(function() {
363 assertFalse(languageHelper.isLanguageEnabled(newLanguage.code));
364 });
365 }); 298 });
366 299
367 test('move up/down buttons', function() { 300 test('move up/down buttons', function() {
368 // Add several languages. 301 // Add several languages.
369 var numEnabled = languagesPage.languages.enabled.length; 302 for (var language of ['en-CA', 'en-US', 'tk', 'no'])
370 var available = getAvailableLanguages(); 303 languageHelper.enableLanguage(language);
371 for (var i = 0; i < 4; i++)
372 languageHelper.enableLanguage(assert(available[i]).code);
373 304
374 return whenNumEnabledLanguagesBecomes(numEnabled + 4).then(function() { 305 Polymer.dom.flush();
375 Polymer.dom.flush();
376 306
377 var menuButtons = 307 var menuButtons =
378 languagesCollapse.querySelectorAll( 308 languagesCollapse.querySelectorAll(
379 '.list-item paper-icon-button[icon="cr:more-vert"]'); 309 '.list-item paper-icon-button[icon="cr:more-vert"]');
380 310
381 // First language should not have "Move up" or "Move to top". 311 // First language should not have "Move up" or "Move to top".
382 MockInteractions.tap(menuButtons[0]); 312 MockInteractions.tap(menuButtons[0]);
383 assertMenuItemButtonsVisible({ 313 assertMenuItemButtonsVisible({
384 moveToTop: false, moveUp: false, moveDown: true, 314 moveToTop: false, moveUp: false, moveDown: true,
385 }); 315 });
386 actionMenu.close(); 316 actionMenu.close();
387 317
388 // Second language should not have "Move up". 318 // Second language should not have "Move up".
389 MockInteractions.tap(menuButtons[1]); 319 MockInteractions.tap(menuButtons[1]);
390 assertMenuItemButtonsVisible({ 320 assertMenuItemButtonsVisible({
391 moveToTop: true, moveUp: false, moveDown: true, 321 moveToTop: true, moveUp: false, moveDown: true,
392 }); 322 });
393 actionMenu.close(); 323 actionMenu.close();
394 324
395 // Middle languages should have all buttons. 325 // Middle languages should have all buttons.
396 MockInteractions.tap(menuButtons[2]); 326 MockInteractions.tap(menuButtons[2]);
397 assertMenuItemButtonsVisible({ 327 assertMenuItemButtonsVisible({
398 moveToTop: true, moveUp: true, moveDown: true, 328 moveToTop: true, moveUp: true, moveDown: true,
399 }); 329 });
400 actionMenu.close(); 330 actionMenu.close();
401 331
402 // Last language should not have "Move down". 332 // Last language should not have "Move down".
403 MockInteractions.tap(menuButtons[menuButtons.length - 1]); 333 MockInteractions.tap(menuButtons[menuButtons.length - 1]);
404 assertMenuItemButtonsVisible({ 334 assertMenuItemButtonsVisible({
405 moveToTop: true, moveUp: true, moveDown: false, 335 moveToTop: true, moveUp: true, moveDown: false,
406 });
407 actionMenu.close();
408 }); 336 });
337 actionMenu.close();
409 }); 338 });
410 }); 339 });
411 340
412 test('manage input methods', function() { 341 test(TestNames.InputMethods, function() {
413 var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse; 342 var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse;
414 var inputMethodSettingsExist = !!inputMethodsCollapse; 343 var inputMethodSettingsExist = !!inputMethodsCollapse;
415 if (cr.isChromeOS) { 344 if (cr.isChromeOS) {
416 assertTrue(inputMethodSettingsExist); 345 assertTrue(inputMethodSettingsExist);
417 var manageInputMethodsButton = 346 var manageInputMethodsButton =
418 inputMethodsCollapse.querySelector('#manageInputMethods'); 347 inputMethodsCollapse.querySelector('#manageInputMethods');
419 MockInteractions.tap(manageInputMethodsButton); 348 MockInteractions.tap(manageInputMethodsButton);
420 assertTrue(!!languagesPage.$$('settings-manage-input-methods-page')); 349 assertTrue(!!languagesPage.$$('settings-manage-input-methods-page'));
421 } else { 350 } else {
422 assertFalse(inputMethodSettingsExist); 351 assertFalse(inputMethodSettingsExist);
423 } 352 }
424 }); 353 });
425 354
426 test('spellcheck', function() { 355 test(TestNames.Spellcheck, function() {
427 var spellCheckCollapse = languagesPage.$.spellCheckCollapse; 356 var spellCheckCollapse = languagesPage.$.spellCheckCollapse;
428 var spellCheckSettingsExist = !!spellCheckCollapse; 357 var spellCheckSettingsExist = !!spellCheckCollapse;
429 if (cr.isMac) { 358 if (cr.isMac) {
430 assertFalse(spellCheckSettingsExist); 359 assertFalse(spellCheckSettingsExist);
431 } else { 360 } else {
432 assertTrue(spellCheckSettingsExist); 361 assertTrue(spellCheckSettingsExist);
433 362
434 // Ensure no language has spell check enabled. 363 // The row button should have a secondary row specifying which language
435 for (var i = 0; i < languagesPage.languages.enabled.length; i++) { 364 // spell check is enabled for.
436 languagesPage.set( 365 var triggerRow = languagesPage.$.spellCheckSubpageTrigger;
437 'languages.enabled.' + i + '.spellCheckEnabled', false);
438 }
439 366
440 // The row button should have the extra row only if some language has 367 // en-US starts with spellcheck enabled, so the secondary row is
441 // spell check enabled. 368 // populated.
442 var triggerRow = languagesPage.$.spellCheckSubpageTrigger; 369 assertTrue(triggerRow.classList.contains('two-line'));
370 assertLT(
371 0, triggerRow.querySelector('.secondary').textContent.length);
372
373 MockInteractions.tap(triggerRow);
374 Polymer.dom.flush();
375
376 // Disable spellcheck for en-US.
377 var spellcheckLanguageToggle =
378 spellCheckCollapse.querySelector('paper-toggle-button[checked]');
379 assertTrue(!!spellcheckLanguageToggle);
380 MockInteractions.tap(spellcheckLanguageToggle);
381 assertFalse(spellcheckLanguageToggle.checked);
382 assertEquals(
383 0,
384 languageHelper.prefs.spellcheck.dictionaries.value.length);
385
386 // Now the secondary row is empty, so it shouldn't be shown.
443 assertFalse(triggerRow.classList.contains('two-line')); 387 assertFalse(triggerRow.classList.contains('two-line'));
444 assertEquals( 388 assertEquals(
445 0, triggerRow.querySelector('.secondary').textContent.length); 389 0, triggerRow.querySelector('.secondary').textContent.length);
446
447 languagesPage.set(
448 'languages.enabled.0.language.supportsSpellcheck', true);
449 languagesPage.set('languages.enabled.0.spellCheckEnabled', true);
450 assertTrue(triggerRow.classList.contains('two-line'));
451 assertLT(
452 0, triggerRow.querySelector('.secondary').textContent.length);
453 } 390 }
454 }); 391 });
455 }.bind(this)); 392 });
456 393
457 // TODO(michaelpg): Test more aspects of the languages UI. 394 return {TestNames: TestNames};
458
459 // Run all registered tests.
460 mocha.run();
461 }); 395 });
OLDNEW
« no previous file with comments | « chrome/test/data/webui/settings/languages_page_browsertest.js ('k') | chrome/test/data/webui/settings/languages_tests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698