Files
osmWorkflow/scripts/test-package-contract.js

26 lines
1.5 KiB
JavaScript

#!/usr/bin/env node
"use strict";
const assert = require("assert");
const fs = require("fs");
const os = require("os");
const path = require("path");
const { SCHEMA, validateManifest } = require("./lib/package-contract");
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "asset-package-"));
fs.mkdirSync(path.join(dir, "models"));
fs.writeFileSync(path.join(dir, "models", "area.glb"), "glb");
fs.writeFileSync(path.join(dir, "runtime.json"), "{}");
const valid = { schema: SCHEMA, packageVersion: "1.0.0", areaId: "area", coordinateSystem: { axes: "ENU", units: "meters", x: "east", y: "north", z: "up" }, placement: { longitude: 120, latitude: 30, height: 0, headingCorrectionDegrees: -90 }, bounds: { minLon: 119, minLat: 29, maxLon: 121, maxLat: 31 }, assets: [{ id: "main", role: "scene", category: "scene", uri: "models/area.glb", defaultLoad: true }], runtime: [{ id: "traffic-signals", type: "traffic-signal-anchors", uri: "runtime.json" }] };
assert.doesNotThrow(() => validateManifest(valid, dir));
for (const change of [
(m) => { m.schema = "bad"; }, (m) => { m.assets[0].uri = "../area.glb"; },
(m) => { m.assets[0].category = "dynamic"; }, (m) => { m.assets.push({ ...m.assets[0] }); },
(m) => { m.placement.longitude = 900; },
]) {
const manifest = JSON.parse(JSON.stringify(valid)); change(manifest);
assert.throws(() => validateManifest(manifest, dir));
}
fs.rmSync(dir, { recursive: true, force: true });
console.log("Asset package contract tests passed.");