run method

Future<StepResult> run(
  1. TWorld world,
  2. Reporter reporter,
  3. Duration defaultTimeout,
  4. Iterable parameters,
)

Implementation

Future<StepResult> run(
  TWorld world,
  Reporter reporter,
  Duration defaultTimeout,
  Iterable<dynamic> parameters,
) async {
  _ensureParameterCount(parameters.length, _expectParameterCount);
  late int elapsedMilliseconds;
  try {
    final timeout = _timeout ?? defaultTimeout;
    await Perf.measure(
      () async {
        _world = world;
        _reporter = reporter;
        _timeout = timeout;
        final result = await onRun(parameters).timeout(
          timeout,
        );

        return result;
      },
      (ms) => elapsedMilliseconds = ms,
    );
  } on GherkinTestFailure catch (tf) {
    return StepResult(
      elapsedMilliseconds,
      StepExecutionResult.fail,
      resultReason: tf.message,
    );
  } on TimeoutException catch (te, st) {
    return ErroredStepResult(
      elapsedMilliseconds,
      StepExecutionResult.timeout,
      te,
      st,
    );
  } catch (e, st) {
    final err = e is Exception ? e : Exception(e.toString());
    final reason = e is StateError ? e.message : err.toString();

    return ErroredStepResult(
      elapsedMilliseconds,
      StepExecutionResult.error,
      err,
      st,
      resultReason: reason,
    );
  }

  return StepResult(elapsedMilliseconds, StepExecutionResult.passed);
}