44 lines
2.9 KiB
JavaScript
44 lines
2.9 KiB
JavaScript
import test from 'node:test';
|
||
import assert from 'node:assert/strict';
|
||
import {readFileSync} from 'node:fs';
|
||
import ts from 'typescript';
|
||
|
||
const source=readFileSync(new URL('../../../plugins/insta360-x4/frontend/src/model.ts',import.meta.url),'utf8');
|
||
const code=ts.transpileModule(source,{compilerOptions:{module:ts.ModuleKind.ESNext}}).outputText;
|
||
const {cameraLabel,cameraStatus,resolutionLabel,cameraRowActions}=await import('data:text/javascript;base64,'+Buffer.from(code).toString('base64'));
|
||
const camera={id:'instax4_synthetic_a',online:true,configured:true,prepared:true,snapshot:{enrollment:'enrolled'},camera_status:{connected:true,recording:0,preview:0,function_mode:7}};
|
||
|
||
test('SD recording remains visible after preview closes, independently for each camera',()=>{
|
||
const recording={...camera,camera_status:{...camera.camera_status,recording:1}};
|
||
assert.equal(cameraLabel(recording,true).label,'Запись на карту камеры');
|
||
assert.equal(cameraLabel({...camera,id:'instax4_synthetic_b'},true).label,'Подключена');
|
||
assert.equal(cameraStatus(recording).preview,0);
|
||
});
|
||
test('stale and unconfirmed camera state never appears ready or actively recording',()=>{
|
||
assert.equal(cameraLabel({...camera,camera_status:{...camera.camera_status,recording:1}},false).tone,'neutral');
|
||
assert.equal(cameraLabel({...camera,camera_status:{}},true).tone,'warning');
|
||
assert.equal(cameraLabel({...camera,camera_status:{...camera.camera_status,preview:-1}},true).tone,'warning');
|
||
assert.equal(cameraStatus({...camera,camera_status:{preview:true,recording:'1',connected:1}}).preview,null);
|
||
});
|
||
test('installed model support does not enroll a new physical camera',()=>{
|
||
assert.equal(cameraLabel({...camera,configured:false},true).label,'Требуется подготовка');
|
||
assert.equal(cameraLabel({...camera,initializable:false},true).tone,'warning');
|
||
});
|
||
test('SDK resolution names are presented with their actual dimensions and frame rate',()=>{
|
||
assert.equal(resolutionLabel('3840_1920_30'),'3840 × 1920 · 30 кадр/с');
|
||
});
|
||
|
||
test('manual wake is available for an enrolled offline camera with automatic recovery disabled',()=>{
|
||
const offline={...camera,online:false,camera_status:{recovery:{supported:true,enabled:false,wake_available:true}}};
|
||
assert.equal(cameraRowActions(offline)[0].actionId,'power.wake');
|
||
assert.equal(cameraRowActions(offline)[0].disabled,false);
|
||
assert.deepEqual(cameraRowActions({...offline,online:true}),[]);
|
||
assert.equal(cameraRowActions({...offline,configured:false})[0].disabled,true);
|
||
assert.equal(cameraRowActions({...offline,prepared:false})[0].disabled,true);
|
||
assert.equal(offline.camera_status.recovery.enabled,false);
|
||
});
|
||
test('old drivers and unknown wake identities never offer an active power command',()=>{
|
||
assert.deepEqual(cameraRowActions(camera),[]);
|
||
assert.equal(cameraRowActions({...camera,online:false,camera_status:{recovery:{supported:true}}})[0].disabled,true);
|
||
});
|