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

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

Issue 2265253002: Replace Manage Languages with dialog and dropdown item (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@EnableDisableLanguage
Patch Set: indent Created 4 years, 4 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/ui/webui/settings/md_settings_localized_strings_provider.cc ('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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 languageHelper; 53 var languageHelper;
54
55 /**
56 * @param {numExpected} Expected number of languages to eventually be
57 * enabled.
58 * @return {!Promise} Resolved when the number of enabled languages changes
59 * to match expectations.
60 */
61 function whenNumEnabledLanguagesBecomes(numExpected) {
62 assert(!!languagesPage);
63 return new Promise(function(resolve, reject) {
64 languagesPage.addEventListener('languages-changed', function changed() {
65 if (languagesPage.languages.enabled.length != numExpected)
66 return;
67 resolve();
68 languagesPage.removeEventListener('languages-changed', changed);
69 });
70 });
71 }
72
73 // Returns a supported language that is not enabled, for testing.
74 function getAvailableLanguage() {
75 return languagesPage.languages.supported.find(function(language) {
76 return !languageHelper.isLanguageEnabled(language.code);
77 });
78 }
79
54 suiteSetup(function() { 80 suiteSetup(function() {
55 advanced.set('pageVisibility.languages', true); 81 advanced.set('pageVisibility.languages', true);
56 Polymer.dom.flush(); 82 Polymer.dom.flush();
57 83
58 languagesSection = this.getSection(advanced, 'languages'); 84 languagesSection = this.getSection(advanced, 'languages');
59 assertTrue(!!languagesSection); 85 assertTrue(!!languagesSection);
60 languagesPage = languagesSection.querySelector('settings-languages-page'); 86 languagesPage = languagesSection.querySelector('settings-languages-page');
61 assertTrue(!!languagesPage); 87 assertTrue(!!languagesPage);
62 88
63 languageHelper = languagesPage.languageHelper; 89 languageHelper = languagesPage.languageHelper;
64 return languageHelper.whenReady(); 90 return languageHelper.whenReady();
65 }.bind(this)); 91 }.bind(this));
66 92
67 teardown(function(done) { 93 teardown(function(done) {
68 // Close the section if we're in a sub-page. 94 // Close the section if we're in a sub-page.
69 if (settings.getCurrentRoute().isSubpage()) { 95 if (settings.getCurrentRoute().isSubpage()) {
70 settings.navigateTo(settings.Route.ADVANCED); 96 settings.navigateTo(settings.Route.BASIC);
71 setTimeout(done); 97 setTimeout(done);
72 } else { 98 } else {
73 done(); 99 done();
74 } 100 }
75 }); 101 });
76 102
77 test('manage languages', function() { 103 suite('add languages dialog', function() {
78 var manageLanguagesButton = 104 var dialog;
79 languagesPage.$.languagesCollapse.querySelector( 105 var dialogItems;
80 '.list-button:last-of-type'); 106 var cancelButton;
81 MockInteractions.tap(manageLanguagesButton); 107 var actionButton;
82 assertTrue(!!languagesPage.$$('settings-manage-languages-page')); 108
109 setup(function(done) {
110 var addLanguagesButton = languagesPage.$.languagesCollapse
111 .querySelector('.list-button:last-of-type');
112 MockInteractions.tap(addLanguagesButton);
113
114 // The page stamps the dialog and registers listeners asynchronously.
115 Polymer.Base.async(function() {
116 dialog = languagesPage.$$('settings-add-languages-dialog');
117 assertTrue(!!dialog);
118
119 actionButton = assert(dialog.$$('.action-button'));
120 cancelButton = assert(dialog.$$('.cancel-button'));
121
122 // The fixed-height dialog's iron-list should stamp far fewer than
123 // 50 items.
124 dialogItems =
125 dialog.$.dialog.querySelectorAll('.list-item:not([hidden])');
126 assertGT(dialogItems.length, 1);
127 assertLT(dialogItems.length, 50);
128
129 // No languages have been checked, so the action button is disabled.
130 assertTrue(actionButton.disabled);
131 assertFalse(cancelButton.disabled);
132
133 done();
134 });
135 });
136
137 // After every test, check that the dialog is removed from the DOM.
138 teardown(function() {
139 Polymer.dom.flush();
140 assertEquals(null, languagesPage.$$('settings-add-languages-dialog'));
141 });
142
143 test('cancel', function() {
144 // Canceling the dialog should close and remove it.
145 MockInteractions.tap(cancelButton);
146 });
147
148 test('add languages and cancel', function(done) {
149 var numEnabled = languagesPage.languages.enabled.length;
150
151 // Check some languages.
152 MockInteractions.tap(dialogItems[0]);
153 MockInteractions.tap(dialogItems[1]);
154
155 // Canceling the dialog should close and remove it without enabling
156 // the checked languages. A small timeout lets us check this.
157 MockInteractions.tap(cancelButton);
158 setTimeout(function() {
159 // Number of enabled languages should be the same.
160 assertEquals(numEnabled, languagesPage.languages.enabled.length);
161 done();
162 }, 100);
163 });
164
165 test('add languages and confirm', function() {
166 var numEnabled = languagesPage.languages.enabled.length;
167
168 // No languages have been checked, so the action button is inert.
169 MockInteractions.tap(actionButton);
170 Polymer.dom.flush();
171 assertEquals(dialog, languagesPage.$$('settings-add-languages-dialog'));
172
173 // Check and uncheck one language.
174 MockInteractions.tap(dialogItems[0]);
175 assertFalse(actionButton.disabled);
176 MockInteractions.tap(dialogItems[0]);
177 assertTrue(actionButton.disabled);
178
179 // Check multiple languages.
180 MockInteractions.tap(dialogItems[0]);
181 MockInteractions.tap(dialogItems[1]);
182 assertFalse(actionButton.disabled);
183
184 // The action button should close and remove the dialog, enabling the
185 // checked languages.
186 MockInteractions.tap(actionButton);
187
188 // Wait for the languages to be enabled by the browser.
189 return whenNumEnabledLanguagesBecomes(numEnabled + 2);
190 });
83 }); 191 });
84 192
85 test('Should not set UI language', function() { 193 test('Should not set UI language', function() {
86 var languagesCollapse = languagesPage.$.languagesCollapse; 194 var languagesCollapse = languagesPage.$.languagesCollapse;
87 var languageOptionsDropdownTrigger = languagesCollapse.querySelector( 195 var languageOptionsDropdownTrigger = languagesCollapse.querySelector(
88 'paper-icon-button'); 196 'paper-icon-button');
89 assertTrue(!!languageOptionsDropdownTrigger); 197 assertTrue(!!languageOptionsDropdownTrigger);
90 198
91 // This shouldn't get called. 199 // This shouldn't get called.
92 languageHelper.setUILanguage = assertNotReached; 200 languageHelper.setUILanguage = assertNotReached;
93 201
94 MockInteractions.tap(languageOptionsDropdownTrigger); 202 MockInteractions.tap(languageOptionsDropdownTrigger);
95 }); 203 });
96 204
205 test('remove language', function() {
206 var numEnabled = languagesPage.languages.enabled.length;
207
208 // Enabled a language which we can then disable.
209 var newLanguage = getAvailableLanguage();
210 languageHelper.enableLanguage(newLanguage.code);
211
212 // Wait for the language to be enabled.
213 return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() {
214 // Populate the dom-repeat.
215 Polymer.dom.flush();
216
217 // Find the new language item.
218 var languagesCollapse = languagesPage.$.languagesCollapse;
219 var items = languagesCollapse.querySelectorAll('.list-item');
220 var domRepeat = assert(
221 languagesCollapse.querySelector('template[is="dom-repeat"]'));
222 var item = Array.from(items).find(function(el) {
223 return domRepeat.itemForElement(el) &&
224 domRepeat.itemForElement(el).language == newLanguage;
225 });
226
227 // Open the menu and select Remove.
228 MockInteractions.tap(item.querySelector('paper-icon-button'));
229 var removeMenuItem = assert(item.querySelector(
230 '.dropdown-content .dropdown-item:last-of-type'));
231 assertFalse(removeMenuItem.disabled);
232 MockInteractions.tap(removeMenuItem);
233
234 // We should go back down to the original number of enabled languages.
235 return whenNumEnabledLanguagesBecomes(numEnabled).then(function() {
236 assertFalse(languageHelper.isLanguageEnabled(newLanguage.code));
237 });
238 });
239 });
240
97 test('language detail', function() { 241 test('language detail', function() {
98 var languagesCollapse = languagesPage.$.languagesCollapse; 242 var languagesCollapse = languagesPage.$.languagesCollapse;
99 var languageDetailMenuItem = languagesCollapse.querySelectorAll( 243 var languageDetailMenuItem = languagesCollapse.querySelectorAll(
100 '.dropdown-content .dropdown-item')[2]; 244 '.dropdown-content .dropdown-item')[2];
101 assertTrue(!!languageDetailMenuItem); 245 assertTrue(!!languageDetailMenuItem);
102 MockInteractions.tap(languageDetailMenuItem); 246 MockInteractions.tap(languageDetailMenuItem);
103 247
104 var languageDetailPage = 248 var languageDetailPage =
105 languagesPage.$$('settings-language-detail-page'); 249 languagesPage.$$('settings-language-detail-page');
106 assertTrue(!!languageDetailPage); 250 assertTrue(!!languageDetailPage);
(...skipping 26 matching lines...) Expand all
133 assertTrue(!!languagesPage.$$('settings-edit-dictionary-page')); 277 assertTrue(!!languagesPage.$$('settings-edit-dictionary-page'));
134 } 278 }
135 }); 279 });
136 }.bind(this)); 280 }.bind(this));
137 281
138 // TODO(michaelpg): Test more aspects of the languages UI. 282 // TODO(michaelpg): Test more aspects of the languages UI.
139 283
140 // Run all registered tests. 284 // Run all registered tests.
141 mocha.run(); 285 mocha.run();
142 }); 286 });
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/settings/md_settings_localized_strings_provider.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698