testSuccess method
void
testSuccess({})
Implementation
void testSuccess({
required I input,
required int pos,
O? result,
List<({String reason, Expr<Object?> actual, Expr<Object?> expected})>?
resultTests,
}) {
for (final name in [parserName, parserNameNoResult]) {
final resultVar = allocator.allocate('result');
final resultValue = allocator.allocate('value');
final stateVar = allocator.allocate('state');
final resultCode = getAsCode(result);
final inputCode = _inputAsCode(input);
final resultValueChecked =
parser.isNullableResultType() ? resultVar : '$resultVar!';
output.writeln('final $stateVar = State($inputCode);');
output.writeln('final $resultVar = $name($stateVar);');
output.writeln(
'expect($stateVar.ok, true, reason: ${getReason(input: input, subject: 'state.ok == true')});');
if (name == parserName) {
output.writeln('final $resultValue = $resultValueChecked;');
if (resultTests != null) {
for (var resultTest in resultTests) {
final actual = resultTest.actual.calculate(context, [resultValue]);
final expected =
resultTest.expected.calculate(context, [resultValue]);
final reason = resultTest.reason;
output.writeln(
'expect($actual, $expected, reason: ${getReason(input: input, subject: reason)});');
}
} else {
output.writeln(
'expect($resultValue, $resultCode, reason: ${getReason(input: input, subject: 'result = value')});');
}
} else {
output.writeln('final $resultValue = $resultVar;');
output.writeln(
'expect($resultValue, null, reason: ${getReason(input: input, subject: 'result == null')});');
}
output.writeln(
'expect($stateVar.pos, $pos, reason: ${getReason(input: input, subject: 'state.pos')});');
}
}