25 lines
1.3 KiB
JavaScript
25 lines
1.3 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");
|
|
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 }] };
|
|
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.");
|