mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
101 lines
3.8 KiB
JavaScript
101 lines
3.8 KiB
JavaScript
import { test, beforeEach } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
installRenderGovernor,
|
|
holdContinuousRender,
|
|
releaseContinuousRender,
|
|
governorRequestRender,
|
|
getRenderGovernorDiagnostics,
|
|
_resetRenderGovernorForTest,
|
|
} from './renderGovernor.js';
|
|
|
|
function makeViewer() {
|
|
const calls = { requestRender: 0 };
|
|
const scene = {
|
|
requestRenderMode: false,
|
|
maximumRenderTimeChange: 0,
|
|
requestRender() { calls.requestRender += 1; },
|
|
};
|
|
return { viewer: { scene }, scene, calls };
|
|
}
|
|
|
|
beforeEach(() => _resetRenderGovernorForTest());
|
|
|
|
test('install with zero holds enters idle mode and pins maximumRenderTimeChange', () => {
|
|
const { viewer, scene } = makeViewer();
|
|
installRenderGovernor(viewer);
|
|
assert.equal(scene.requestRenderMode, true);
|
|
assert.equal(scene.maximumRenderTimeChange, Infinity);
|
|
assert.equal(getRenderGovernorDiagnostics().mode, 'idle');
|
|
});
|
|
|
|
test('a hold flips to continuous; releasing the last hold returns to idle with a settling frame', () => {
|
|
const { viewer, scene, calls } = makeViewer();
|
|
installRenderGovernor(viewer);
|
|
const settleBaseline = calls.requestRender;
|
|
holdContinuousRender('flights');
|
|
assert.equal(scene.requestRenderMode, false);
|
|
assert.equal(getRenderGovernorDiagnostics().mode, 'continuous');
|
|
releaseContinuousRender('flights');
|
|
assert.equal(scene.requestRenderMode, true);
|
|
// Entering idle renders one settling frame.
|
|
assert.equal(calls.requestRender, settleBaseline + 1);
|
|
});
|
|
|
|
test('holds are identity-keyed: double-hold cannot leak, double-release cannot corrupt', () => {
|
|
const { viewer, scene } = makeViewer();
|
|
installRenderGovernor(viewer);
|
|
holdContinuousRender('traffic');
|
|
holdContinuousRender('traffic');
|
|
releaseContinuousRender('traffic');
|
|
assert.equal(scene.requestRenderMode, true, 'single release clears an idempotent double-hold');
|
|
releaseContinuousRender('traffic');
|
|
releaseContinuousRender('never-held');
|
|
assert.equal(scene.requestRenderMode, true);
|
|
});
|
|
|
|
test('mode stays continuous until the LAST holder releases', () => {
|
|
const { viewer, scene } = makeViewer();
|
|
installRenderGovernor(viewer);
|
|
holdContinuousRender('flights');
|
|
holdContinuousRender('satellites');
|
|
releaseContinuousRender('flights');
|
|
assert.equal(scene.requestRenderMode, false);
|
|
assert.deepEqual(getRenderGovernorDiagnostics().holds, ['satellites']);
|
|
releaseContinuousRender('satellites');
|
|
assert.equal(scene.requestRenderMode, true);
|
|
});
|
|
|
|
test('governorRequestRender forwards to the scene and records reasons only in idle mode', () => {
|
|
const { viewer, calls } = makeViewer();
|
|
installRenderGovernor(viewer);
|
|
const baseline = calls.requestRender;
|
|
governorRequestRender('layer-tick:earthquakes');
|
|
assert.equal(calls.requestRender, baseline + 1);
|
|
assert.equal(getRenderGovernorDiagnostics().recentRequests.at(-1).reason, 'layer-tick:earthquakes');
|
|
holdContinuousRender('flights');
|
|
const idleRequests = getRenderGovernorDiagnostics().recentRequests.length;
|
|
governorRequestRender('slider');
|
|
assert.equal(
|
|
getRenderGovernorDiagnostics().recentRequests.length,
|
|
idleRequests,
|
|
'continuous-mode requests are not recorded as idle diagnostics',
|
|
);
|
|
});
|
|
|
|
test('hold/release/request are safe no-ops before install (test environments without a viewer)', () => {
|
|
holdContinuousRender('flights');
|
|
releaseContinuousRender('flights');
|
|
governorRequestRender('noop');
|
|
assert.equal(getRenderGovernorDiagnostics().installed, false);
|
|
});
|
|
|
|
test('holds registered before install apply at install time', () => {
|
|
holdContinuousRender('flights');
|
|
const { viewer, scene } = makeViewer();
|
|
installRenderGovernor(viewer);
|
|
assert.equal(scene.requestRenderMode, false, 'pre-install hold keeps continuous mode');
|
|
releaseContinuousRender('flights');
|
|
assert.equal(scene.requestRenderMode, true);
|
|
});
|