Release Vulpes OS 2.7-preview.22
This commit is contained in:
parent
200d1fb235
commit
a138f97877
294 changed files with 515786 additions and 187 deletions
43
tests/gaia-radio-power.test.mjs
Normal file
43
tests/gaia-radio-power.test.mjs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
import {test} from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {readFileSync} from 'node:fs';
|
||||
import vm from 'node:vm';
|
||||
const source=readFileSync(new URL('../host/gaia-mobile-settings.js',import.meta.url),'utf8').split('// Expose the single native SIM')[0];
|
||||
function load(call,hooks={}) {
|
||||
const navigator={};
|
||||
vm.runInNewContext(source,{window:{VulpesNativeRadioStatus:true},location:{hostname:'system.localhost'},
|
||||
navigator,VulpesCompat:{call},EventTarget,Event,DOMException,
|
||||
document:{documentElement:{setAttribute(){},toggleAttribute(){},append(){}},createElement:()=>({})},addEventListener(type,fn){hooks.start=fn;},setInterval(fn){hooks.tick=fn;}});
|
||||
return navigator.mozMobileConnections;
|
||||
}
|
||||
test('Nokia Gaia radio requests preserve DOMRequest callbacks and awaitable completion',async()=>{
|
||||
const calls=[];
|
||||
const connections=load(async(method,params)=>{calls.push({method,...params});return {slot:params.slot,radioState:'disabled'};});
|
||||
let events=0;connections[1].addEventListener('radiostatechange',()=>events++);
|
||||
const request=connections[1].setRadioEnabled(false);
|
||||
let success=false;request.onsuccess=()=>success=true;
|
||||
await request;
|
||||
assert.deepEqual(calls,[{method:'platform.radioPower',slot:1,enabled:false}]);
|
||||
assert.equal(request.readyState,'done');assert.equal(request.result,null);
|
||||
assert.equal(success,true);assert.equal(events,1);assert.equal(connections[1].radioState,'disabled');
|
||||
assert.equal(connections[0].radioState,'unknown');
|
||||
});
|
||||
test('a modem refusal propagates without claiming a new radio state',async()=>{
|
||||
const connections=load(async()=>{throw Error('RADIO_BUSY');});
|
||||
const request=connections[0].setRadioEnabled(false);
|
||||
let failed=false;request.onerror=()=>failed=true;
|
||||
await assert.rejects(Promise.resolve(request),/RADIO_BUSY/);
|
||||
assert.equal(failed,true);assert.equal(connections[0].radioState,'unknown');
|
||||
});
|
||||
|
||||
test('unchanged and cached modem snapshots do not cancel Gaia airplane mode',async()=>{
|
||||
const hooks={},stamp=Date.now()/1000;
|
||||
const conn=load(async(method)=>method==='platform.snapshot' ? {recordedAt:stamp,radio:[0,1].map(slot=>({slot,available:true,radioState:'enabled',sim:{present:false}}))} : {radioState:'disabled'},hooks)[0];
|
||||
let events=0;conn.addEventListener('radiostatechange',()=>events++);
|
||||
hooks.start();await new Promise(setImmediate);
|
||||
assert.equal(events,1);assert.equal(conn.radioState,'enabled');
|
||||
await hooks.tick();assert.equal(events,1);
|
||||
await new Promise(r=>setTimeout(r,5));
|
||||
await conn.setRadioEnabled(false);assert.equal(events,2);
|
||||
await hooks.tick();assert.equal(conn.radioState,'disabled');assert.equal(events,2);
|
||||
});
|
||||
Loading…
Reference in a new issue