| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 }); |
| OLD | NEW |