Files
gods-eye-view/src/app/mapLifecycle.test.mjs
T

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, []);
});