import 'package:code_buffer/code_buffer.dart'; import 'package:file/file.dart'; import 'package:file/memory.dart'; import 'package:jael/jael.dart' as jael; import 'package:jael_preprocessor/jael_preprocessor.dart' as jael; import 'package:symbol_table/symbol_table.dart'; import 'package:test/test.dart'; main() { FileSystem fileSystem; setUp(() { fileSystem = new MemoryFileSystem(); // a.jl fileSystem.file('a.jl').writeAsStringSync('a.jl'); // b.jl fileSystem.file('b.jl').writeAsStringSync( '

Hello

'); // c.jl fileSystem.file('c.jl').writeAsStringSync( 'Goodbye'); // d.jl fileSystem.file('d.jl').writeAsStringSync( 'Saluton!'); // e.jl fileSystem.file('e.jl').writeAsStringSync( 'Angel default'); // e.jl fileSystem.file('f.jl').writeAsStringSync( 'framework'); }); test('blocks are replaced or kept', () async { var file = fileSystem.file('c.jl'); var original = jael.parseDocument(await file.readAsString(), sourceUrl: file.uri, onError: (e) => throw e); var processed = await jael.resolve( original, fileSystem.directory(fileSystem.currentDirectory), onError: (e) => throw e); var buf = new CodeBuffer(); var scope = new SymbolTable(); const jael.Renderer().render(processed, buf, scope); print(buf); expect( buf.toString(), ''' a.jl Goodbye ''' .trim()); }); test('block resolution is recursive', () async { var file = fileSystem.file('d.jl'); var original = jael.parseDocument(await file.readAsString(), sourceUrl: file.uri, onError: (e) => throw e); var processed = await jael.resolve( original, fileSystem.directory(fileSystem.currentDirectory), onError: (e) => throw e); var buf = new CodeBuffer(); var scope = new SymbolTable(); const jael.Renderer().render(processed, buf, scope); print(buf); expect( buf.toString(), ''' a.jl Saluton!Goodbye ''' .trim()); }); test('blocks within blocks', () async { var file = fileSystem.file('f.jl'); var original = jael.parseDocument(await file.readAsString(), sourceUrl: file.uri, onError: (e) => throw e); var processed = await jael.resolve( original, fileSystem.directory(fileSystem.currentDirectory), onError: (e) => throw e); var buf = new CodeBuffer(); var scope = new SymbolTable(); const jael.Renderer().render(processed, buf, scope); print(buf); expect( buf.toString(), ''' a.jl Angel frameworkGoodbye ''' .trim()); }); }