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());
});
}