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

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

Issue 2675453002: Language settings: Fix unnecessarily shown move buttons (Closed)
Patch Set: nit Created 3 years, 10 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
« no previous file with comments | « chrome/browser/resources/settings/languages_page/languages_page.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 /** @fileoverview Suite of tests for settings-languages-page. */
6 6
7 /** @const {string} Path to root from chrome/test/data/webui/settings/. */ 7 /** @const {string} Path to root from chrome/test/data/webui/settings/. */
8 var ROOT_PATH = '../../../../../'; 8 var ROOT_PATH = '../../../../../';
9 9
10 // Polymer BrowserTest fixture. 10 // Polymer BrowserTest fixture.
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 return new Promise(function(resolve, reject) { 66 return new Promise(function(resolve, reject) {
67 languagesPage.addEventListener('languages-changed', function changed() { 67 languagesPage.addEventListener('languages-changed', function changed() {
68 if (languagesPage.languages.enabled.length != numExpected) 68 if (languagesPage.languages.enabled.length != numExpected)
69 return; 69 return;
70 resolve(); 70 resolve();
71 languagesPage.removeEventListener('languages-changed', changed); 71 languagesPage.removeEventListener('languages-changed', changed);
72 }); 72 });
73 }); 73 });
74 } 74 }
75 75
76 // Returns a supported language that is not enabled, for testing. 76 // Returns supported languages that are not enabled.
77 function getAvailableLanguage() { 77 function getAvailableLanguages() {
78 return languagesPage.languages.supported.find(function(language) { 78 return languagesPage.languages.supported.filter(function(language) {
79 return !languageHelper.isLanguageEnabled(language.code); 79 return !languageHelper.isLanguageEnabled(language.code);
80 }); 80 });
81 } 81 }
82 82
83 suiteSetup(function() { 83 suiteSetup(function() {
84 page.set('pageVisibility.languages', true); 84 page.set('pageVisibility.languages', true);
85 Polymer.dom.flush(); 85 Polymer.dom.flush();
86 86
87 languagesSection = assert(this.getSection(page, 'languages')); 87 languagesSection = assert(this.getSection(page, 'languages'));
88 languagesPage = assert( 88 languagesPage = assert(
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 MockInteractions.tap(actionButton); 195 MockInteractions.tap(actionButton);
196 196
197 // Wait for the languages to be enabled by the browser. 197 // Wait for the languages to be enabled by the browser.
198 return whenNumEnabledLanguagesBecomes(numEnabled + 2); 198 return whenNumEnabledLanguagesBecomes(numEnabled + 2);
199 }); 199 });
200 }); 200 });
201 201
202 suite('language menu', function() { 202 suite('language menu', function() {
203 var origTranslateEnabled; 203 var origTranslateEnabled;
204 204
205 /**
206 * Finds, asserts and returns the menu item for the given i18n key.
207 * @param {string} i18nKey Name of the i18n string for the item's text.
208 * @return {!HTMLElement} Menu item.
209 */
210 function getMenuItem(i18nKey) {
211 var i18nString = assert(loadTimeData.getString(i18nKey));
212 var menuItems = actionMenu.querySelectorAll('.dropdown-item');
213 var menuItem = Array.from(menuItems).find(
214 item => item.textContent.trim() == i18nString);
215 return assert(menuItem, 'Menu item "' + i18nKey + '" not found');
216 }
217
218 /**
219 * Checks the visibility of each expected menu item button.
220 * param {!Object<boolean>} Dictionary from i18n keys to expected
221 * visibility of those menu items.
222 */
223 function assertMenuItemButtonsVisible(buttonVisibility) {
224 assertTrue(actionMenu.open);
225 for (var buttonKey of Object.keys(buttonVisibility)) {
226 var buttonItem = getMenuItem(buttonKey);
227 assertEquals(!buttonVisibility[buttonKey], buttonItem.hidden,
228 'Menu item "' + buttonKey + '" hidden');
229 }
230 }
231
205 suiteSetup(function() { 232 suiteSetup(function() {
206 // Cache the value of Translate to avoid side effects. 233 // Cache the value of Translate to avoid side effects.
207 origTranslateEnabled = languageHelper.prefs.translate.enabled.value; 234 origTranslateEnabled = languageHelper.prefs.translate.enabled.value;
208 }); 235 });
209 236
210 suiteTeardown(function() { 237 suiteTeardown(function() {
211 var cur = languageHelper.prefs.translate.enabled.value; 238 var cur = languageHelper.prefs.translate.enabled.value;
212 // Restore the value of Translate. 239 // Restore the value of Translate.
213 languageHelper.setPrefValue('translate.enabled', origTranslateEnabled); 240 languageHelper.setPrefValue('translate.enabled', origTranslateEnabled);
214 cur = languageHelper.prefs.translate.enabled.value; 241 cur = languageHelper.prefs.translate.enabled.value;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 languagesPage.set('languages.translateTarget', 'foo'); 285 languagesPage.set('languages.translateTarget', 'foo');
259 languagesPage.set('languages.enabled.1.supportsTranslate', true); 286 languagesPage.set('languages.enabled.1.supportsTranslate', true);
260 287
261 var languageOptionsDropdownTrigger = 288 var languageOptionsDropdownTrigger =
262 languagesCollapse.querySelectorAll('paper-icon-button')[1]; 289 languagesCollapse.querySelectorAll('paper-icon-button')[1];
263 assertTrue(!!languageOptionsDropdownTrigger); 290 assertTrue(!!languageOptionsDropdownTrigger);
264 MockInteractions.tap(languageOptionsDropdownTrigger); 291 MockInteractions.tap(languageOptionsDropdownTrigger);
265 assertTrue(actionMenu.open); 292 assertTrue(actionMenu.open);
266 293
267 // Toggle the translate option. 294 // Toggle the translate option.
268 var translateOption = actionMenu.querySelector('#offerTranslations'); 295 var translateOption = getMenuItem('offerToTranslateInThisLanguage');
269 assertTrue(!!translateOption);
270 assertFalse(translateOption.disabled); 296 assertFalse(translateOption.disabled);
271 MockInteractions.tap(translateOption); 297 MockInteractions.tap(translateOption);
272 298
273 // Menu should stay open briefly. 299 // Menu should stay open briefly.
274 assertTrue(actionMenu.open); 300 assertTrue(actionMenu.open);
275 // Guaranteed to run later than the menu close delay. 301 // Guaranteed to run later than the menu close delay.
276 setTimeout(function() { 302 setTimeout(function() {
277 assertFalse(actionMenu.open); 303 assertFalse(actionMenu.open);
278 done(); 304 done();
279 }, settings.kMenuCloseDelay + 1); 305 }, settings.kMenuCloseDelay + 1);
(...skipping 15 matching lines...) Expand all
295 // The language-specific translation option should be hidden. 321 // The language-specific translation option should be hidden.
296 var translateOption = actionMenu.querySelector('#offerTranslations'); 322 var translateOption = actionMenu.querySelector('#offerTranslations');
297 assertTrue(!!translateOption); 323 assertTrue(!!translateOption);
298 assertTrue(translateOption.hidden); 324 assertTrue(translateOption.hidden);
299 }); 325 });
300 326
301 test('remove language', function() { 327 test('remove language', function() {
302 var numEnabled = languagesPage.languages.enabled.length; 328 var numEnabled = languagesPage.languages.enabled.length;
303 329
304 // Enabled a language which we can then disable. 330 // Enabled a language which we can then disable.
305 var newLanguage = getAvailableLanguage(); 331 var newLanguage = assert(getAvailableLanguages()[0]);
306 languageHelper.enableLanguage(newLanguage.code); 332 languageHelper.enableLanguage(newLanguage.code);
307 333
308 // Wait for the language to be enabled. 334 // Wait for the language to be enabled.
309 return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() { 335 return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() {
310 // Populate the dom-repeat. 336 // Populate the dom-repeat.
311 Polymer.dom.flush(); 337 Polymer.dom.flush();
312 338
313 // Find the new language item. 339 // Find the new language item.
314 var items = languagesCollapse.querySelectorAll('.list-item'); 340 var items = languagesCollapse.querySelectorAll('.list-item');
315 var domRepeat = assert( 341 var domRepeat = assert(
316 languagesCollapse.querySelector('template[is="dom-repeat"]')); 342 languagesCollapse.querySelector('template[is="dom-repeat"]'));
317 var item = Array.from(items).find(function(el) { 343 var item = Array.from(items).find(function(el) {
318 return domRepeat.itemForElement(el) && 344 return domRepeat.itemForElement(el) &&
319 domRepeat.itemForElement(el).language == newLanguage; 345 domRepeat.itemForElement(el).language == newLanguage;
320 }); 346 });
321 347
322 // Open the menu and select Remove. 348 // Open the menu and select Remove.
323 MockInteractions.tap(item.querySelector('paper-icon-button')); 349 MockInteractions.tap(item.querySelector('paper-icon-button'));
324 350
325 assertTrue(actionMenu.open); 351 assertTrue(actionMenu.open);
326 var removeMenuItem = assert(actionMenu.querySelector( 352 var removeMenuItem = getMenuItem('removeLanguage');
327 '.dropdown-item:last-child'));
328 assertFalse(removeMenuItem.disabled); 353 assertFalse(removeMenuItem.disabled);
329 MockInteractions.tap(removeMenuItem); 354 MockInteractions.tap(removeMenuItem);
330 assertFalse(actionMenu.open); 355 assertFalse(actionMenu.open);
331 356
332 // We should go back down to the original number of enabled languages. 357 // We should go back down to the original number of enabled languages.
333 return whenNumEnabledLanguagesBecomes(numEnabled); 358 return whenNumEnabledLanguagesBecomes(numEnabled);
334 }).then(function() { 359 }).then(function() {
335 assertFalse(languageHelper.isLanguageEnabled(newLanguage.code)); 360 assertFalse(languageHelper.isLanguageEnabled(newLanguage.code));
336 }); 361 });
337 }); 362 });
363
364 test('move up/down buttons', function() {
365 // Add several languages.
366 var numEnabled = languagesPage.languages.enabled.length;
367 var available = getAvailableLanguages();
368 for (var i = 0; i < 4; i++)
369 languageHelper.enableLanguage(assert(available[i]).code);
370
371 return whenNumEnabledLanguagesBecomes(numEnabled + 4).then(function() {
372 Polymer.dom.flush();
373
374 var menuButtons =
375 languagesCollapse.querySelectorAll(
376 '.list-item paper-icon-button[icon="cr:more-vert"]');
377
378 // First language should not have "Move up" or "Move to top".
379 MockInteractions.tap(menuButtons[0]);
380 assertMenuItemButtonsVisible({
381 moveToTop: false, moveUp: false, moveDown: true,
382 });
383 actionMenu.close();
384
385 // Second language should not have "Move up".
386 MockInteractions.tap(menuButtons[1]);
387 assertMenuItemButtonsVisible({
388 moveToTop: true, moveUp: false, moveDown: true,
389 });
390 actionMenu.close();
391
392 // Middle languages should have all buttons.
393 MockInteractions.tap(menuButtons[2]);
394 assertMenuItemButtonsVisible({
395 moveToTop: true, moveUp: true, moveDown: true,
396 });
397 actionMenu.close();
398
399 // Last language should not have "Move down".
400 MockInteractions.tap(menuButtons[menuButtons.length - 1]);
401 assertMenuItemButtonsVisible({
402 moveToTop: true, moveUp: true, moveDown: false,
403 });
404 actionMenu.close();
405 });
406 });
338 }); 407 });
339 408
340 test('manage input methods', function() { 409 test('manage input methods', function() {
341 var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse; 410 var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse;
342 var inputMethodSettingsExist = !!inputMethodsCollapse; 411 var inputMethodSettingsExist = !!inputMethodsCollapse;
343 if (cr.isChromeOS) { 412 if (cr.isChromeOS) {
344 assertTrue(inputMethodSettingsExist); 413 assertTrue(inputMethodSettingsExist);
345 var manageInputMethodsButton = 414 var manageInputMethodsButton =
346 inputMethodsCollapse.querySelector('.list-button:last-of-type'); 415 inputMethodsCollapse.querySelector('.list-button:last-of-type');
347 MockInteractions.tap(manageInputMethodsButton); 416 MockInteractions.tap(manageInputMethodsButton);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 assertTrue(!!languagesPage.$$('settings-edit-dictionary-page')); 453 assertTrue(!!languagesPage.$$('settings-edit-dictionary-page'));
385 } 454 }
386 }); 455 });
387 }.bind(this)); 456 }.bind(this));
388 457
389 // TODO(michaelpg): Test more aspects of the languages UI. 458 // TODO(michaelpg): Test more aspects of the languages UI.
390 459
391 // Run all registered tests. 460 // Run all registered tests.
392 mocha.run(); 461 mocha.run();
393 }); 462 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/settings/languages_page/languages_page.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698