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

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

Issue 2277633003: Use one instance of language settings detail menu for all languages (Closed)
Patch Set: Created 4 years, 3 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 // Runs languages page tests. 43 // Runs languages page tests.
44 TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() { 44 TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
45 suite('languages page', function() { 45 suite('languages page', function() {
46 testing.Test.disableAnimationsAndTransitions(); 46 testing.Test.disableAnimationsAndTransitions();
47 47
48 this.toggleAdvanced(); 48 this.toggleAdvanced();
49 var advanced = this.getPage('advanced'); 49 var advanced = this.getPage('advanced');
50 50
51 var languagesSection; 51 var languagesSection;
52 var languagesPage; 52 var languagesPage;
53 var languagesCollapse;
54 var languageMenu;
53 var languageHelper; 55 var languageHelper;
54 56
55 /** 57 /**
56 * @param {numExpected} Expected number of languages to eventually be 58 * @param {numExpected} Expected number of languages to eventually be
57 * enabled. 59 * enabled.
58 * @return {!Promise} Resolved when the number of enabled languages changes 60 * @return {!Promise} Resolved when the number of enabled languages changes
59 * to match expectations. 61 * to match expectations.
60 */ 62 */
61 function whenNumEnabledLanguagesBecomes(numExpected) { 63 function whenNumEnabledLanguagesBecomes(numExpected) {
62 assert(!!languagesPage); 64 assert(!!languagesPage);
(...skipping 11 matching lines...) Expand all
74 function getAvailableLanguage() { 76 function getAvailableLanguage() {
75 return languagesPage.languages.supported.find(function(language) { 77 return languagesPage.languages.supported.find(function(language) {
76 return !languageHelper.isLanguageEnabled(language.code); 78 return !languageHelper.isLanguageEnabled(language.code);
77 }); 79 });
78 } 80 }
79 81
80 suiteSetup(function() { 82 suiteSetup(function() {
81 advanced.set('pageVisibility.languages', true); 83 advanced.set('pageVisibility.languages', true);
82 Polymer.dom.flush(); 84 Polymer.dom.flush();
83 85
84 languagesSection = this.getSection(advanced, 'languages'); 86 languagesSection = assert(this.getSection(advanced, 'languages'));
85 assertTrue(!!languagesSection); 87 languagesPage = assert(
86 languagesPage = languagesSection.querySelector('settings-languages-page'); 88 languagesSection.querySelector('settings-languages-page'));
87 assertTrue(!!languagesPage); 89 languagesCollapse = languagesPage.$.languagesCollapse;
90 languageMenu = assert(languagesPage.$$('cr-shared-menu'));
88 91
89 languageHelper = languagesPage.languageHelper; 92 languageHelper = languagesPage.languageHelper;
90 return languageHelper.whenReady(); 93 return languageHelper.whenReady();
91 }.bind(this)); 94 }.bind(this));
92 95
93 teardown(function(done) { 96 teardown(function(done) {
94 // Close the section if we're in a sub-page. 97 // Close the section if we're in a sub-page.
95 if (settings.getCurrentRoute().isSubpage()) { 98 if (settings.getCurrentRoute().isSubpage()) {
96 settings.navigateTo(settings.Route.BASIC); 99 settings.navigateTo(settings.Route.BASIC);
97 setTimeout(done); 100 setTimeout(done);
98 } else { 101 } else {
99 done(); 102 done();
100 } 103 }
101 }); 104 });
102 105
103 suite('add languages dialog', function() { 106 suite('add languages dialog', function() {
104 var dialog; 107 var dialog;
105 var dialogItems; 108 var dialogItems;
106 var cancelButton; 109 var cancelButton;
107 var actionButton; 110 var actionButton;
108 111
109 setup(function(done) { 112 setup(function(done) {
110 var addLanguagesButton = languagesPage.$.languagesCollapse 113 var addLanguagesButton =
111 .querySelector('.list-button:last-of-type'); 114 languagesCollapse.querySelector('.list-button:last-of-type');
112 MockInteractions.tap(addLanguagesButton); 115 MockInteractions.tap(addLanguagesButton);
113 116
114 // The page stamps the dialog and registers listeners asynchronously. 117 // The page stamps the dialog and registers listeners asynchronously.
115 Polymer.Base.async(function() { 118 Polymer.Base.async(function() {
116 dialog = languagesPage.$$('settings-add-languages-dialog'); 119 dialog = languagesPage.$$('settings-add-languages-dialog');
117 assertTrue(!!dialog); 120 assertTrue(!!dialog);
118 121
119 actionButton = assert(dialog.$$('.action-button')); 122 actionButton = assert(dialog.$$('.action-button'));
120 cancelButton = assert(dialog.$$('.cancel-button')); 123 cancelButton = assert(dialog.$$('.cancel-button'));
121 124
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 186
184 // The action button should close and remove the dialog, enabling the 187 // The action button should close and remove the dialog, enabling the
185 // checked languages. 188 // checked languages.
186 MockInteractions.tap(actionButton); 189 MockInteractions.tap(actionButton);
187 190
188 // Wait for the languages to be enabled by the browser. 191 // Wait for the languages to be enabled by the browser.
189 return whenNumEnabledLanguagesBecomes(numEnabled + 2); 192 return whenNumEnabledLanguagesBecomes(numEnabled + 2);
190 }); 193 });
191 }); 194 });
192 195
193 test('Should not set UI language', function() { 196 test('should not set UI language', function() {
194 var languagesCollapse = languagesPage.$.languagesCollapse;
195 var languageOptionsDropdownTrigger = languagesCollapse.querySelector( 197 var languageOptionsDropdownTrigger = languagesCollapse.querySelector(
196 'paper-icon-button'); 198 'paper-icon-button');
197 assertTrue(!!languageOptionsDropdownTrigger); 199 assertTrue(!!languageOptionsDropdownTrigger);
198 200
199 // This shouldn't get called. 201 // This shouldn't get called.
200 languageHelper.setUILanguage = assertNotReached; 202 languageHelper.setUILanguage = assertNotReached;
201 203
204 // Tap the menu trigger twice to open and close the menu.
202 MockInteractions.tap(languageOptionsDropdownTrigger); 205 MockInteractions.tap(languageOptionsDropdownTrigger);
206 MockInteractions.tap(languageOptionsDropdownTrigger);
207
208 languageHelper.setUILanguage = languageHelper.__proto__.setUILanguage;
203 }); 209 });
204 210
205 test('remove language', function() { 211 test('remove language', function() {
206 var numEnabled = languagesPage.languages.enabled.length; 212 var numEnabled = languagesPage.languages.enabled.length;
207 213
208 // Enabled a language which we can then disable. 214 // Enabled a language which we can then disable.
209 var newLanguage = getAvailableLanguage(); 215 var newLanguage = getAvailableLanguage();
210 languageHelper.enableLanguage(newLanguage.code); 216 languageHelper.enableLanguage(newLanguage.code);
211 217
212 // Wait for the language to be enabled. 218 // Wait for the language to be enabled.
213 return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() { 219 return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() {
214 // Populate the dom-repeat. 220 // Populate the dom-repeat.
215 Polymer.dom.flush(); 221 Polymer.dom.flush();
216 222
217 // Find the new language item. 223 // Find the new language item.
218 var languagesCollapse = languagesPage.$.languagesCollapse;
219 var items = languagesCollapse.querySelectorAll('.list-item'); 224 var items = languagesCollapse.querySelectorAll('.list-item');
220 var domRepeat = assert( 225 var domRepeat = assert(
221 languagesCollapse.querySelector('template[is="dom-repeat"]')); 226 languagesCollapse.querySelector('template[is="dom-repeat"]'));
222 var item = Array.from(items).find(function(el) { 227 var item = Array.from(items).find(function(el) {
223 return domRepeat.itemForElement(el) && 228 return domRepeat.itemForElement(el) &&
224 domRepeat.itemForElement(el).language == newLanguage; 229 domRepeat.itemForElement(el).language == newLanguage;
225 }); 230 });
226 231
227 // Open the menu and select Remove. 232 // Open the menu and select Remove.
228 MockInteractions.tap(item.querySelector('paper-icon-button')); 233 MockInteractions.tap(item.querySelector('paper-icon-button'));
229 var removeMenuItem = assert(item.querySelector( 234 assertTrue(languageMenu.menuOpen);
230 '.dropdown-content .dropdown-item:last-of-type')); 235 var removeMenuItem = assert(languageMenu.querySelector(
236 '.dropdown-item:last-of-type'));
231 assertFalse(removeMenuItem.disabled); 237 assertFalse(removeMenuItem.disabled);
232 MockInteractions.tap(removeMenuItem); 238 MockInteractions.tap(removeMenuItem);
239 assertFalse(languageMenu.menuOpen);
233 240
234 // We should go back down to the original number of enabled languages. 241 // We should go back down to the original number of enabled languages.
235 return whenNumEnabledLanguagesBecomes(numEnabled).then(function() { 242 return whenNumEnabledLanguagesBecomes(numEnabled).then(function() {
236 assertFalse(languageHelper.isLanguageEnabled(newLanguage.code)); 243 assertFalse(languageHelper.isLanguageEnabled(newLanguage.code));
237 }); 244 });
238 }); 245 });
239 }); 246 });
240 247
241 test('language detail', function() { 248 test('language detail', function() {
242 var languagesCollapse = languagesPage.$.languagesCollapse; 249 var languageOptionsDropdownTrigger = languagesCollapse.querySelector(
243 var languageDetailMenuItem = languagesCollapse.querySelectorAll( 250 'paper-icon-button');
244 '.dropdown-content .dropdown-item')[2]; 251 MockInteractions.tap(languageOptionsDropdownTrigger);
245 assertTrue(!!languageDetailMenuItem); 252 var languageDetailMenuItem = assert(
253 languageMenu.querySelectorAll('.dropdown-item')[2]);
246 MockInteractions.tap(languageDetailMenuItem); 254 MockInteractions.tap(languageDetailMenuItem);
247 255
248 var languageDetailPage = 256 var languageDetailPage =
249 languagesPage.$$('settings-language-detail-page'); 257 languagesPage.$$('settings-language-detail-page');
250 assertTrue(!!languageDetailPage); 258 assertTrue(!!languageDetailPage);
251 assertEquals('en-US', languageDetailPage.detail.language.code); 259 assertEquals('en-US', languageDetailPage.detail.language.code);
252 }); 260 });
253 261
254 test('manage input methods', function() { 262 test('manage input methods', function() {
255 var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse; 263 var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse;
(...skipping 21 matching lines...) Expand all
277 assertTrue(!!languagesPage.$$('settings-edit-dictionary-page')); 285 assertTrue(!!languagesPage.$$('settings-edit-dictionary-page'));
278 } 286 }
279 }); 287 });
280 }.bind(this)); 288 }.bind(this));
281 289
282 // TODO(michaelpg): Test more aspects of the languages UI. 290 // TODO(michaelpg): Test more aspects of the languages UI.
283 291
284 // Run all registered tests. 292 // Run all registered tests.
285 mocha.run(); 293 mocha.run();
286 }); 294 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698