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

Unified Diff: chrome/test/data/webui/settings/languages_page_tests.js

Issue 2837703002: Change SettingsLanguagesPageBrowserTest to CrSettingsLanguagesPageTest (Closed)
Patch Set: rebase Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/webui/settings/languages_page_tests.js
diff --git a/chrome/test/data/webui/settings/languages_page_browsertest.js b/chrome/test/data/webui/settings/languages_page_tests.js
similarity index 46%
rename from chrome/test/data/webui/settings/languages_page_browsertest.js
rename to chrome/test/data/webui/settings/languages_page_tests.js
index ae7dfab6a551a5c136e3f01768bb1afa2edb1b84..8bccfad534280762cb873ba0299faaa60d106d9c 100644
--- a/chrome/test/data/webui/settings/languages_page_browsertest.js
+++ b/chrome/test/data/webui/settings/languages_page_tests.js
@@ -1,117 +1,78 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
+// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-/** @fileoverview Suite of tests for settings-languages-page. */
-
-/** @const {string} Path to root from chrome/test/data/webui/settings/. */
-var ROOT_PATH = '../../../../../';
-
-// Polymer BrowserTest fixture.
-GEN_INCLUDE(
- [ROOT_PATH + 'chrome/test/data/webui/polymer_browser_test_base.js']);
-// SettingsPageBrowserTest fixture.
-GEN_INCLUDE([ROOT_PATH +
- 'chrome/test/data/webui/settings/settings_page_browsertest.js']);
-
-/**
- * Test class for settings-languages-page UI.
- * @constructor
- * @extends {SettingsPageBrowserTest}
- */
-function SettingsLanguagesPageBrowserTest() {}
-
-SettingsLanguagesPageBrowserTest.prototype = {
- __proto__: SettingsPageBrowserTest.prototype,
-
- /** @override */
- preLoad: function() {
- SettingsPageBrowserTest.prototype.preLoad.call(this);
- settingsHidePagesByDefaultForTest = true;
- },
-};
-
-// Flaky on Windows, Mac and Linux. See https://crbug.com/641400.
-//
-// May time out on debug builders and memory bots because the Settings page can
-// take several seconds to load in a Release build and several times that in a
-// Debug build. See https://crbug.com/558434.
-//
-// Disabling this test in general.
-GEN('#define MAYBE_LanguagesPage DISABLED_LanguagesPage');
-
-// Runs languages page tests.
-TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
- var self = this;
-
- suiteSetup(function() {
- self.toggleAdvanced();
- });
+cr.define('languages_page_tests', function() {
+ /** @enum {string} */
+ const TestNames = {
+ AddLanguagesDialog: 'add languages dialog',
+ LanguageMenu: 'language menu',
+ InputMethods: 'input methods',
+ Spellcheck: 'spellcheck',
+ };
suite('languages page', function() {
- testing.Test.disableAnimationsAndTransitions();
-
- var languagesSection;
- var languagesPage;
- var languagesCollapse;
- var languageHelper;
- var actionMenu;
-
- /**
- * @param {numExpected} Expected number of languages to eventually be
- * enabled.
- * @return {!Promise} Resolved when the number of enabled languages changes
- * to match expectations.
- */
- function whenNumEnabledLanguagesBecomes(numExpected) {
- assert(!!languagesPage);
- return new Promise(function(resolve, reject) {
- languagesPage.addEventListener('languages-changed', function changed() {
- if (languagesPage.languages.enabled.length != numExpected)
- return;
- resolve();
- languagesPage.removeEventListener('languages-changed', changed);
- });
- });
- }
-
- // Returns supported languages that are not enabled.
- function getAvailableLanguages() {
- return languagesPage.languages.supported.filter(function(language) {
- return !languageHelper.isLanguageEnabled(language.code);
- });
- }
+ /** @type {?LanguageHelper} */
+ var languageHelper = null;
+ /** @type {?SettingsLanguagesPageElement} */
+ var languagesPage = null;
+ /** @type {?IronCollapseElement} */
+ var languagesCollapse = null;
+ /** @type {?CrActionMenuElement} */
+ var actionMenu = null;
+ /** @type {?settings.LanguagesBrowserProxy} */
+ var browserProxy = null;
+
+ // Enabled language pref name for the platform.
+ const languagesPref =
+ cr.isChromeOS ? 'settings.language.preferred_languages'
+ : 'intl.accept_languages';
+
+ // Initial value of enabled languages pref used in tests.
+ const initialLanguages = 'en-US,sw';
suiteSetup(function() {
- var page = self.basicPage;
- page.set('pageVisibility.languages', true);
- Polymer.dom.flush();
-
- languagesSection = assert(this.getSection(page, 'languages'));
- languagesPage = assert(
- languagesSection.querySelector('settings-languages-page'));
- languagesCollapse = languagesPage.$.languagesCollapse;
- languagesCollapse.opened = true;
- actionMenu = languagesPage.$.menu.get();
-
- languageHelper = languagesPage.languageHelper;
- return languageHelper.whenReady();
- }.bind(this));
-
- teardown(function(done) {
- if (actionMenu.open)
- actionMenu.close();
+ testing.Test.disableAnimationsAndTransitions();
+ PolymerTest.clearBody();
+ CrSettingsPrefs.deferInitialization = true;
+ });
- // Close the section if we're in a sub-page.
- if (settings.getCurrentRoute().isSubpage()) {
- settings.navigateTo(settings.Route.BASIC);
- setTimeout(done);
- } else {
- done();
- }
+ setup(function() {
+ var settingsPrefs = document.createElement('settings-prefs');
+ var settingsPrivate =
+ new settings.FakeSettingsPrivate(settings.getFakeLanguagePrefs());
+ settingsPrefs.initialize(settingsPrivate);
+ document.body.appendChild(settingsPrefs);
+ return CrSettingsPrefs.initialized.then(function() {
+ // Set up test browser proxy.
+ browserProxy = new settings.TestLanguagesBrowserProxy();
+ settings.LanguagesBrowserProxyImpl.instance_ = browserProxy;
+
+ // Set up fake languageSettingsPrivate API.
+ var languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate();
+ languageSettingsPrivate.setSettingsPrefs(settingsPrefs);
+
+ languagesPage = document.createElement('settings-languages-page');
+
+ // Prefs would normally be data-bound to settings-languages-page.
+ languagesPage.prefs = settingsPrefs.prefs;
+ test_util.fakeDataBind(settingsPrefs, languagesPage, 'prefs');
+
+ document.body.appendChild(languagesPage);
+ languagesCollapse = languagesPage.$.languagesCollapse;
+ languagesCollapse.opened = true;
+ actionMenu = languagesPage.$.menu.get();
+
+ languageHelper = languagesPage.languageHelper;
+ return languageHelper.whenReady();
+ });
+ });
+
+ teardown(function() {
+ PolymerTest.clearBody();
});
- suite('add languages dialog', function() {
+ suite(TestNames.AddLanguagesDialog, function() {
var dialog;
var dialogItems;
var cancelButton;
@@ -158,25 +119,21 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
});
test('add languages and cancel', function(done) {
- var numEnabled = languagesPage.languages.enabled.length;
-
// Check some languages.
- MockInteractions.tap(dialogItems[0]);
- MockInteractions.tap(dialogItems[1]);
+ MockInteractions.tap(dialogItems[1]); // en-CA.
+ MockInteractions.tap(dialogItems[2]); // tk.
// Canceling the dialog should close and remove it without enabling
// the checked languages. A small timeout lets us check this.
MockInteractions.tap(cancelButton);
setTimeout(function() {
- // Number of enabled languages should be the same.
- assertEquals(numEnabled, languagesPage.languages.enabled.length);
+ assertEquals(initialLanguages,
+ languageHelper.getPref(languagesPref).value);
done();
}, 100);
});
test('add languages and confirm', function() {
- var numEnabled = languagesPage.languages.enabled.length;
-
// No languages have been checked, so the action button is inert.
MockInteractions.tap(actionButton);
Polymer.dom.flush();
@@ -189,23 +146,22 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
assertTrue(actionButton.disabled);
// Check multiple languages.
- MockInteractions.tap(dialogItems[0]);
- MockInteractions.tap(dialogItems[1]);
+ MockInteractions.tap(dialogItems[0]); // en.
+ MockInteractions.tap(dialogItems[2]); // tk.
assertFalse(actionButton.disabled);
// The action button should close and remove the dialog, enabling the
// checked languages.
MockInteractions.tap(actionButton);
- // Wait for the languages to be enabled by the browser.
- return whenNumEnabledLanguagesBecomes(numEnabled + 2);
+ assertEquals(
+ initialLanguages + ',en,tk',
+ languageHelper.getPref(languagesPref).value);
});
});
- suite('language menu', function() {
- var origTranslateEnabled;
-
- /**
+ suite(TestNames.LanguageMenu, function() {
+ /*
* Finds, asserts and returns the menu item for the given i18n key.
* @param {string} i18nKey Name of the i18n string for the item's text.
* @return {!HTMLElement} Menu item.
@@ -218,7 +174,7 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
return assert(menuItem, 'Menu item "' + i18nKey + '" not found');
}
- /**
+ /*
* Checks the visibility of each expected menu item button.
* param {!Object<boolean>} Dictionary from i18n keys to expected
* visibility of those menu items.
@@ -232,18 +188,6 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
}
}
- suiteSetup(function() {
- // Cache the value of Translate to avoid side effects.
- origTranslateEnabled = languageHelper.prefs.translate.enabled.value;
- });
-
- suiteTeardown(function() {
- var cur = languageHelper.prefs.translate.enabled.value;
- // Restore the value of Translate.
- languageHelper.setPrefValue('translate.enabled', origTranslateEnabled);
- cur = languageHelper.prefs.translate.enabled.value;
- });
-
test('structure', function() {
var languageOptionsDropdownTrigger = languagesCollapse.querySelector(
'paper-icon-button');
@@ -251,9 +195,6 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
MockInteractions.tap(languageOptionsDropdownTrigger);
assertTrue(actionMenu.open);
- // Enable Translate so the menu always shows the Translate checkbox.
- languageHelper.setPrefValue('translate.enabled', true);
-
var separator = actionMenu.querySelector('hr');
assertEquals(1, separator.offsetHeight);
@@ -266,37 +207,36 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
});
test('test translate.enable toggle', function() {
- languageHelper.setPrefValue('translate.enabled', true);
- var toggle = languagesPage.$.offerTranslateOtherLangs.root
- .querySelectorAll('paper-toggle-button')[0];
- assertTrue(!!toggle);
+ var settingsToggle = languagesPage.$.offerTranslateOtherLangs;
+ assertTrue(!!settingsToggle);
+ var paperToggle = settingsToggle.$$('paper-toggle-button');
+ assertTrue(!!paperToggle);
- // Clicking on toggle switch it to false.
- MockInteractions.tap(toggle);
+ // Clicking on the toggle switches it to false.
+ MockInteractions.tap(paperToggle);
var newToggleValue = languageHelper.prefs.translate.enabled.value;
assertFalse(newToggleValue);
- // Clicking on toggle switch it to true again.
- MockInteractions.tap(toggle);
+ // Clicking on the toggle switches it to true again.
+ MockInteractions.tap(paperToggle);
newToggleValue = languageHelper.prefs.translate.enabled.value;
assertTrue(newToggleValue);
});
test('toggle translate for a specific language', function(done) {
- // Enable Translate so the menu always shows the Translate checkbox.
- languageHelper.setPrefValue('translate.enabled', true);
- languagesPage.set('languages.translateTarget', 'foo');
- languagesPage.set('languages.enabled.1.supportsTranslate', true);
-
+ // Open options for 'sw'.
var languageOptionsDropdownTrigger =
languagesCollapse.querySelectorAll('paper-icon-button')[1];
assertTrue(!!languageOptionsDropdownTrigger);
MockInteractions.tap(languageOptionsDropdownTrigger);
assertTrue(actionMenu.open);
- // Toggle the translate option.
+ // 'sw' supports translate to the target language ('en').
var translateOption = getMenuItem('offerToTranslateInThisLanguage');
assertFalse(translateOption.disabled);
+ assertTrue(translateOption.checked);
+
+ // Toggle the translate option.
MockInteractions.tap(translateOption);
// Menu should stay open briefly.
@@ -304,6 +244,9 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
// Guaranteed to run later than the menu close delay.
setTimeout(function() {
assertFalse(actionMenu.open);
+ assertDeepEquals(
+ ['en-US', 'sw'],
+ languageHelper.prefs.translate_blocked_languages.value);
done();
}, settings.kMenuCloseDelay + 1);
});
@@ -311,10 +254,8 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
test('disable translate hides language-specific option', function() {
// Disables translate.
languageHelper.setPrefValue('translate.enabled', false);
- languagesPage.set('languages.translateTarget', 'foo');
- languagesPage.set('languages.enabled.1.supportsTranslate', true);
- // Makes sure language-specific menu exists.
+ // Open options for 'sw'.
var languageOptionsDropdownTrigger =
languagesCollapse.querySelectorAll('paper-icon-button')[1];
assertTrue(!!languageOptionsDropdownTrigger);
@@ -328,88 +269,76 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
});
test('remove language', function() {
- var numEnabled = languagesPage.languages.enabled.length;
-
- // Enabled a language which we can then disable.
- var newLanguage = assert(getAvailableLanguages()[0]);
- languageHelper.enableLanguage(newLanguage.code);
-
- // Wait for the language to be enabled.
- return whenNumEnabledLanguagesBecomes(numEnabled + 1).then(function() {
- // Populate the dom-repeat.
- Polymer.dom.flush();
-
- // Find the new language item.
- var items = languagesCollapse.querySelectorAll('.list-item');
- var domRepeat = assert(
- languagesCollapse.querySelector('template[is="dom-repeat"]'));
- var item = Array.from(items).find(function(el) {
- return domRepeat.itemForElement(el) &&
- domRepeat.itemForElement(el).language == newLanguage;
- });
-
- // Open the menu and select Remove.
- MockInteractions.tap(item.querySelector('paper-icon-button'));
-
- assertTrue(actionMenu.open);
- var removeMenuItem = getMenuItem('removeLanguage');
- assertFalse(removeMenuItem.disabled);
- MockInteractions.tap(removeMenuItem);
- assertFalse(actionMenu.open);
+ // Enable a language which we can then disable.
+ languageHelper.enableLanguage('no');
- // We should go back down to the original number of enabled languages.
- return whenNumEnabledLanguagesBecomes(numEnabled);
- }).then(function() {
- assertFalse(languageHelper.isLanguageEnabled(newLanguage.code));
+ // Populate the dom-repeat.
+ Polymer.dom.flush();
+
+ // Find the new language item.
+ var items = languagesCollapse.querySelectorAll('.list-item');
+ var domRepeat = assert(
+ languagesCollapse.querySelector('template[is="dom-repeat"]'));
+ var item = Array.from(items).find(function(el) {
+ return domRepeat.itemForElement(el) &&
+ domRepeat.itemForElement(el).language.code == 'no';
});
+
+ // Open the menu and select Remove.
+ MockInteractions.tap(item.querySelector('paper-icon-button'));
+
+ assertTrue(actionMenu.open);
+ var removeMenuItem = getMenuItem('removeLanguage');
+ assertFalse(removeMenuItem.disabled);
+ MockInteractions.tap(removeMenuItem);
+ assertFalse(actionMenu.open);
+
+ assertEquals(
+ initialLanguages, languageHelper.getPref(languagesPref).value);
});
test('move up/down buttons', function() {
// Add several languages.
- var numEnabled = languagesPage.languages.enabled.length;
- var available = getAvailableLanguages();
- for (var i = 0; i < 4; i++)
- languageHelper.enableLanguage(assert(available[i]).code);
-
- return whenNumEnabledLanguagesBecomes(numEnabled + 4).then(function() {
- Polymer.dom.flush();
-
- var menuButtons =
- languagesCollapse.querySelectorAll(
- '.list-item paper-icon-button[icon="cr:more-vert"]');
-
- // First language should not have "Move up" or "Move to top".
- MockInteractions.tap(menuButtons[0]);
- assertMenuItemButtonsVisible({
- moveToTop: false, moveUp: false, moveDown: true,
- });
- actionMenu.close();
-
- // Second language should not have "Move up".
- MockInteractions.tap(menuButtons[1]);
- assertMenuItemButtonsVisible({
- moveToTop: true, moveUp: false, moveDown: true,
- });
- actionMenu.close();
-
- // Middle languages should have all buttons.
- MockInteractions.tap(menuButtons[2]);
- assertMenuItemButtonsVisible({
- moveToTop: true, moveUp: true, moveDown: true,
- });
- actionMenu.close();
-
- // Last language should not have "Move down".
- MockInteractions.tap(menuButtons[menuButtons.length - 1]);
- assertMenuItemButtonsVisible({
- moveToTop: true, moveUp: true, moveDown: false,
- });
- actionMenu.close();
+ for (var language of ['en-CA', 'en-US', 'tk', 'no'])
+ languageHelper.enableLanguage(language);
+
+ Polymer.dom.flush();
+
+ var menuButtons =
+ languagesCollapse.querySelectorAll(
+ '.list-item paper-icon-button[icon="cr:more-vert"]');
+
+ // First language should not have "Move up" or "Move to top".
+ MockInteractions.tap(menuButtons[0]);
+ assertMenuItemButtonsVisible({
+ moveToTop: false, moveUp: false, moveDown: true,
+ });
+ actionMenu.close();
+
+ // Second language should not have "Move up".
+ MockInteractions.tap(menuButtons[1]);
+ assertMenuItemButtonsVisible({
+ moveToTop: true, moveUp: false, moveDown: true,
+ });
+ actionMenu.close();
+
+ // Middle languages should have all buttons.
+ MockInteractions.tap(menuButtons[2]);
+ assertMenuItemButtonsVisible({
+ moveToTop: true, moveUp: true, moveDown: true,
+ });
+ actionMenu.close();
+
+ // Last language should not have "Move down".
+ MockInteractions.tap(menuButtons[menuButtons.length - 1]);
+ assertMenuItemButtonsVisible({
+ moveToTop: true, moveUp: true, moveDown: false,
});
+ actionMenu.close();
});
});
- test('manage input methods', function() {
+ test(TestNames.InputMethods, function() {
var inputMethodsCollapse = languagesPage.$.inputMethodsCollapse;
var inputMethodSettingsExist = !!inputMethodsCollapse;
if (cr.isChromeOS) {
@@ -423,7 +352,7 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
}
});
- test('spellcheck', function() {
+ test(TestNames.Spellcheck, function() {
var spellCheckCollapse = languagesPage.$.spellCheckCollapse;
var spellCheckSettingsExist = !!spellCheckCollapse;
if (cr.isMac) {
@@ -431,31 +360,36 @@ TEST_F('SettingsLanguagesPageBrowserTest', 'MAYBE_LanguagesPage', function() {
} else {
assertTrue(spellCheckSettingsExist);
- // Ensure no language has spell check enabled.
- for (var i = 0; i < languagesPage.languages.enabled.length; i++) {
- languagesPage.set(
- 'languages.enabled.' + i + '.spellCheckEnabled', false);
- }
-
- // The row button should have the extra row only if some language has
- // spell check enabled.
+ // The row button should have a secondary row specifying which language
+ // spell check is enabled for.
var triggerRow = languagesPage.$.spellCheckSubpageTrigger;
- assertFalse(triggerRow.classList.contains('two-line'));
- assertEquals(
- 0, triggerRow.querySelector('.secondary').textContent.length);
- languagesPage.set(
- 'languages.enabled.0.language.supportsSpellcheck', true);
- languagesPage.set('languages.enabled.0.spellCheckEnabled', true);
+ // en-US starts with spellcheck enabled, so the secondary row is
+ // populated.
assertTrue(triggerRow.classList.contains('two-line'));
assertLT(
0, triggerRow.querySelector('.secondary').textContent.length);
+
+ MockInteractions.tap(triggerRow);
+ Polymer.dom.flush();
+
+ // Disable spellcheck for en-US.
+ var spellcheckLanguageToggle =
+ spellCheckCollapse.querySelector('paper-toggle-button[checked]');
+ assertTrue(!!spellcheckLanguageToggle);
+ MockInteractions.tap(spellcheckLanguageToggle);
+ assertFalse(spellcheckLanguageToggle.checked);
+ assertEquals(
+ 0,
+ languageHelper.prefs.spellcheck.dictionaries.value.length);
+
+ // Now the secondary row is empty, so it shouldn't be shown.
+ assertFalse(triggerRow.classList.contains('two-line'));
+ assertEquals(
+ 0, triggerRow.querySelector('.secondary').textContent.length);
}
});
- }.bind(this));
-
- // TODO(michaelpg): Test more aspects of the languages UI.
+ });
- // Run all registered tests.
- mocha.run();
+ return {TestNames: TestNames};
});
« no previous file with comments | « chrome/test/data/webui/settings/languages_page_browsertest.js ('k') | chrome/test/data/webui/settings/languages_tests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698