mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-15 15:52:21 +00:00
Layer display tests no longer re-check Cesium primitives in every layer: they run on the fake engine, and one Cesium translation check per ground kind lives in the Cesium engine's ground tests. Their harnesses are shared, and the fake-engine, Cesium-engine and flights tests that repeated the contract suite are gone, 340 tests in all. The press-travel measurement is shared by the selection dispatcher and CCTV, which loses its ScreenSpaceEventHandler shim and world-click module. ALPR, installations and bikeshare share one selection keeper and selected marker write. Layers with their own click rules keep their handlers. Navara's pulse is a class like the ground pass, the ground and imagery passes share the surface uniforms, and the colour, log-depth and occlusion GLSL lives in one chunk module, each caller keeping its depth bias. The ground suite runs inside the contract suite (--only=ground:), and fixture and script names say what they test. Behaviour is unchanged on both engines.
83 lines
3.1 KiB
JavaScript
83 lines
3.1 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import { stations, installRadioFixture } from './fixtures/layers/radio.mjs';
|
|
import { createStrict, localPreview, openPage, waitForEngine } from './qa-strict-harness.mjs';
|
|
const url = localPreview(process.argv[2]);
|
|
// The long soak and switch timings live in qa-strict-soak.mjs.
|
|
url.search = '?engine=navara&welcome=0';
|
|
url.hash = 'v=2&lat=30.27&lon=-97.74&alt=12000&pitch=-90&map=sentinel2&l=';
|
|
const strict = createStrict({ origin: url.origin, layers: ['radio'] });
|
|
await strict.run({}, async (browser) => {
|
|
const { page: page, errors } = await openPage(browser);
|
|
await page.setViewport({ width: 800, height: 600 });
|
|
await installRadioFixture(page);
|
|
await page.goto(url.href);
|
|
await waitForEngine(page, 'navara');
|
|
await page.evaluate(async (id) => {
|
|
const { dataManager, styleManager } = window.__godsEyeView;
|
|
await styleManager.initialRestorePromise;
|
|
|
|
window.qaLayer = dataManager.layers.get('radio').module;
|
|
await dataManager.setEnabled('radio', true, { origin: 'user' });
|
|
}, stations[0].id);
|
|
await page.waitForFunction(() => window.qaLayer?.getStats().count === 750);
|
|
await page.evaluate((id) => {
|
|
window.qaLayer.selectStation(id, {
|
|
autoplay: true,
|
|
focus: false,
|
|
origin: 'user',
|
|
});
|
|
window.qaLayer.setRadioVolume(0.36);
|
|
}, stations[10].id);
|
|
await page.waitForFunction(
|
|
() =>
|
|
window.__qaRadio.plays.length === 1 &&
|
|
window.qaLayer.getUIState().audioState === 'playing',
|
|
);
|
|
const first = await page.evaluate(() => {
|
|
window.qaAudio = window.qaPlayer;
|
|
window.qaSnapshot = window.qaLayer.getAcceptedCatalogSnapshot();
|
|
return window.__qaRadio.reads;
|
|
});
|
|
for (const kind of ['cesium', 'navara']) {
|
|
await strict.switchTo(page, kind);
|
|
const state = await page.evaluate(() => ({
|
|
same:
|
|
window.qaLayer ===
|
|
window.__godsEyeView.dataManager.layers.get('radio').module,
|
|
player: window.qaAudio === window.qaPlayer,
|
|
snapshot:
|
|
window.qaSnapshot === window.qaLayer.getAcceptedCatalogSnapshot(),
|
|
plays: window.__qaRadio.plays.length,
|
|
reads: window.__qaRadio.reads,
|
|
state: window.qaLayer.getUIState(),
|
|
count: window.qaLayer.getStats().count,
|
|
}));
|
|
console.log(
|
|
kind,
|
|
state.count,
|
|
state.state.selected?.id,
|
|
state.state.audioState,
|
|
state.plays,
|
|
state.reads,
|
|
);
|
|
assert.ok(state.same && state.player && state.snapshot);
|
|
assert.equal(state.plays, 1);
|
|
assert.equal(state.reads, first);
|
|
assert.equal(state.count, 750);
|
|
assert.equal(state.state.audioState, 'playing');
|
|
assert.equal(state.state.selected.id, stations[10].id);
|
|
assert.equal(state.state.volume, 0.36);
|
|
// The fixture's HTMLMediaElement.prototype.play counts play() calls: the
|
|
// switch must not start the stream again.
|
|
await strict.passed(
|
|
page,
|
|
'radio',
|
|
'same model, player element and catalog snapshot; 750 stations, one catalog read, no second play(), same station playing at volume 0.36',
|
|
);
|
|
}
|
|
assert.deepEqual(errors, []);
|
|
console.log(
|
|
'PASS one live radio player, one station directory and the same selection',
|
|
);
|
|
});
|