| // Copyright 2015 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. |
| |
| GEN_INCLUDE(['options_browsertest_base.js']); |
| GEN('#include "chrome/browser/ui/webui/options/' + |
| 'multilanguage_options_browsertest.h"'); |
| |
| /** |
| * Test C++ fixture for Language Options WebUI testing. |
| * @constructor |
| * @extends {testing.Test} |
| */ |
| function MultilanguageOptionsWebUIBrowserTest() {} |
| |
| MultilanguageOptionsWebUIBrowserTest.prototype = { |
| __proto__: OptionsBrowsertestBase.prototype, |
| |
| /** @override */ |
| browsePreload: 'chrome://settings-frame/languages', |
| |
| /** @override */ |
| typedefCppFixture: 'MultilanguageOptionsBrowserTest', |
| |
| /** @override */ |
| accessibilityIssuesAreErrors: true, |
| |
| /** @param {string} expected Sorted currently selected languages. */ |
| expectCurrentlySelected: function(expected) { |
| var languages = LanguageOptions.getInstance().spellCheckLanguages_; |
| expectEquals(expected, Object.keys(languages).sort().join()); |
| }, |
| |
| /** @override */ |
| setUp: function() { |
| OptionsBrowsertestBase.prototype.setUp.call(this); |
| |
| assertFalse(cr.isMac); |
| expectFalse($('edit-custom-dictionary-button').hidden); |
| this.expectEnableSpellcheckCheckboxVisible(); |
| this.expectCurrentlySelected('fr'); |
| |
| var requiredOwnedAriaRoleMissingSelectors = [ |
| '#default-search-engine-list', |
| '#other-search-engine-list', |
| ]; |
| |
| // Enable when failure is resolved. |
| // AX_ARIA_08: http://crbug.com/559320 |
| this.accessibilityAuditConfig.ignoreSelectors( |
| 'requiredOwnedAriaRoleMissing', |
| requiredOwnedAriaRoleMissingSelectors); |
| |
| // Enable when failure is resolved. |
| // AX_ARIA_10: http://crbug.com/559266 |
| this.accessibilityAuditConfig.ignoreSelectors( |
| 'unsupportedAriaAttribute', |
| '#language-options-list'); |
| |
| // Enable when failure is resolved. |
| // AX_TEXT_04: http://crbug.com/559271 |
| this.accessibilityAuditConfig.ignoreSelectors( |
| 'linkWithUnclearPurpose', |
| '#languagePage > .content-area > .language-options-header > A'); |
| }, |
| |
| /** @override */ |
| tearDown: function() { |
| testing.Test.prototype.tearDown.call(this); |
| this.expectEnableSpellcheckCheckboxVisible(); |
| }, |
| |
| /** Make sure the 'Enable spell checking' checkbox is visible. */ |
| expectEnableSpellcheckCheckboxVisible: function() { |
| if ($('enable-spellcheck-container')) |
| expectFalse($('enable-spellcheck-container').hidden); |
| }, |
| }; |
| |
| // Test that opening language options has the correct location. |
| TEST_F('MultilanguageOptionsWebUIBrowserTest', 'TestOpenLanguageOptions', |
| function() { |
| expectEquals('chrome://settings-frame/languages', document.location.href); |
| }); |
| |
| // Test that only certain languages can be selected and used for spellchecking. |
| // prefs::kLanguagePreferredLanguages/prefs::kAcceptLanguages is set to |
| // 'fr,es,de,en' and prefs::kSpellCheckDictionaries is just 'fr' |
| TEST_F('MultilanguageOptionsWebUIBrowserTest', 'ChangeSpellcheckLanguages', |
| function() { |
| expectTrue($('language-options-list').selectLanguageByCode('es')); |
| expectFalse($('spellcheck-language-checkbox').checked, 'es'); |
| |
| // Click 'es' and ensure that it gets checked and 'fr' stays checked. |
| $('spellcheck-language-checkbox').click(); |
| expectTrue($('spellcheck-language-checkbox').checked, 'es'); |
| expectTrue($('language-options-list').selectLanguageByCode('fr')); |
| expectTrue($('spellcheck-language-checkbox').checked, 'fr'); |
| this.expectCurrentlySelected('es,fr'); |
| |
| // Click 'fr' and ensure that it gets unchecked and 'es' stays checked. |
| $('spellcheck-language-checkbox').click(); |
| expectFalse($('spellcheck-language-checkbox').checked, 'fr'); |
| $('language-options-list').selectLanguageByCode('es'); |
| expectTrue($('spellcheck-language-checkbox').checked, 'es'); |
| this.expectCurrentlySelected('es'); |
| }); |
| |
| // Make sure 'am' cannot be selected as a language and 'fr' stays selected. |
| TEST_F('MultilanguageOptionsWebUIBrowserTest', 'NotAcceptLanguage', function() { |
| expectFalse($('language-options-list').selectLanguageByCode('am')); |
| expectTrue($('language-options-list').selectLanguageByCode('fr')); |
| expectTrue($('spellcheck-language-checkbox').checked, 'fr'); |
| this.expectCurrentlySelected('fr'); |
| }); |
| |
| // Make sure 'en' cannot be used as a language and 'fr' stays selected. |
| TEST_F('MultilanguageOptionsWebUIBrowserTest', 'UnusableLanguage', function() { |
| expectTrue($('language-options-list').selectLanguageByCode('en')); |
| expectTrue($('spellcheck-language-checkbox-container').hidden); |
| expectFalse($('spellcheck-language-checkbox').checked, 'en'); |
| this.expectCurrentlySelected('fr'); |
| }); |
| |
| /** |
| * Test C++ fixture for Language Options WebUI testing. |
| * @constructor |
| * @extends {MultilanguageOptionsWebUIBrowserTest} |
| */ |
| function MultilanguagePreferenceWebUIBrowserTest() {} |
| |
| MultilanguagePreferenceWebUIBrowserTest.prototype = { |
| __proto__: MultilanguageOptionsWebUIBrowserTest.prototype, |
| |
| /** @override */ |
| testGenPreamble: function() { |
| GEN('ClearSpellcheckDictionaries();'); |
| }, |
| |
| /** @override */ |
| isAsync: true, |
| |
| /** |
| * @param {string} expected Sorted languages in the kSpellCheckDictionaries |
| * preference. |
| */ |
| expectRegisteredDictionariesPref: function(expected) { |
| var registeredPrefs = |
| options.Preferences.getInstance().registeredPreferences_; |
| expectEquals(expected, |
| registeredPrefs['spellcheck.dictionaries'].orig.value.sort().join()); |
| }, |
| |
| /** |
| * Watch for a change to the preference |pref| and then call |callback|. |
| * @param {string} pref The preference to listen for a change on. |
| * @param {function} callback The function to run after a listener event. |
| */ |
| addPreferenceListener: function(pref, callback) { |
| options.Preferences.getInstance().addEventListener(pref, callback); |
| }, |
| |
| /** @override */ |
| setUp: function() { |
| OptionsBrowsertestBase.prototype.setUp.call(this); |
| |
| assertFalse(cr.isMac); |
| expectTrue($('edit-custom-dictionary-button').hidden); |
| this.expectEnableSpellcheckCheckboxVisible(); |
| this.expectCurrentlySelected(''); |
| this.expectRegisteredDictionariesPref(''); |
| |
| // Enable when failure is resolved. |
| // AX_ARIA_10: http://crbug.com/559266 |
| this.accessibilityAuditConfig.ignoreSelectors( |
| 'unsupportedAriaAttribute', |
| '#language-options-list'); |
| |
| // Enable when failure is resolved. |
| // AX_TEXT_04: http://crbug.com/559271 |
| this.accessibilityAuditConfig.ignoreSelectors( |
| 'linkWithUnclearPurpose', |
| '#languagePage > .content-area > .language-options-header > A'); |
| |
| // Enable when failure is resolved. |
| // AX_FOCUS_01: http://crbug.com/570046 |
| this.accessibilityAuditConfig.ignoreSelectors( |
| 'focusableElementNotVisibleAndNotAriaHidden', |
| '#offer-to-translate-in-this-language'); |
| }, |
| }; |
| |
| // Make sure the case where no languages are selected is handled properly. |
| TEST_F('MultilanguagePreferenceWebUIBrowserTest', 'SelectFromBlank', |
| function() { |
| expectTrue($('language-options-list').selectLanguageByCode('fr')); |
| expectFalse($('spellcheck-language-checkbox').checked, 'fr'); |
| expectTrue($('edit-custom-dictionary-button').hidden); |
| |
| // Add a preference change event listener which ensures that the preference is |
| // updated correctly and that 'fr' is the only thing in the dictionary object. |
| this.addPreferenceListener('spellcheck.dictionaries', function() { |
| expectTrue($('spellcheck-language-checkbox').checked, 'fr'); |
| this.expectRegisteredDictionariesPref('fr'); |
| this.expectCurrentlySelected('fr'); |
| expectFalse($('edit-custom-dictionary-button').hidden); |
| testDone(); |
| }.bind(this)); |
| |
| // Click 'fr' and trigger the preference listener. |
| $('spellcheck-language-checkbox').click(); |
| }); |