Preserve onboard preview recordings across backpressure and share the complete spatial scene
This commit is contained in:
@@ -191,11 +191,13 @@ test("XGRIDS frontend is physically plugin-owned and split by operator pipeline"
|
||||
assert.match(spatialControls, /role="alert"/);
|
||||
assert.doesNotMatch(spatialControls, /Повторить остановку/);
|
||||
assert.match(spatialControls, /stopLocalReceiver/);
|
||||
assert.match(spatialControls, /<ActivityIndicator size="compact"/);
|
||||
assert.match(spatialControls, /aria-busy=\{phase\.busy\}/);
|
||||
assert.match(spatialControls, /K1 калибруется и готовит облако точек/);
|
||||
assert.match(spatialControls, /Первые данные могут появиться через десятки секунд/);
|
||||
assert.match(spatialControls, /Не перемещайте устройство/);
|
||||
assert.match(spatialControls, /<K1SpatialSession/);
|
||||
const spatialSession = readFileSync(join(pluginFrontendRoot, "components/K1SpatialSession.tsx"), "utf8");
|
||||
assert.match(spatialSession, /<ActivityIndicator size="compact"/);
|
||||
assert.match(spatialSession, /aria-busy=\{phase\.busy\}/);
|
||||
assert.match(spatialSession, /K1 калибруется и готовит облако точек/);
|
||||
assert.match(spatialSession, /Первые данные могут появиться через десятки секунд/);
|
||||
assert.match(spatialSession, /Не перемещайте устройство/);
|
||||
|
||||
const styles = readFileSync(join(pluginFrontendRoot, "styles.css"), "utf8");
|
||||
assert.doesNotMatch(styles, /@keyframes xgrids-k1-spin/);
|
||||
|
||||
@@ -37,7 +37,7 @@ test('active acquisition exposes STOP and Rerun without another START',()=>{
|
||||
assert.match(markup,/Остановить устройство/);
|
||||
assert.match(markup,/rerun-viewport__canvas/);
|
||||
assert.match(markup,/>Статус</);
|
||||
assert.match(markup,/>Пространственная модель</);
|
||||
assert.match(markup,/>Пространственная сцена</);
|
||||
for(const label of ['Движок','Слои','Отображение','Камера K1','Окно накопления облака точек'])assert.ok(markup.includes(label));
|
||||
assert.ok(markup.includes('data-presented="false"'));
|
||||
assert.ok(!markup.includes('Loading Rerun'));
|
||||
@@ -53,8 +53,8 @@ test('calibration loader stays inside the primary action',()=>{
|
||||
const starting={...device,control:{...device.control,can_start:false},snapshot:{...device.snapshot,acquisition:'starting'}};
|
||||
const markup=render(starting);
|
||||
assert.match(markup,/<button[^>]*aria-busy="true"[\s\S]*?nodedc-activity-indicator[\s\S]*?Запускаем устройство<\/button>/);
|
||||
assert.equal((markup.match(/nodedc-activity-indicator"/g)||[]).length,1);
|
||||
assert.doesNotMatch(markup,/Остановить устройство|k1-preview-spatial/);
|
||||
assert.match(markup,/K1 калибруется и готовит облако точек/);
|
||||
assert.doesNotMatch(markup,/Обновить просмотр/);
|
||||
});
|
||||
test('completed STOP remains visible while the control connection is checked again',()=>{
|
||||
const stopped={...device,online:false,verified:false,control:{...device.control,phase:'completed',can_start:false,network_applied:true}};
|
||||
|
||||
@@ -78,3 +78,16 @@ test('onboard camera admits immediate sourceopen and ignores callbacks after clo
|
||||
assert.equal(ready,1);assert.equal(failed,0);
|
||||
}finally{globalThis.MediaSource=saved.media;URL.createObjectURL=saved.create;URL.revokeObjectURL=saved.revoke;}
|
||||
});
|
||||
|
||||
test('a recovered media peer resumes a recording without reinserting old RRD batches',async()=>{
|
||||
const {previewRecording}=await server.ssrLoadModule('@xgrids-k1/frontend/sensors/previewFrames.ts');
|
||||
const sent=[];const cursor=previewRecording(value=>sent.push(value));
|
||||
const payload=new Uint8Array(12);payload.set([82,82,70,50]);
|
||||
assert.equal(cursor.accept(1,payload),true);
|
||||
// The ACK was lost, so the new peer resends the exact complete batch.
|
||||
assert.equal(cursor.accept(1,payload),false);
|
||||
assert.equal(cursor.after,1);
|
||||
assert.throws(()=>cursor.accept(3,payload),/cursor gap/);
|
||||
assert.equal(cursor.accept(2,payload),true);
|
||||
assert.equal(sent.length,2);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user