Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
57 lines
2.3 KiB
JavaScript
57 lines
2.3 KiB
JavaScript
import {test} from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {ScreenPower} from '../services/screen-power.mjs';
|
|
|
|
test('wake and brightness commands cannot apply a stale disabled state', async () => {
|
|
const written = [];
|
|
let release;
|
|
const pending = new Promise(resolve => {release=resolve;});
|
|
const state = {screenEnabled:false, screenBrightness:0};
|
|
const power = new ScreenPower(state, async next => {
|
|
if (!written.length) await pending;
|
|
written.push({...next});
|
|
});
|
|
const wake = power.set('screenEnabled',true);
|
|
const brightness = power.set('screenBrightness',0.5);
|
|
await Promise.resolve();
|
|
assert.equal(written.length,0);
|
|
release();
|
|
await Promise.all([wake,brightness]);
|
|
assert.deepEqual(written,[{screenEnabled:true,screenBrightness:0},{screenEnabled:true,screenBrightness:0.5}]);
|
|
});
|
|
|
|
test('hardware failure preserves committed state and allows the next request', async () => {
|
|
const state = {screenEnabled:true,screenBrightness:1};
|
|
let fail = true;
|
|
const power = new ScreenPower(state,async () => {if(fail)throw Error('offline');});
|
|
await assert.rejects(power.set('screenEnabled',false),/offline/);
|
|
assert.equal(state.screenEnabled,true);
|
|
fail=false;
|
|
await power.set('screenBrightness',0.5);
|
|
assert.deepEqual(state,{screenEnabled:true,screenBrightness:0.5});
|
|
});
|
|
|
|
|
|
test('brightness bursts coalesce without crossing an off/on boundary', async () => {
|
|
const state = {screenEnabled:true, screenBrightness:1};
|
|
const written = [];
|
|
let release;
|
|
const gate = new Promise(resolve => {release=resolve;});
|
|
const power = new ScreenPower(state, async next => {
|
|
if (!written.length) await gate;
|
|
written.push({...next});
|
|
});
|
|
const first = power.set('screenBrightness',0.99);
|
|
await Promise.resolve();
|
|
const burst = Array.from({length:100},(_,i)=>power.set('screenBrightness',i/100));
|
|
const off = power.set('screenEnabled',false);
|
|
const dark = power.set('screenBrightness',0.35);
|
|
const on = power.set('screenEnabled',true);
|
|
const last = power.set('screenBrightness',0.8);
|
|
release();
|
|
await Promise.all([first,...burst,off,dark,on,last]);
|
|
assert.equal(written.length,6);
|
|
assert.deepEqual(written.map(s=>[s.screenEnabled,s.screenBrightness]),[
|
|
[true,.99],[true,.99],[false,.99],[false,.35],[true,.35],[true,.8]
|
|
]);
|
|
});
|