dataCasesInFile function
Parse and yield data cases (each a DataCase) from path
.
Implementation
Iterable<DataCase> dataCasesInFile(
{required String path, String? baseDir}) sync* {
var file = p.basename(path).replaceFirst(RegExp(r'\..+$'), '');
baseDir ??= p.relative(p.dirname(path), from: p.dirname(p.dirname(path)));
// Explicitly create a File, in case the entry is a Link.
var lines = File(path).readAsLinesSync();
var frontMatter = StringBuffer();
var i = 0;
while (!lines[i].startsWith('>>>')) {
frontMatter.write('${lines[i++]}\n');
}
while (i < lines.length) {
var description = lines[i++].replaceFirst(RegExp(r'>>>\s*'), '').trim();
var skip = description.startsWith('skip:');
if (description == '') {
description = 'line ${i + 1}';
} else {
description = 'line ${i + 1}: $description';
}
var input = '';
while (!lines[i].startsWith('<<<')) {
input += lines[i++] + '\n';
}
var expectedOutput = '';
while (++i < lines.length && !lines[i].startsWith('>>>')) {
expectedOutput += lines[i] + '\n';
}
var dataCase = DataCase(
directory: baseDir,
file: file,
front_matter: frontMatter.toString(),
description: description,
skip: skip,
input: input,
expectedOutput: expectedOutput);
yield dataCase;
}
}