"use strict"; const assert = require("assert/strict"); const crypto = require("crypto"); const { execFileSync } = require("child_process"); const fs = require("fs"); const path = require("path"); const { unzipSync, strFromU8 } = require("fflate"); const { compiler } = require("../src"); const { exportNativeRoadPackage } = require("../src/export/native-road-package"); const root = path.resolve(__dirname, ".."); for (const areaId of ["fengshu-er-road", "nantaizi-lake-innovation-valley"]) { const isFengshu = areaId === "fengshu-er-road"; const outputRoot = path.join(root, "outputs", areaId); const input = { areaId, osmFile: path.join(root, "inputs", "osm", isFengshu ? "枫树二路.osm" : "南台子湖创新谷OSM.osm"), outDir: path.join(outputRoot, "native-road"), stagingDir: path.join(outputRoot, "_pipeline"), overridesFile: path.join(outputRoot, "native-road-overrides.json"), trafficSignalsFile: path.join(outputRoot, "native-traffic-signals.json"), comparisonDir: path.join(outputRoot, "osm2streets_web_out"), options: { edgeLines: false, junctionTemplates: { enabled: false, references: [] } }, }; assert.ok(fs.existsSync(path.join(root, "test", "baseline", `${areaId}.json`))); const { result } = compiler.compileInput(input); assert.equal(result.areaId, areaId); assert.ok(fs.existsSync(path.join(input.outDir, "compiled.json"))); const first = exportNativeRoadPackage(input.outDir); const second = exportNativeRoadPackage(input.outDir); assert.equal(crypto.createHash("sha256").update(first.bytes).digest("hex"), crypto.createHash("sha256").update(second.bytes).digest("hex")); const entries = unzipSync(first.bytes); const manifest = JSON.parse(strFromU8(entries["manifest.json"])); assert.equal(manifest.areaId, areaId); assert.equal(manifest.contract, "native-road-package/v1.1"); assert.deepEqual(manifest.generator, { name: "road-compiler", version: "0.3.0" }); assert.equal("source" in JSON.parse(strFromU8(entries["compiled.json"])), false); assert.equal(Object.keys(entries).some((entry) => entry.includes("override") || entry.endsWith(".osm")), false); assert.equal(Object.keys(entries).length, 18); if (isFengshu) { const inputFile = path.join(outputRoot, "road-compiler-input.json"); const archive = path.join(outputRoot, "export.zip"); fs.writeFileSync(inputFile, `${JSON.stringify(input)}\n`); execFileSync(process.execPath, [path.join(root, "bin", "road-compiler.js"), "--input", inputFile, "--export-zip", archive]); assert.ok(fs.existsSync(archive)); } } console.log("road compiler fixture tests passed");