#!/usr/bin/env node "use strict"; const assert = require("assert"); const { compileRoadModel, compileGeometry, validateOverrides } = require("./lib/native-road"); const osm = ``; const empty = { schema: "native-road-overrides/v1", overrides: [] }; const initial = compileRoadModel(osm, empty); assert.equal(initial.roads.length, 3); const target = initial.roads.find((road) => road.id === "road:way/10:forward"); const overrides = validateOverrides({ schema: "native-road-overrides/v1", overrides: [{ id: "road-width", kind: "road", roadId: target.id, widthMeters: 9, laneCount: 2, sidewalkLeft: false }] }, initial); const model = compileRoadModel(osm, overrides); const edited = model.roads.find((road) => road.id === target.id); assert.equal(edited.widthMeters, 9); assert.equal(edited.provenance.widthMeters, "override:road-width"); assert.equal(edited.sidewalkLeft, false); const geometry = compileGeometry(model); assert.equal(geometry.roadSurface.features.length, 2); assert.ok(geometry.roadSurface.features.every((feature) => feature.geometry.coordinates[0].length >= 5)); const connection = initial.connections[0]; assert.ok(initial.connections.every((item) => item.fromEndpointId.endsWith(":end") && item.toEndpointId.endsWith(":start"))); assert.equal(initial.connections.length, new Set(initial.connections.map((item) => `${item.fromEndpointId}->${item.toEndpointId}`)).size); const connectionOverrides = validateOverrides({ schema: "native-road-overrides/v1", overrides: [{ id: "disconnect", kind: "junction-connection", fromEndpointId: connection.fromEndpointId, toEndpointId: connection.toEndpointId, enabled: false }] }, initial); assert.equal(validateOverrides(connectionOverrides).overrides.length, 1); assert.equal(compileRoadModel(osm, connectionOverrides).connections.find((item) => item.id === connection.id).enabled, false); assert.throws(() => validateOverrides({ schema: "native-road-overrides/v1", overrides: [{ id: "bad", kind: "road", roadId: "missing", widthMeters: 4 }] }, initial), /Unknown road/); console.log("native road tests passed");