import 'package:clide/src/draw/draw_dispatch.dart'; import 'package:clide/src/draw/draw_doc.dart'; import 'package:test/test.dart'; void main() { DrawingFileReader reader(Map files) => (p) async => files[p]; Future resolve(DrawingCardDoc doc, DrawingRegistry reg, {Map files = const {}}) => resolveDrawingSvg(doc, reg, readFile: reader(files)); group('resolveDrawingSvg', () { test('primitive: inline svg passes through', () async { final r = await resolve(parseDrawingCardDoc({'svg': ''})!, DrawingRegistry()); expect((r as DrawOk).svg, ''); }); test('primitive: svgPath is read via the injected reader', () async { final r = await resolve(parseDrawingCardDoc({'svgPath': 'd.svg'})!, DrawingRegistry(), files: {'d.svg': ''}); expect((r as DrawOk).svg, ''); }); test('primitive: an unreadable svgPath is an honest error', () async { final r = await resolve(parseDrawingCardDoc({'svgPath': 'missing.svg'})!, DrawingRegistry()); expect(r, isA()); expect((r as DrawErr).message, contains('missing.svg')); }); test('primitive: no source at all is an error', () async { final r = await resolve(parseDrawingCardDoc(const {})!, DrawingRegistry()); expect(r, isA()); }); test('template: an unknown template is an error', () async { final r = await resolve(parseDrawingCardDoc({'template': 'd2', 'source': 'a -> b'})!, DrawingRegistry()); expect(r, isA()); expect((r as DrawErr).message, contains('d2')); }); test('template: a registered handler lowers the doc to SVG', () async { final reg = DrawingRegistry()..register('d2', (doc) async => DrawOk('')); final r = await resolve(parseDrawingCardDoc({'template': 'd2', 'source': 'a -> b'})!, reg); expect((r as DrawOk).svg, ''); }); test('template: a handler error propagates with its message', () async { final reg = DrawingRegistry()..register('d2', (_) async => const DrawErr('d2 not found')); final r = await resolve(parseDrawingCardDoc({'template': 'd2'})!, reg); expect((r as DrawErr).message, contains('d2 not found')); }); }); }