Add permission-based reading of Android contacts, SMS and call history. Include shared Gaia fixes and document device validation limits. Pixel image qualification remains pending.
24 lines
1.4 KiB
JavaScript
24 lines
1.4 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import vm from 'node:vm';
|
|
import {readFileSync} from 'node:fs';
|
|
const root=new URL('../',import.meta.url);
|
|
const source=readFileSync(new URL('gaia/apps/keyboard/js/settings/layout_dictionary_downloader.js',root),'utf8');
|
|
test('every offered Latin dictionary is present and has a valid header',()=>{
|
|
const layouts=JSON.parse(readFileSync(new URL('assets/webapps/keyboard.gaiamobile.org/js/settings/layouts.json',root)));
|
|
for(const name of new Set(layouts.filter(l=>l.imEngineId==='latin'&&l.dictFilename).map(l=>l.dictFilename))){
|
|
const data=readFileSync(new URL('gaia/apps/keyboard/js/imes/latin/dictionaries/'+name,root));
|
|
assert.equal(data.subarray(0,8).toString(),'FxOSDICT',name);
|
|
}
|
|
});
|
|
test('adding a language reads and verifies its local dictionary',async()=>{
|
|
let requested,aborted=false;
|
|
class XHR {
|
|
open(method,url){requested=url;}
|
|
send(){const b=readFileSync(new URL('gaia/apps/keyboard'+requested,root));this.response=b.buffer.slice(b.byteOffset,b.byteOffset+b.byteLength);this.onloadend();}
|
|
abort(){aborted=true;}
|
|
}
|
|
const window={};vm.runInNewContext(source,{window,XMLHttpRequest:XHR,ArrayBuffer,Uint8Array,Promise});
|
|
const data=await new window.LayoutDictionaryDownloader('latin','it.dict').load();
|
|
assert.equal(requested,'/js/imes/latin/dictionaries/it.dict');assert.ok(data.byteLength>8);assert.equal(aborted,false);
|
|
});
|