addTest<O> method
void
addTest<O>(
- String description,
- ParserBuilder<
I, O> parser, - String test(
- String parserName,
- String parserNameNoResult,
- ParserBuilder<
I, O> parser, - ParserBuilder<
I, Object?> parserNoResult,
Implementation
void addTest<O>(
String description,
ParserBuilder<I, O> parser,
String Function(
String parserName,
String parserNameNoResult,
ParserBuilder<I, O> parser,
ParserBuilder<I, Object?> parserNoResult)
test,
) {
if (description.isEmpty) {
throw ArgumentError.value(
description, 'description', 'Must not be empty');
}
final globalAllocator = context.globalAllocator;
final nameFromDescription = _getValidIdentifier(description);
final parserName = globalAllocator.allocate(nameFromDescription);
final parserNameNoResult =
globalAllocator.allocate('${nameFromDescription}_NoResult');
final parserNoResult = NoResult<I>([parser]);
final namedParser = Named(parserName, parser);
final namedParserNoResult = Named(parserNameNoResult, parserNoResult);
parsers.add(namedParser);
parsers.add(namedParserNoResult);
final body = test(parserName, parserNameNoResult, parser, parserNoResult);
final titleCode = getAsCode(description);
final source = '''
test($titleCode, () {
$body
});''';
final buffer = StringBuffer();
buffer.writeln('void _test$parserName() {');
buffer.writeln(' // $description');
buffer.writeln(source);
buffer.writeln('}');
_tests.add(buffer.toString());
localOutput.writeln(' // $description');
localOutput.writeln('_test$parserName();');
}