Files
arah2/routing/test/loader-env.test.mjs
T
araharah-executor 0599ffe14f test(05-01): add failing fixture-source + loader-env suites (F1-F8, L1-L3)
- synthetic injected datasets only — never the network, never the committed file
- F3 pins the 200 m haversine tolerance boundary; F6 the defensive pair skip
- F7 the lazy-index source gate (LAW 1); L2 the esbuild inline marker
2026-10-24 05:02:08 +08:00

91 lines
3.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
/*
* loader-env.test.mjs — the three-environment loader proof (L1–L3).
* -----------------------------------------------------------------
* THE phase's top mechanical risk, mirroring search/test/loader-env.test.mjs
* (Phase 4): the fixture dataset must be reachable identically from
* (1) the bare-Node corpus runner (plan 05-02), (2) the Vite bundle
* (plan 05-04), and (3) the wrangler/esbuild bundle family. Workers have no
* fs, so the dataset MUST be a static build-time import — never a runtime
* retrieval.
*
* L1 bare Node — the seed JSON static-imports with `with { type: "json" }`
* under Node 24 type-stripping and exposes `pairs`
* L2 esbuild — the bundler family of BOTH wrangler and Vite INLINES the
* seed: the bundle text carries the `router.project-osrm.org` marker
* (the `_source` header survives inlining)
* L3 the committed EMPTY seed serves null through the whole default path
* (static import -> lazy index -> route()) — the honest corpus state
* until plan 05-02 fills it
*
* Run: npm run routing:test (exit 0 = all green)
*/
import { strict as assert } from "node:assert";
import { spawnSync } from "node:child_process";
import { mkdirSync, readFileSync } from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { test } from "./harness.mjs";
import fixturesSeed from "../src/data/route-fixtures.json" with { type: "json" };
const here = path.dirname(fileURLToPath(import.meta.url)); // routing/test
const routingDir = path.resolve(here, ".."); // routing/
const repoRoot = path.resolve(routingDir, ".."); // repo root
const esbuildBin = path.join(repoRoot, "node_modules", ".bin", "esbuild");
// Lazy index load — missing module => per-case ERR_MODULE_NOT_FOUND (the RED state).
let indexPromise = null;
function loadIndex() {
if (!indexPromise) {
indexPromise = import("../src/index.ts");
}
return indexPromise;
}
test("L1 bare-Node static JSON import — the seed parses under Node 24 type-stripping", () => {
assert.ok(Array.isArray(fixturesSeed.pairs), "the seed's pairs array is reachable");
assert.equal(fixturesSeed.version, 1);
assert.ok(
String(fixturesSeed._source).includes("router.project-osrm.org"),
"the bundle marker rides inside the committed seed",
);
});
test("L2 esbuild bundle marker — the wrangler/Vite bundler family inlines the seed", () => {
const outDir = "/tmp/opencode/araharah-routing-bundle";
mkdirSync(outDir, { recursive: true });
const outfile = path.join(outDir, "routing-bundle.mjs");
const bundle = spawnSync(
esbuildBin,
[
path.join(routingDir, "src", "index.ts"),
"--bundle",
"--format=esm",
`--outfile=${outfile}`,
"--log-level=error",
],
{ encoding: "utf8", timeout: 60000 },
);
assert.equal(bundle.status, 0, `esbuild bundle failed: ${bundle.stderr || bundle.stdout}`);
const bundled = readFileSync(outfile, "utf8");
assert.ok(
bundled.includes("router.project-osrm.org"),
"a static JSON import MUST be inlined at build time — a runtime retrieval would be a hard Worker failure",
);
});
test("L3 the empty committed seed serves null — the honest corpus state until 05-02", async () => {
const mod = await loadIndex();
const source = mod.createFixtureRoutingSource();
assert.equal(source.name, "fixture");
const result = await source.route({
origin: { lat: 3.1528, lng: 101.7038 },
destinationId: "kl-sentral",
});
assert.equal(
result,
null,
"the committed empty corpus must parse through the whole path and serve honest null",
);
});