mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 10:24:02 +00:00
58 lines
1.7 KiB
JavaScript
58 lines
1.7 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { MapStackController } from '../mapStackController.js';
|
|
import {
|
|
installRenderGovernor,
|
|
uninstallRenderGovernor,
|
|
holdContinuousRender,
|
|
governorRequestRender,
|
|
getRenderGovernorDiagnostics,
|
|
} from '../renderGovernor.js';
|
|
|
|
test('destroy invalidates a pending imagery provider before it can touch the viewer', async () => {
|
|
let resolveProvider;
|
|
let removed = 0;
|
|
const changes = [];
|
|
const controller = new MapStackController(
|
|
{},
|
|
{ onChange: (state) => changes.push(state.status) },
|
|
);
|
|
controller._getImageryProvider = () =>
|
|
new Promise((resolve) => {
|
|
resolveProvider = resolve;
|
|
});
|
|
controller._removeImageryErrorListener = () => {
|
|
removed++;
|
|
};
|
|
const switching = controller.setStack('osm');
|
|
controller.destroy();
|
|
resolveProvider({ provider: {} });
|
|
await switching;
|
|
assert.equal(removed, 1);
|
|
assert.deepEqual(changes, ['switching']);
|
|
await controller.setStack('osm');
|
|
controller.destroy();
|
|
assert.equal(removed, 1);
|
|
});
|
|
|
|
test('uninstall only releases the current viewer and makes later render requests inactive', () => {
|
|
let renders = 0;
|
|
const viewer = {
|
|
scene: {
|
|
requestRender: () => {
|
|
renders++;
|
|
},
|
|
},
|
|
};
|
|
installRenderGovernor(viewer);
|
|
holdContinuousRender('fixture');
|
|
uninstallRenderGovernor({});
|
|
assert.equal(getRenderGovernorDiagnostics().installed, true);
|
|
uninstallRenderGovernor(viewer);
|
|
const before = renders;
|
|
governorRequestRender('late');
|
|
assert.equal(renders, before);
|
|
assert.equal(getRenderGovernorDiagnostics().installed, false);
|
|
assert.deepEqual(getRenderGovernorDiagnostics().holds, []);
|
|
});
|