const { test } = require('node:test'); const assert = require('node:assert'); const path = require('node:path'); const { scanSpriteSourceDir } = require('../src/scan-sprite'); const FRESH = path.resolve(__dirname, 'fixtures/sprite-fresh'); const COLLISION = path.resolve(__dirname, 'fixtures/sprite-collision'); test('scan-sprite: 4 PNGs, alphabetical, no errors', () => { const { sources, errors } = scanSpriteSourceDir(FRESH, {}); assert.deepStrictEqual(errors, []); assert.strictEqual(sources.length, 4); assert.strictEqual(sources[0].alias, 'barrel_large'); assert.strictEqual(sources[1].alias, 'bed1'); assert.strictEqual(sources[2].alias, 'bench1'); assert.strictEqual(sources[3].alias, 'sack'); }); test('scan-sprite: sources carry sourcePath + sourceFile', () => { const { sources } = scanSpriteSourceDir(FRESH, {}); assert.ok(sources[1].sourcePath.endsWith('Bed1.png')); assert.strictEqual(sources[1].sourceFile, 'Bed1.png'); }); test('scan-sprite: alias collision -> loud error', () => { const { sources, errors } = scanSpriteSourceDir(COLLISION, {}); assert.strictEqual(sources.length, 0); assert.strictEqual(errors.length, 1); assert.match(errors[0], /alias collision/i); assert.match(errors[0], /bench_table1/); }); test('scan-sprite: missing dir -> error', () => { const { sources, errors } = scanSpriteSourceDir('/nonexistent/path', {}); assert.strictEqual(sources.length, 0); assert.ok(errors[0].includes('does not exist')); }); test('scan-sprite: applies stripPrefix option', () => { const { sources, errors } = scanSpriteSourceDir(FRESH, { stripPrefix: 'Bed', }); assert.deepStrictEqual(errors, []); // Bed1 -> 1, Bench1 not stripped -> bench1, etc. const aliases = sources.map(s => s.alias).sort(); assert.ok(aliases.includes('1')); });