29 lines
2.4 KiB
JavaScript
29 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
"use strict";
|
|
|
|
const assert = require("assert");
|
|
const { compileRoadModel, compileGeometry, validateOverrides } = require("./lib/native-road");
|
|
|
|
const osm = `<osm><node id="1" lon="114" lat="30"/><node id="2" lon="114.001" lat="30"/><node id="3" lon="114.001" lat="30.001"/><way id="10"><nd ref="1"/><nd ref="2"/><tag k="highway" v="residential"/><tag k="lanes" v="2"/><tag k="sidewalk" v="both"/></way><way id="11"><nd ref="2"/><nd ref="3"/><tag k="highway" v="residential"/><tag k="oneway" v="yes"/></way></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");
|