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

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: prettier test 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
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 26 matching lines...) Expand all
241 languagesPage.set('languages.translateTarget', 'foo'); 268 languagesPage.set('languages.translateTarget', 'foo');
242 languagesPage.set('languages.enabled.1.supportsTranslate', true); 269 languagesPage.set('languages.enabled.1.supportsTranslate', true);
243 270
244 var languageOptionsDropdownTrigger = 271 var languageOptionsDropdownTrigger =
245 languagesCollapse.querySelectorAll('paper-icon-button')[1]; 272 languagesCollapse.querySelectorAll('paper-icon-button')[1];
246 assertTrue(!!languageOptionsDropdownTrigger); 273 assertTrue(!!languageOptionsDropdownTrigger);
247 MockInteractions.tap(languageOptionsDropdownTrigger); 274 MockInteractions.tap(languageOptionsDropdownTrigger);
248 assertTrue(actionMenu.open); 275 assertTrue(actionMenu.open);
249 276
250 // Toggle the translate option. 277 // Toggle the translate option.
251 var translateOption = actionMenu.querySelector('#offerTranslations'); 278 var translateOption = getMenuItem('offerToTranslateInThisLanguage');
252 assertTrue(!!translateOption);
253 assertFalse(translateOption.disabled); 279 assertFalse(translateOption.disabled);
254 MockInteractions.tap(translateOption); 280 MockInteractions.tap(translateOption);
255 281
256 // Menu should stay open briefly. 282 // Menu should stay open briefly.
257 assertTrue(actionMenu.open); 283 assertTrue(actionMenu.open);
258 // Guaranteed to run later than the menu close delay. 284 // Guaranteed to run later than the menu close delay.
259 setTimeout(function() { 285 setTimeout(function() {
260 assertFalse(actionMenu.open); 286 assertFalse(actionMenu.open);
261 done(); 287 done();
262 }, settings.kMenuCloseDelay + 1); 288 }, settings.kMenuCloseDelay + 1);
263 }); 289 });
264 290
265 test('remove language', function() { 291 test('remove language', function() {
266 var numEnabled = languagesPage.languages.enabled.length; 292 var numEnabled = languagesPage.languages.enabled.length;
267 293
268 // Enabled a language which we can then disable. 294 // Enabled a language which we can then disable.
269 var newLanguage = getAvailableLanguage(); 295 var newLanguage = assert(getAvailableLanguages()[0]);
270 languageHelper.enableLanguage(newLanguage.code); 296 languageHelper.enableLanguage(newLanguage.code);
271 297
272 // Wait for the language to be enabled. 298 // Wait for the language to be enabled.
273 return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() { 299 return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() {
274 // Populate the dom-repeat. 300 // Populate the dom-repeat.
275 Polymer.dom.flush(); 301 Polymer.dom.flush();
276 302
277 // Find the new language item. 303 // Find the new language item.
278 var items = languagesCollapse.querySelectorAll('.list-item'); 304 var items = languagesCollapse.querySelectorAll('.list-item');
279 var domRepeat = assert( 305 var domRepeat = assert(
280 languagesCollapse.querySelector('template[is="dom-repeat"]')); 306 languagesCollapse.querySelector('template[is="dom-repeat"]'));
281 var item = Array.from(items).find(function(el) { 307 var item = Array.from(items).find(function(el) {
282 return domRepeat.itemForElement(el) && 308 return domRepeat.itemForElement(el) &&
283 domRepeat.itemForElement(el).language == newLanguage; 309 domRepeat.itemForElement(el).language == newLanguage;
284 }); 310 });
285 311
286 // Open the menu and select Remove. 312 // Open the menu and select Remove.
287 MockInteractions.tap(item.querySelector('paper-icon-button')); 313 MockInteractions.tap(item.querySelector('paper-icon-button'));
288 314
289 assertTrue(actionMenu.open); 315 assertTrue(actionMenu.open);
290 var removeMenuItem = assert(actionMenu.querySelector( 316 var removeMenuItem = getMenuItem('removeLanguage');
291 '.dropdown-item:last-child'));
292 assertFalse(removeMenuItem.disabled); 317 assertFalse(removeMenuItem.disabled);
293 MockInteractions.tap(removeMenuItem); 318 MockInteractions.tap(removeMenuItem);
294 assertFalse(actionMenu.open); 319 assertFalse(actionMenu.open);
295 320
296 // We should go back down to the original number of enabled languages. 321 // We should go back down to the original number of enabled languages.
297 return whenNumEnabledLanguagesBecomes(numEnabled); 322 return whenNumEnabledLanguagesBecomes(numEnabled);
298 }).then(function() { 323 }).then(function() {
299 assertFalse(languageHelper.isLanguageEnabled(newLanguage.code)); 324 assertFalse(languageHelper.isLanguageEnabled(newLanguage.code));
300 }); 325 });
301 }); 326 });
327
328 test('move up/down buttons', function() {
329 // Add several languages.
330 var numEnabled = languagesPage.languages.enabled.length;
331 var available = getAvailableLanguages();
332 for (var i = 0; i < 4; i++)
333 languageHelper.enableLanguage(assert(available[i]).code);
334
335 return whenNumEnabledLanguagesBecomes(numEnabled + 4).then(function() {
336 Polymer.dom.flush();
337
338 var menuButtons =
339 languagesCollapse.querySelectorAll(
340 '.list-item paper-icon-button[icon="cr:more-vert"]');
341
342 // First language should not have "Move up" or "Move to top".
343 MockInteractions.tap(menuButtons[0]);
344 assertMenuItemButtonsVisible({
345 moveToTop: false, moveUp: false, moveDown: true,
346 });
347 actionMenu.close();
348
349 // Second language should not have "Move up".
350 MockInteractions.tap(menuButtons[1]);
351 assertMenuItemButtonsVisible({
352 moveToTop: true, moveUp: false, moveDown: true,
353 });
354 actionMenu.close();
355
356 // Middle languages should have all buttons.
357 MockInteractions.tap(menuButtons[2]);
358 assertMenuItemButtonsVisible({
359 moveToTop: true, moveUp: true, moveDown: true,
360 });
361 actionMenu.close();
362
363 // Last language should not have "Move down".
364 MockInteractions.tap(menuButtons[menuButtons.length - 1]);
365 assertMenuItemButtonsVisible({
366 moveToTop: true, moveUp: true, moveDown: false,
367 });
368 actionMenu.close();
369 });
370 });
302 }); 371 });
303 372
304 test('manage input methods', function() { 373 test('manage input methods', function() {
305 var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse; 374 var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse;
306 var inputMethodSettingsExist = !!inputMethodsCollapse; 375 var inputMethodSettingsExist = !!inputMethodsCollapse;
307 if (cr.isChromeOS) { 376 if (cr.isChromeOS) {
308 assertTrue(inputMethodSettingsExist); 377 assertTrue(inputMethodSettingsExist);
309 var manageInputMethodsButton = 378 var manageInputMethodsButton =
310 inputMethodsCollapse.querySelector('.list-button:last-of-type'); 379 inputMethodsCollapse.querySelector('.list-button:last-of-type');
311 MockInteractions.tap(manageInputMethodsButton); 380 MockInteractions.tap(manageInputMethodsButton);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 assertTrue(!!languagesPage.$$('settings-edit-dictionary-page')); 417 assertTrue(!!languagesPage.$$('settings-edit-dictionary-page'));
349 } 418 }
350 }); 419 });
351 }.bind(this)); 420 }.bind(this));
352 421
353 // TODO(michaelpg): Test more aspects of the languages UI. 422 // TODO(michaelpg): Test more aspects of the languages UI.
354 423
355 // Run all registered tests. 424 // Run all registered tests.
356 mocha.run(); 425 mocha.run();
357 }); 426 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698