execute method

  1. @override
Future<void> execute({
  1. required CancelToken cancelToken,
  2. required TestReport report,
  3. required TestController tester,
})

Executes the step. This will iterate from start to end - 1 and place the current value inside of variableName (or _iterateNum if not set). The step will be executed with each iteration.

Implementation

@override
Future<void> execute({
  required CancelToken cancelToken,
  required TestReport report,
  required TestController tester,
}) async {
  var end = JsonClass.parseInt(tester.resolveVariable(this.end))!;
  var start = JsonClass.parseInt(tester.resolveVariable(this.start), 0)!;
  var step = tester.resolveVariable(this.step);
  String variableName =
      tester.resolveVariable(this.variableName) ?? '_iterateNum';

  assert(end > start);

  var name = "$id('$start', '$end', '$variableName')";
  log(
    name,
    tester: tester,
  );

  if (step == null) {
    throw Exception('iterate: failing due to no sub-step');
  }
  var testStep = TestStep.fromDynamic(step);

  for (var i = start; i < end; i++) {
    if (cancelToken.cancelled == true) {
      throw Exception('[CANCELLED]: the step has been cancelled.');
    }
    var name = "iterate('$start', '$end', '$variableName', '$i')";
    log(
      name,
      tester: tester,
    );
    tester.setTestVariable(
      value: i,
      variableName: variableName,
    );

    await tester.executeStep(
      cancelToken: cancelToken,
      report: report,
      step: testStep,
      subStep: true,
    );
  }
}