runStep method

  1. @protected
Future<StepResult> runStep({
  1. required String name,
  2. required Iterable<String> multiLineStrings,
  3. required dynamic table,
  4. required TestDependencies dependencies,
  5. required bool skip,
})

Implementation

@protected
Future<StepResult> runStep({
  required String name,
  required Iterable<String> multiLineStrings,
  required dynamic table,
  required TestDependencies dependencies,
  required bool skip,
}) async {
  StepResult? result;

  try {
    final executable = _executableSteps!.firstWhereOrNull(
      (s) => s.expression.isMatch(name),
    );

    if (executable == null) {
      final message = 'Step definition not found for text: `$name`';
      throw GherkinStepNotDefinedException(message);
    }

    var parameters = _getStepParameters(
      step: name,
      multiLineStrings: multiLineStrings,
      table: table,
      code: executable,
    );

    await _onBeforeStepRun(
      world: dependencies.world,
      step: name,
      table: table,
      multiLineStrings: multiLineStrings,
    );

    if (skip) {
      result = StepResult(
        0,
        StepExecutionResult.skipped,
        resultReason: 'Previous step(s) failed',
      );
    } else {
      for (int i = 0; i < configuration.stepMaxRetries + 1; i++) {
        result = await executable.step.run(
          dependencies.world,
          reporter,
          configuration.defaultTimeout,
          parameters,
        );

        if (!_isNegativeResult(result.result) ||
            configuration.stepMaxRetries == 0) {
          break;
        } else {
          await Future.delayed(configuration.retryDelay);
        }
      }
    }
  } catch (err, st) {
    result = ErroredStepResult(
      0,
      StepExecutionResult.error,
      err,
      st,
    );
  }

  await _onAfterStepRun(
    name,
    result!,
    dependencies,
  );

  return result;
}