blob: 222016cd4c6886f562282dff61392697d86ccc5e [file] [log] [blame]
// 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();
});