testFailure method

void testFailure({
  1. List<({Calculable<Object?> actual, Calculable<Object?> expected, String reason})>? errorTests,
  2. required List<String> errors,
  3. required int failPos,
  4. required I input,
  5. required int pos,
})

Implementation

void testFailure({
  List<
          ({
            String reason,
            Calculable<Object?> actual,
            Calculable<Object?> expected
          })>?
      errorTests,
  required List<String> errors,
  required int failPos,
  required I input,
  required int pos,
}) {
  for (final name in [parserName, parserNameNoResult]) {
    final resultVar = allocator.allocate('result');
    final stateVar = allocator.allocate('state');
    final errorCountCode = getAsCode(errors.length);
    final inputCode = _inputAsCode(input);
    output.writeln('final $stateVar = State($inputCode);');
    output.writeln('final $resultVar = $name($stateVar);');
    output.writeln(
        'expect($stateVar.ok, false, reason: ${getReason(input: input, subject: 'state.ok == false')});');
    output.writeln(
        'expect($resultVar, null, reason: ${getReason(input: input, subject: 'result == null')});');
    output.writeln(
        'expect($stateVar.pos, $pos, reason: ${getReason(input: input, subject: 'state.pos')});');
    output.writeln(
        'expect($stateVar.failPos, $failPos, reason: ${getReason(input: input, subject: 'state.failPos')});');
    output.writeln(
        'expect($stateVar.errorCount, $errorCountCode, reason: ${getReason(input: input, subject: 'state.errorCount')});');
    for (var i = 0; i < errors.length; i++) {
      final error = errors[i];
      output.writeln(
          'expect($stateVar.errors[$i], isA<$error>(), reason: ${getReason(input: input, subject: 'state.error')});');
    }
    if (errorTests != null) {
      for (var resultError in errorTests) {
        final actual =
            resultError.actual.calculate(context, ['$stateVar.errors']);
        final expected =
            resultError.expected.calculate(context, ['$stateVar.errors']);
        final reason = resultError.reason;
        output.writeln(
            'expect($actual, $expected, reason: ${getReason(input: input, subject: reason)});');
      }
    }
  }
}