#!/usr/bin/env node "use strict"; const assert = require("assert"); const fs = require("fs"); const os = require("os"); const path = require("path"); const { SCHEMA, buildNativeTrafficSimulation } = require("./lib/native-preview-traffic-simulation"); const areaDir = fs.mkdtempSync(path.join(os.tmpdir(), "native-preview-traffic-")); const nativeRoadDir = path.join(areaDir, "native-road"); const layersDir = path.join(nativeRoadDir, "layers"); fs.mkdirSync(layersDir, { recursive: true }); const roads = [ { id: "road:a", centerline: [[120, 30], [120.001, 30]], sourceNodeIds: ["a", "b"] }, { id: "road:b", centerline: [[120.001, 30], [120.001, 30.001]], sourceNodeIds: ["b", "c"] }, { id: "road:c", centerline: [[120.001, 30.001], [120, 30.001]], sourceNodeIds: ["c", "d"] }, ]; const movements = [ ["road:a", "road:b", "left"], ["road:b", "road:c", "through"], ["road:c", "road:a", "right"], ].map(([fromRoadId, toRoadId, turn], index) => ({ id: `movement:${index}`, connectorId: `connector:${index}`, fromRoadId, toRoadId, turn, geometryPublished: true })); fs.writeFileSync(path.join(nativeRoadDir, "compiled.json"), JSON.stringify({ model: { roads }, movements })); fs.writeFileSync(path.join(nativeRoadDir, "traffic-signals.json"), JSON.stringify({ signals: [{ id: "osm-signal-1", phaseGroup: 0, approachId: "way:a", sourceWayId: "a", stopLongitude: 120.0009, stopLatitude: 30, enabled: true }] })); fs.writeFileSync(path.join(layersDir, "connectors.geojson"), JSON.stringify({ type: "FeatureCollection", features: movements.map((movement, index) => ({ type: "Feature", properties: { movement_id: movement.id }, geometry: { type: "LineString", coordinates: [[[120.001, 30], [120.001, 30.0001]], [[120.001, 30.001], [120.0009, 30.001]], [[120, 30.001], [120, 30.0009]]][index] } })) })); fs.writeFileSync(path.join(layersDir, "vehicle_stop_lines.geojson"), JSON.stringify({ type: "FeatureCollection", features: [{ type: "Feature", properties: { road_id: "road:a" }, geometry: { type: "Polygon", coordinates: [] } }] })); fs.writeFileSync(path.join(layersDir, "lane_centerlines.geojson"), JSON.stringify({ type: "FeatureCollection", features: roads.map((road) => ({ type: "Feature", properties: { road_id: road.id, lane_index: 1 }, geometry: { type: "LineString", coordinates: road.centerline } })) })); const descriptor = buildNativeTrafficSimulation({ id: "fixture", outputs: { areaDir } }, { nativePackage: { rootDir: nativeRoadDir } }); assert.equal(descriptor.schema, SCHEMA); assert.equal(descriptor.coordinateSystem.route, "WGS84"); assert.ok(descriptor.routes.length >= 1); assert.ok(descriptor.routes.some((route) => route.connectors.length === 3)); assert.ok(descriptor.routes.some((route) => route.stops.some((stop) => stop.signalId === "osm-signal-1"))); assert.equal(descriptor.migration.legacyDependency, false); assert.equal(descriptor.source.length, 5); fs.rmSync(areaDir, { recursive: true, force: true }); console.log("Native preview traffic tests passed.");