21 lines
1.3 KiB
JavaScript
21 lines
1.3 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import vm from 'node:vm';
|
|
import {readFileSync} from 'node:fs';
|
|
const source=readFileSync(new URL('../host/gaia-compat.js',import.meta.url),'utf8');
|
|
const setupSource=source.slice(source.indexOf(' let language ='),source.indexOf(' const observers ='));
|
|
const changeSource=source.match(/if \(data.key === 'language.current'\) \{[\s\S]*?\n \}/)[0];
|
|
function setup(){
|
|
let reply;const events=[];
|
|
const context=vm.createContext({navigator:{language:'fr'},Event,dispatchEvent:e=>events.push(e.type),call:()=>new Promise(r=>{reply=r;})});
|
|
vm.runInContext(setupSource,context);
|
|
return {context,events,reply,change(value){context.data={key:'language.current',value};vm.runInContext(changeSource,context);}};
|
|
}
|
|
test('a delayed startup locale cannot undo a newer Settings language',async()=>{
|
|
const s=setup();s.change('en-US');s.reply('fr');await new Promise(r=>setImmediate(r));
|
|
assert.equal(s.context.navigator.language,'en-US');assert.deepEqual(s.events,['languagechange']);
|
|
});
|
|
test('initial locale still initializes a newly opened app',async()=>{
|
|
const s=setup();s.reply('el');await new Promise(r=>setImmediate(r));
|
|
assert.equal(s.context.navigator.language,'el');assert.deepEqual(Array.from(s.context.navigator.languages),['el']);
|
|
});
|