blob: 35428080751b5a9a6a29c230244e55a7e8d95866 [file] [log] [blame]
// Copyright 2016 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.
cr.define('settings-languages', function() {
suite('settings-languages', function() {
/**
* @param {!Array<string>} expected
*/
function assertLanguageOrder(expected) {
assertEquals(expected.length, languageHelper.languages.enabled.length);
for (let i = 0; i < expected.length; i++) {
assertEquals(
expected[i], languageHelper.languages.enabled[i].language.code);
}
}
/** @type {?settings.LanguagesBrowserProxy} */
let browserProxy = null;
let languageHelper;
suiteSetup(function() {
CrSettingsPrefs.deferInitialization = true;
PolymerTest.clearBody();
});
setup(function() {
const settingsPrefs = document.createElement('settings-prefs');
const settingsPrivate =
new settings.FakeSettingsPrivate(settings.getFakeLanguagePrefs());
settingsPrefs.initialize(settingsPrivate);
document.body.appendChild(settingsPrefs);
// Setup test browser proxy.
browserProxy = new settings.TestLanguagesBrowserProxy();
settings.LanguagesBrowserProxyImpl.instance_ = browserProxy;
// Setup fake languageSettingsPrivate API.
const languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate();
languageSettingsPrivate.setSettingsPrefs(settingsPrefs);
languageHelper = document.createElement('settings-languages');
// Prefs would normally be data-bound to settings-languages.
test_util.fakeDataBind(settingsPrefs, languageHelper, 'prefs');
document.body.appendChild(languageHelper);
return languageHelper.whenReady().then(function() {
if (cr.isChromeOS || cr.isWindows)
return browserProxy.whenCalled('getProspectiveUILanguage');
});
});
test('languages model', function() {
const languageSettingsPrivate = browserProxy.getLanguageSettingsPrivate();
for (let i = 0; i < languageSettingsPrivate.languages.length;
i++) {
assertEquals(languageSettingsPrivate.languages[i].code,
languageHelper.languages.supported[i].code);
}
assertLanguageOrder(['en-US', 'sw']);
assertEquals('en', languageHelper.languages.translateTarget);
// TODO(michaelpg): Test other aspects of the model.
});
test('modifying languages', function() {
assertTrue(languageHelper.isLanguageEnabled('en-US'));
assertTrue(languageHelper.isLanguageEnabled('sw'));
assertFalse(languageHelper.isLanguageEnabled('en-CA'));
languageHelper.enableLanguage('en-CA');
assertTrue(languageHelper.isLanguageEnabled('en-CA'));
languageHelper.disableLanguage('sw');
assertFalse(languageHelper.isLanguageEnabled('sw'));
// TODO(michaelpg): Test other modifications.
});
test('reorder languages', function() {
// New language is added at the end.
languageHelper.enableLanguage('en-CA');
assertLanguageOrder(['en-US', 'sw', 'en-CA']);
// Can move a language up.
languageHelper.moveLanguage('en-CA', true /* upDirection */);
assertLanguageOrder(['en-US', 'en-CA', 'sw']);
// Can move a language down.
languageHelper.moveLanguage('en-US', false /* upDirection */);
assertLanguageOrder(['en-CA', 'en-US', 'sw']);
// Can move a language to the front.
languageHelper.moveLanguageToFront('sw');
const expectedOrder = ['sw', 'en-CA', 'en-US'];
assertLanguageOrder(expectedOrder);
// Moving the first language up has no effect.
languageHelper.moveLanguage('sw', true /* upDirection */);
assertLanguageOrder(expectedOrder);
// Moving the first language to top has no effect.
languageHelper.moveLanguageToFront('sw');
assertLanguageOrder(expectedOrder);
// Moving the last language down has no effect.
languageHelper.moveLanguage('en-US', false /* upDirection */);
assertLanguageOrder(expectedOrder);
});
if (cr.isChromeOS) {
test('modifying input methods', function() {
assertEquals(2, languageHelper.languages.inputMethods.enabled.length);
const inputMethods = languageHelper.getInputMethodsForLanguage('en-US');
assertEquals(3, inputMethods.length);
// We can remove one input method.
const dvorak =
'_comp_ime_fgoepimhcoialccpbmpnnblemnepkkaoxkb:us:dvorak:eng';
languageHelper.removeInputMethod(dvorak);
assertEquals(1, languageHelper.languages.inputMethods.enabled.length);
// Enable Swahili.
languageHelper.enableLanguage('sw');
assertEquals(1, languageHelper.languages.inputMethods.enabled.length);
// Add input methods for Swahili.
const sw = '_comp_ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:sw:sw';
const swUS = '_comp_ime_abcdefghijklmnopqrstuvwxyzabcdefxkb:us:sw';
languageHelper.addInputMethod(sw);
languageHelper.addInputMethod(swUS);
assertEquals(3, languageHelper.languages.inputMethods.enabled.length);
// Disable Swahili. The Swahili-only keyboard should be removed.
languageHelper.disableLanguage('sw');
assertEquals(2, languageHelper.languages.inputMethods.enabled.length);
// The US Swahili keyboard should still be enabled, because it supports
// English which is still enabled.
assertTrue(languageHelper.languages.inputMethods.enabled.some(
function(inputMethod) {
return inputMethod.id == swUS;
}));
});
}
});
});