mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-15 15:52:21 +00:00
- src/geo drops the ported debug argument checks and the tests that bitExact already covers; package boundaries accept a directory entry, so src/geo/ is listed once per group. - Cesium no longer carries movers and lines nobody draws with: they are optional engine capabilities. The fake engine and the Cesium camera use the shared cameraMath; unused contract tables, clock.ticked, the 'finest' surface detail and Navara click statistics are gone. - ALPR keeps one overlay core and one presentation model for both engines, bikeshare one station bookkeeping, the Navara ground effects one definition helper; image atlases, view centres, mover banks and colours are shared. - The legacy switch route, the clock offset and rate controls and other unused exports are removed. - The acceptance runs the Navara draw, geo import and scope checks; scenarios use the harness switch and page helpers; the main chunk check keeps the size budget only and runs once in CI.
96 lines
3.2 KiB
JavaScript
96 lines
3.2 KiB
JavaScript
// Contract: a cold start loads only the engine it starts. From the network
|
|
// log of a fresh page:
|
|
// - a cold Navara start requests nothing of the Cesium library (/cesium/…:
|
|
// Cesium.js, its workers and assets);
|
|
// - a cold Cesium start requests no chunk that carries three or Navara code
|
|
// (the FORBIDDEN_MARKERS of src/tooling/mainChunk.js) and no Navara wasm.
|
|
// Control: after a pick to the other engine, its code is requested, so the
|
|
// detection sees what it is looking for.
|
|
//
|
|
// node scripts/qa-strict-cold-chunks.mjs http://127.0.0.1:4208
|
|
|
|
import assert from 'node:assert/strict';
|
|
import { forbiddenMarkersIn } from '../src/tooling/mainChunk.js';
|
|
import {
|
|
createStrict,
|
|
localPreview,
|
|
waitForEngine,
|
|
} from './qa-strict-harness.mjs';
|
|
import { installSessionFixtures, openApp } from './qa-strict-session.mjs';
|
|
|
|
const base = localPreview(process.argv[2]);
|
|
const strict = createStrict({ origin: base.origin, layers: [] });
|
|
const contents = new Map();
|
|
// The preview's own file: three or Navara markers in it?
|
|
const markersOf = async (url) => {
|
|
if (!contents.has(url))
|
|
contents.set(
|
|
url,
|
|
fetch(url)
|
|
.then((r) => r.text())
|
|
.then(forbiddenMarkersIn),
|
|
);
|
|
return contents.get(url);
|
|
};
|
|
const cesiumCode = (url) => new URL(url).pathname.startsWith('/cesium/');
|
|
const navaraCode = async (url) => {
|
|
const { pathname } = new URL(url);
|
|
if (/navara.*\.wasm$/.test(pathname)) return ['navara wasm'];
|
|
if (!pathname.endsWith('.js') || pathname.startsWith('/cesium/')) return [];
|
|
return markersOf(url);
|
|
};
|
|
const results = [];
|
|
strict.extra.contracts = results;
|
|
await strict.run({}, async (b) => {
|
|
for (const start of ['navara', 'cesium']) {
|
|
const p = await b.newPage();
|
|
await p.setViewport({ width: 1280, height: 800 });
|
|
const urls = [];
|
|
p.on('request', (request) => {
|
|
if (request.url().startsWith(base.origin)) urls.push(request.url());
|
|
});
|
|
await installSessionFixtures(p);
|
|
await openApp(p, base.origin, start);
|
|
// Let lazy loads that follow the start (workers, idle prefetch) happen.
|
|
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
const before = [...urls];
|
|
const other = start === 'navara' ? 'cesium' : 'navara';
|
|
await strict.pick(p, other);
|
|
await waitForEngine(p, other);
|
|
const after = urls.slice(before.length);
|
|
const otherCode = async (list) => {
|
|
const found = [];
|
|
for (const url of list)
|
|
if (
|
|
other === 'cesium'
|
|
? cesiumCode(url)
|
|
: (await navaraCode(url)).length > 0
|
|
)
|
|
found.push(new URL(url).pathname);
|
|
return [...new Set(found)];
|
|
};
|
|
const row = {
|
|
start,
|
|
otherEngine: other,
|
|
loadedAtColdStart: await otherCode(before),
|
|
loadedAfterPick: (await otherCode(after)).length,
|
|
};
|
|
results.push(row);
|
|
console.log(
|
|
row.loadedAtColdStart.length ? 'FAIL' : 'PASS',
|
|
JSON.stringify(row),
|
|
);
|
|
await p.close();
|
|
}
|
|
for (const row of results)
|
|
assert.ok(
|
|
row.loadedAfterPick > 0,
|
|
`control: picking ${row.otherEngine} loads its code`,
|
|
);
|
|
assert.deepEqual(
|
|
results.filter((row) => row.loadedAtColdStart.length),
|
|
[],
|
|
'a cold start loaded the other engine',
|
|
);
|
|
});
|