VulpesOS/gaia/apps/ftu/test/unit/language_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

135 lines
4.2 KiB
JavaScript
Executable file

/* global MockL10n, MockNavigatorSettings, MockLanguageList,
LanguageManager, LanguageList, KeyboardHelper,
MockImportNavigationHTML */
'use strict';
require('/shared/js/component_utils.js');
require('/shared/elements/gaia_radio/script.js');
require('/shared/test/unit/mocks/mock_navigator_moz_settings.js');
require('/shared/test/unit/mocks/mock_language_list.js');
require('/shared/test/unit/mocks/mock_l20n.js');
requireApp('ftu/test/unit/mock_navigation.html.js');
requireApp('ftu/js/language.js');
suite('languages >', function() {
var realSettings;
var realLanguageList;
var realL10n;
var realHTML;
suiteSetup(function() {
realHTML = document.body.innerHTML;
document.body.innerHTML = MockImportNavigationHTML;
// mock l10n
realL10n = document.l10n;
document.l10n = MockL10n;
realSettings = navigator.mozSettings;
navigator.mozSettings = MockNavigatorSettings;
realLanguageList = window.LanguageList;
window.LanguageList = MockLanguageList;
LanguageManager.settings = MockNavigatorSettings;
LanguageManager._kbLayoutList = null;
});
suiteTeardown(function() {
document.body.innerHTML = realHTML;
document.l10n = realL10n;
navigator.mozSettings = realSettings;
realSettings = null;
window.LanguageList = realLanguageList;
});
test('change language', function() {
var settingName = 'language.current';
var fakeEvent = {
target: {
name: settingName,
value: 'a different language'
}
};
LanguageManager.handleEvent(fakeEvent);
assert.equal(MockNavigatorSettings.mSettings[fakeEvent.target.name],
fakeEvent.target.value);
});
test('build language list', function(done) {
var section = document.createElement('section');
section.id = 'languages';
document.body.appendChild(section);
var list = document.createElement('ul');
section.appendChild(list);
// XXX in reality this method is async b/c it uses LanguageList.get; here
// however it uses the mock which is sync. Fix this in bug 1119865.
LanguageManager.buildLanguageList();
var selected = document.querySelectorAll('gaia-radio');
assert.equal(selected.length, 1);
assert.equal(selected[0].checked, true);
assert.equal(selected[0].value, 'en-US');
// mock's _languages is sync, too
LanguageList._languages.then(function(langs) {
assert.equal(document.querySelectorAll('li').length,
Object.keys(langs).length);
});
done();
});
suite('keyboard settings >', function() {
var langKey = 'language.current';
suiteSetup(function() {
window.KeyboardHelper = {};
MockNavigatorSettings.mSyncRepliesOnly = true;
});
suiteTeardown(function() {
delete window.KeyboardHelper;
});
setup(function() {
KeyboardHelper.changeDefaultLayouts = this.sinon.spy();
LanguageManager.init();
});
teardown(function() {
LanguageManager.uninit();
});
test('observes settings', function() {
assert.equal(MockNavigatorSettings.mObservers[langKey].length, 1);
});
test('keyboard layouts changed after language change', function() {
MockNavigatorSettings.mTriggerObservers(langKey,
{settingValue: 'newLanguage'});
assert.isTrue(KeyboardHelper.changeDefaultLayouts.called);
});
});
suite('screen reader', function() {
suiteSetup(function() {
LanguageManager.init();
});
suiteTeardown(function() {
LanguageManager.uninit();
});
test('enable screen reader', function(done) {
function afterEnabledHandler() {
window.removeEventListener('languagelistready', afterEnabledHandler);
window.addEventListener('languagelistready', afterDisabledHandler);
MockNavigatorSettings.mTriggerObservers('accessibility.screenreader',
{ settingValue: false });
}
function afterDisabledHandler() {
window.removeEventListener('languagelistready', afterDisabledHandler);
done();
}
window.addEventListener('languagelistready', afterEnabledHandler);
MockNavigatorSettings.mTriggerObservers('accessibility.screenreader',
{ settingValue: true });
});
});
});