Files
sprites/tools/build/test/graph.test.ts
Christopher Monsanto 0ee06d3a5b Add tools/build unit tests
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:03:13 -04:00

30 lines
1008 B
TypeScript

import assert from 'node:assert/strict';
import {test} from 'node:test';
import {getRules, resetRules, rule} from '../api.ts';
import {BuildError, checkGraph} from '../graph.ts';
test('checkGraph rejects duplicate outputs', () => {
resetRules();
rule('a.png', ['c1 %f %o'], 'out/x.png');
rule('b.png', ['c2 %f %o'], 'out/x.png');
assert.throws(() => checkGraph(getRules()), BuildError);
});
test('checkGraph rejects cycles', () => {
resetRules();
rule('gen/y', ['c1 %f %o'], 'gen/x');
rule('gen/x', ['c2 %f %o'], 'gen/y');
assert.throws(() => checkGraph(getRules()), /cycle/i);
});
test('checkGraph orders producers before consumers', () => {
resetRules();
rule('gen/mid', ['consume %f %o'], 'out/final');
rule('src/a', ['produce %f %o'], 'gen/mid');
const {order, generated} = checkGraph(getRules());
assert.deepEqual(order.map(r => r.outputs[0]), ['gen/mid', 'out/final']);
assert.deepEqual([...generated].sort(), ['gen/mid', 'out/final']);
});