51 lines
2.1 KiB
JavaScript
51 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert/strict');
|
|
const crypto = require('crypto');
|
|
const { execFileSync } = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const { unzipSync, strFromU8 } = require('fflate');
|
|
const { compiler } = require('../src');
|
|
const { exportNativeRoadPackage } = require('../src/export/native-road-package');
|
|
const { root, fixtureInputs, snapshot, baselineFile } = require('./fixture-baseline');
|
|
|
|
for (const input of fixtureInputs()) {
|
|
assert.ok(fs.existsSync(baselineFile(input.areaId)));
|
|
const { result } = compiler.compileInput(input);
|
|
assert.equal(result.areaId, input.areaId);
|
|
assert.ok(fs.existsSync(path.join(input.outDir, 'compiled.json')));
|
|
assert.deepEqual(snapshot(input), JSON.parse(fs.readFileSync(baselineFile(input.areaId), 'utf8')));
|
|
const first = exportNativeRoadPackage(input.outDir);
|
|
const second = exportNativeRoadPackage(input.outDir);
|
|
assert.equal(
|
|
crypto.createHash('sha256').update(first.bytes).digest('hex'),
|
|
crypto.createHash('sha256').update(second.bytes).digest('hex'),
|
|
);
|
|
const entries = unzipSync(first.bytes);
|
|
const manifest = JSON.parse(strFromU8(entries['manifest.json']));
|
|
assert.equal(manifest.areaId, input.areaId);
|
|
assert.equal(manifest.contract, 'native-road-package/v1.1');
|
|
assert.deepEqual(manifest.generator, { name: 'road-compiler', version: '0.3.0' });
|
|
assert.equal('source' in JSON.parse(strFromU8(entries['compiled.json'])), false);
|
|
assert.equal(
|
|
Object.keys(entries).some((entry) => entry.includes('override') || entry.endsWith('.osm')),
|
|
false,
|
|
);
|
|
assert.equal(Object.keys(entries).length, 18);
|
|
if (input.areaId === 'fengshu-er-road') {
|
|
const inputFile = path.join(path.dirname(input.outDir), 'road-compiler-input.json');
|
|
const archive = path.join(path.dirname(input.outDir), 'export.zip');
|
|
fs.writeFileSync(inputFile, `${JSON.stringify(input)}\n`);
|
|
execFileSync(process.execPath, [
|
|
path.join(root, 'bin', 'road-compiler.js'),
|
|
'--input',
|
|
inputFile,
|
|
'--export-zip',
|
|
archive,
|
|
]);
|
|
assert.ok(fs.existsSync(archive));
|
|
}
|
|
}
|
|
console.log('road compiler fixture tests passed');
|