| OLD | NEW |
| (Empty) |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 GEN_INCLUDE(['options_browsertest_base.js']); | |
| 6 GEN('#include "chrome/browser/ui/webui/options/' + | |
| 7 'multilanguage_options_browsertest.h"'); | |
| 8 | |
| 9 /** | |
| 10 * Test C++ fixture for Language Options WebUI testing. | |
| 11 * @constructor | |
| 12 * @extends {testing.Test} | |
| 13 */ | |
| 14 function MultilanguageOptionsWebUIBrowserTest() {} | |
| 15 | |
| 16 MultilanguageOptionsWebUIBrowserTest.prototype = { | |
| 17 __proto__: OptionsBrowsertestBase.prototype, | |
| 18 | |
| 19 /** @override */ | |
| 20 browsePreload: 'chrome://settings-frame/languages', | |
| 21 | |
| 22 /** @override */ | |
| 23 typedefCppFixture: 'MultilanguageOptionsBrowserTest', | |
| 24 | |
| 25 /** @override */ | |
| 26 accessibilityIssuesAreErrors: true, | |
| 27 | |
| 28 /** @param {string} expected Sorted currently selected languages. */ | |
| 29 expectCurrentlySelected: function(expected) { | |
| 30 var languages = LanguageOptions.getInstance().spellCheckLanguages_; | |
| 31 expectEquals(expected, Object.keys(languages).sort().join()); | |
| 32 }, | |
| 33 | |
| 34 /** @override */ | |
| 35 setUp: function() { | |
| 36 OptionsBrowsertestBase.prototype.setUp.call(this); | |
| 37 | |
| 38 assertFalse(cr.isMac); | |
| 39 expectFalse($('edit-custom-dictionary-button').hidden); | |
| 40 this.expectEnableSpellcheckCheckboxVisible(); | |
| 41 this.expectCurrentlySelected('fr'); | |
| 42 | |
| 43 var requiredOwnedAriaRoleMissingSelectors = [ | |
| 44 '#default-search-engine-list', | |
| 45 '#other-search-engine-list', | |
| 46 ]; | |
| 47 | |
| 48 // Enable when failure is resolved. | |
| 49 // AX_ARIA_08: http://crbug.com/559320 | |
| 50 this.accessibilityAuditConfig.ignoreSelectors( | |
| 51 'requiredOwnedAriaRoleMissing', | |
| 52 requiredOwnedAriaRoleMissingSelectors); | |
| 53 | |
| 54 // Enable when failure is resolved. | |
| 55 // AX_ARIA_10: http://crbug.com/559266 | |
| 56 this.accessibilityAuditConfig.ignoreSelectors( | |
| 57 'unsupportedAriaAttribute', | |
| 58 '#language-options-list'); | |
| 59 | |
| 60 // Enable when failure is resolved. | |
| 61 // AX_TEXT_04: http://crbug.com/559271 | |
| 62 this.accessibilityAuditConfig.ignoreSelectors( | |
| 63 'linkWithUnclearPurpose', | |
| 64 '#languagePage > .content-area > .language-options-header > A'); | |
| 65 }, | |
| 66 | |
| 67 /** @override */ | |
| 68 tearDown: function() { | |
| 69 testing.Test.prototype.tearDown.call(this); | |
| 70 this.expectEnableSpellcheckCheckboxVisible(); | |
| 71 }, | |
| 72 | |
| 73 /** Make sure the 'Enable spell checking' checkbox is visible. */ | |
| 74 expectEnableSpellcheckCheckboxVisible: function() { | |
| 75 if ($('enable-spellcheck-container')) | |
| 76 expectFalse($('enable-spellcheck-container').hidden); | |
| 77 }, | |
| 78 }; | |
| 79 | |
| 80 // Test that opening language options has the correct location. | |
| 81 TEST_F('MultilanguageOptionsWebUIBrowserTest', 'TestOpenLanguageOptions', | |
| 82 function() { | |
| 83 expectEquals('chrome://settings-frame/languages', document.location.href); | |
| 84 }); | |
| 85 | |
| 86 // Test that only certain languages can be selected and used for spellchecking. | |
| 87 // prefs::kLanguagePreferredLanguages/prefs::kAcceptLanguages is set to | |
| 88 // 'fr,es,de,en' and prefs::kSpellCheckDictionaries is just 'fr' | |
| 89 TEST_F('MultilanguageOptionsWebUIBrowserTest', 'ChangeSpellcheckLanguages', | |
| 90 function() { | |
| 91 expectTrue($('language-options-list').selectLanguageByCode('es')); | |
| 92 expectFalse($('spellcheck-language-checkbox').checked, 'es'); | |
| 93 | |
| 94 // Click 'es' and ensure that it gets checked and 'fr' stays checked. | |
| 95 $('spellcheck-language-checkbox').click(); | |
| 96 expectTrue($('spellcheck-language-checkbox').checked, 'es'); | |
| 97 expectTrue($('language-options-list').selectLanguageByCode('fr')); | |
| 98 expectTrue($('spellcheck-language-checkbox').checked, 'fr'); | |
| 99 this.expectCurrentlySelected('es,fr'); | |
| 100 | |
| 101 // Click 'fr' and ensure that it gets unchecked and 'es' stays checked. | |
| 102 $('spellcheck-language-checkbox').click(); | |
| 103 expectFalse($('spellcheck-language-checkbox').checked, 'fr'); | |
| 104 $('language-options-list').selectLanguageByCode('es'); | |
| 105 expectTrue($('spellcheck-language-checkbox').checked, 'es'); | |
| 106 this.expectCurrentlySelected('es'); | |
| 107 }); | |
| 108 | |
| 109 // Make sure 'am' cannot be selected as a language and 'fr' stays selected. | |
| 110 TEST_F('MultilanguageOptionsWebUIBrowserTest', 'NotAcceptLanguage', function() { | |
| 111 expectFalse($('language-options-list').selectLanguageByCode('am')); | |
| 112 expectTrue($('language-options-list').selectLanguageByCode('fr')); | |
| 113 expectTrue($('spellcheck-language-checkbox').checked, 'fr'); | |
| 114 this.expectCurrentlySelected('fr'); | |
| 115 }); | |
| 116 | |
| 117 // Make sure 'en' cannot be used as a language and 'fr' stays selected. | |
| 118 TEST_F('MultilanguageOptionsWebUIBrowserTest', 'UnusableLanguage', function() { | |
| 119 expectTrue($('language-options-list').selectLanguageByCode('en')); | |
| 120 expectTrue($('spellcheck-language-checkbox-container').hidden); | |
| 121 expectFalse($('spellcheck-language-checkbox').checked, 'en'); | |
| 122 this.expectCurrentlySelected('fr'); | |
| 123 }); | |
| 124 | |
| 125 /** | |
| 126 * Test C++ fixture for Language Options WebUI testing. | |
| 127 * @constructor | |
| 128 * @extends {MultilanguageOptionsWebUIBrowserTest} | |
| 129 */ | |
| 130 function MultilanguagePreferenceWebUIBrowserTest() {} | |
| 131 | |
| 132 MultilanguagePreferenceWebUIBrowserTest.prototype = { | |
| 133 __proto__: MultilanguageOptionsWebUIBrowserTest.prototype, | |
| 134 | |
| 135 /** @override */ | |
| 136 testGenPreamble: function() { | |
| 137 GEN('ClearSpellcheckDictionaries();'); | |
| 138 }, | |
| 139 | |
| 140 /** @override */ | |
| 141 isAsync: true, | |
| 142 | |
| 143 /** | |
| 144 * @param {string} expected Sorted languages in the kSpellCheckDictionaries | |
| 145 * preference. | |
| 146 */ | |
| 147 expectRegisteredDictionariesPref: function(expected) { | |
| 148 var registeredPrefs = | |
| 149 options.Preferences.getInstance().registeredPreferences_; | |
| 150 expectEquals(expected, | |
| 151 registeredPrefs['spellcheck.dictionaries'].orig.value.sort().join()); | |
| 152 }, | |
| 153 | |
| 154 /** | |
| 155 * Watch for a change to the preference |pref| and then call |callback|. | |
| 156 * @param {string} pref The preference to listen for a change on. | |
| 157 * @param {function} callback The function to run after a listener event. | |
| 158 */ | |
| 159 addPreferenceListener: function(pref, callback) { | |
| 160 options.Preferences.getInstance().addEventListener(pref, callback); | |
| 161 }, | |
| 162 | |
| 163 /** @override */ | |
| 164 setUp: function() { | |
| 165 OptionsBrowsertestBase.prototype.setUp.call(this); | |
| 166 | |
| 167 assertFalse(cr.isMac); | |
| 168 expectTrue($('edit-custom-dictionary-button').hidden); | |
| 169 this.expectEnableSpellcheckCheckboxVisible(); | |
| 170 this.expectCurrentlySelected(''); | |
| 171 this.expectRegisteredDictionariesPref(''); | |
| 172 | |
| 173 // Enable when failure is resolved. | |
| 174 // AX_ARIA_10: http://crbug.com/559266 | |
| 175 this.accessibilityAuditConfig.ignoreSelectors( | |
| 176 'unsupportedAriaAttribute', | |
| 177 '#language-options-list'); | |
| 178 | |
| 179 // Enable when failure is resolved. | |
| 180 // AX_TEXT_04: http://crbug.com/559271 | |
| 181 this.accessibilityAuditConfig.ignoreSelectors( | |
| 182 'linkWithUnclearPurpose', | |
| 183 '#languagePage > .content-area > .language-options-header > A'); | |
| 184 | |
| 185 // Enable when failure is resolved. | |
| 186 // AX_FOCUS_01: http://crbug.com/570046 | |
| 187 this.accessibilityAuditConfig.ignoreSelectors( | |
| 188 'focusableElementNotVisibleAndNotAriaHidden', | |
| 189 '#offer-to-translate-in-this-language'); | |
| 190 }, | |
| 191 }; | |
| 192 | |
| 193 // Make sure the case where no languages are selected is handled properly. | |
| 194 TEST_F('MultilanguagePreferenceWebUIBrowserTest', 'SelectFromBlank', | |
| 195 function() { | |
| 196 expectTrue($('language-options-list').selectLanguageByCode('fr')); | |
| 197 expectFalse($('spellcheck-language-checkbox').checked, 'fr'); | |
| 198 expectTrue($('edit-custom-dictionary-button').hidden); | |
| 199 | |
| 200 // Add a preference change event listener which ensures that the preference is | |
| 201 // updated correctly and that 'fr' is the only thing in the dictionary object. | |
| 202 this.addPreferenceListener('spellcheck.dictionaries', function() { | |
| 203 expectTrue($('spellcheck-language-checkbox').checked, 'fr'); | |
| 204 this.expectRegisteredDictionariesPref('fr'); | |
| 205 this.expectCurrentlySelected('fr'); | |
| 206 expectFalse($('edit-custom-dictionary-button').hidden); | |
| 207 testDone(); | |
| 208 }.bind(this)); | |
| 209 | |
| 210 // Click 'fr' and trigger the preference listener. | |
| 211 $('spellcheck-language-checkbox').click(); | |
| 212 }); | |
| OLD | NEW |