mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-28 19:01:34 +00:00
29 lines
1.2 KiB
JavaScript
29 lines
1.2 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { GENERATED_FURNITURE_ART } from '../test-build/furniture-plan-art.generated.js';
|
|
import { parseSvgPath, transformSvgPath } from '../test-build/pdf/svg-path.js';
|
|
|
|
test('every designer furniture path converts to finite PDF vector operations', () => {
|
|
assert.ok(Object.keys(GENERATED_FURNITURE_ART).length >= 40);
|
|
for (const [id, art] of Object.entries(GENERATED_FURNITURE_ART)) {
|
|
const operations = parseSvgPath(art.d);
|
|
assert.ok(operations.length > 0, `${id} has no operations`);
|
|
for (const operation of operations) {
|
|
for (const value of Object.values(operation)) {
|
|
if (typeof value === 'number') assert.ok(Number.isFinite(value), `${id} contains ${value}`);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
test('arc and affine transforms become deterministic cubic paths', () => {
|
|
const first = transformSvgPath('M0 5A5 5 0 1 1 10 5Z', {
|
|
a: 2, b: 0, c: 0, d: 3, e: 7, f: 11,
|
|
});
|
|
const second = transformSvgPath('M0 5A5 5 0 1 1 10 5Z', {
|
|
a: 2, b: 0, c: 0, d: 3, e: 7, f: 11,
|
|
});
|
|
assert.deepEqual(first, second);
|
|
assert.ok(first.some((operation) => operation.op === 'C'));
|
|
assert.deepEqual(first.at(-1), { op: 'Z' });
|
|
});
|