Add controller asset integrity tests
This commit is contained in:
parent
90e44264a2
commit
9e24a5e1e1
42
tests/assets.test.mjs
Normal file
42
tests/assets.test.mjs
Normal file
@ -0,0 +1,42 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user