blob: 18dbc286fe1d2207ca3ff47dca706d88a4c81a14 [file] [log] [blame]
// 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.
suite('settings-edit-dictionary-page', function() {
function getFakePrefs() {
const fakePrefs = [
{
key: 'intl.app_locale',
type: chrome.settingsPrivate.PrefType.STRING,
value: 'en-US',
},
{
key: 'intl.accept_languages',
type: chrome.settingsPrivate.PrefType.STRING,
value: 'en-US,sw',
},
{
key: 'spellcheck.dictionaries',
type: chrome.settingsPrivate.PrefType.LIST,
value: ['en-US'],
},
{
key: 'translate_blocked_languages',
type: chrome.settingsPrivate.PrefType.LIST,
value: ['en-US'],
}
];
if (cr.isChromeOS) {
fakePrefs.push({
key: 'settings.language.preferred_languages',
type: chrome.settingsPrivate.PrefType.STRING,
value: 'en-US,sw',
});
fakePrefs.push({
key: 'settings.language.preload_engines',
type: chrome.settingsPrivate.PrefType.STRING,
value: '_comp_ime_fgoepimhcoialccpbmpnnblemnepkkaoxkb:us::eng,' +
'_comp_ime_fgoepimhcoialccpbmpnnblemnepkkaoxkb:us:dvorak:eng',
});
fakePrefs.push({
key: 'settings.language.enabled_extension_imes',
type: chrome.settingsPrivate.PrefType.STRING,
value: '',
});
}
return fakePrefs;
}
/** @type {?SettingsEditDictionaryPageElement} */
let editDictPage;
/** @type {?FakeLanguageSettingsPrivate} */
let languageSettingsPrivate;
/** @type {?FakeSettingsPrivate} */
let settingsPrefs;
suiteSetup(function() {
CrSettingsPrefs.deferInitialization = true;
});
setup(function() {
PolymerTest.clearBody();
settingsPrefs = document.createElement('settings-prefs');
const settingsPrivate = new settings.FakeSettingsPrivate(getFakePrefs());
settingsPrefs.initialize(settingsPrivate);
languageSettingsPrivate = new settings.FakeLanguageSettingsPrivate();
languageSettingsPrivate.setSettingsPrefs(settingsPrefs);
settings.languageSettingsPrivateApiForTest = languageSettingsPrivate;
editDictPage = document.createElement('settings-edit-dictionary-page');
// Prefs would normally be data-bound to settings-languages.
document.body.appendChild(editDictPage);
});
teardown(function() {
editDictPage.remove();
});
test('add word validation', function() {
// Check addWord enable/disable logic
const addWordButton = editDictPage.$.addWord;
assertTrue(!!addWordButton);
editDictPage.$.newWord.value = '';
assertTrue(addWordButton.disabled);
editDictPage.$.newWord.value = 'valid word';
assertFalse(addWordButton.disabled);
assertFalse(
window.getComputedStyle(addWordButton)['pointer-events'] ===
'none'); // Make sure add-word button actually clickable.
});
test('spellcheck edit dictionary page message when empty', function() {
assertTrue(!!editDictPage);
return languageSettingsPrivate.whenCalled('getSpellcheckWords')
.then(function() {
Polymer.dom.flush();
assertFalse(editDictPage.$.noWordsLabel.hidden);
assertFalse(!!editDictPage.$$('#list'));
});
});
test('spellcheck edit dictionary page list has words', function() {
const addWordButton = editDictPage.$$('#addWord');
editDictPage.$.newWord.value = 'valid word';
addWordButton.click();
editDictPage.$.newWord.value = 'valid word2';
addWordButton.click();
Polymer.dom.flush();
assertTrue(editDictPage.$.noWordsLabel.hidden);
assertTrue(!!editDictPage.$$('#list'));
assertEquals(2, editDictPage.$$('#list').items.length);
});
test('spellcheck edit dictionary page remove is in tab order', function() {
const addWordButton = editDictPage.$$('#addWord');
editDictPage.$.newWord.value = 'valid word';
addWordButton.click();
Polymer.dom.flush();
assertTrue(editDictPage.$.noWordsLabel.hidden);
assertTrue(!!editDictPage.$$('#list'));
assertEquals(1, editDictPage.$$('#list').items.length);
const removeWordButton = editDictPage.$$('button');
// Button should be reachable in the tab order.
assertEquals(0, removeWordButton.tabIndex);
removeWordButton.click();
Polymer.dom.flush();
assertFalse(editDictPage.$.noWordsLabel.hidden);
editDictPage.$.newWord.value = 'valid word2';
addWordButton.click();
Polymer.dom.flush();
assertTrue(editDictPage.$.noWordsLabel.hidden);
assertTrue(!!editDictPage.$$('#list'));
assertEquals(1, editDictPage.$$('#list').items.length);
const newRemoveWordButton = editDictPage.$$('button');
// Button should be reachable in the tab order.
assertEquals(0, newRemoveWordButton.tabIndex);
});
});