airship-phaser/tests/assets.test.mjs

43 lines
1.4 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import topHud from '../src/assets/controller/top-hud.js';
import leftStatus from '../src/assets/controller/left-status.js';
import rightControls from '../src/assets/controller/right-controls.js';
import cannonRoundel from '../src/assets/controller/cannon-roundel.js';
import helmFrame from '../src/assets/controller/helm-frame.js';
import helmKnob from '../src/assets/controller/helm-knob.js';
const assets = {
topHud,
leftStatus,
rightControls,
cannonRoundel,
helmFrame,
helmKnob,
};
const decodeWebP = (name, dataUrl) => {
const match = /^data:image\/webp;base64,([A-Za-z0-9+/=]+)$/.exec(dataUrl);
assert.ok(match, `${name} must be a WebP data URL`);
const bytes = Buffer.from(match[1], 'base64');
assert.equal(bytes.subarray(0, 4).toString('ascii'), 'RIFF', `${name} RIFF header`);
assert.equal(bytes.subarray(8, 12).toString('ascii'), 'WEBP', `${name} WEBP signature`);
const declaredSize = bytes.readUInt32LE(4) + 8;
assert.equal(
bytes.length,
declaredSize,
`${name} must not be truncated: declared ${declaredSize}, actual ${bytes.length}`,
);
assert.ok(bytes.length > 100, `${name} should contain real image data`);
};
for (const [name, dataUrl] of Object.entries(assets)) {
test(`${name} WebP payload is structurally complete`, () => {
decodeWebP(name, dataUrl);
});
}