execute method

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

Executes the step. This will execute the whenTrue or whenFalse based on whether a Widget with a ValueKey containing the testableId exists on the widget tree when this executes.

Implementation

@override
Future<void> execute({
  required CancelToken cancelToken,
  required TestReport report,
  required TestController tester,
}) async {
  var whenFalse = tester.resolveVariable(this.whenFalse);
  var whenTrue = tester.resolveVariable(this.whenTrue);
  String testableId = tester.resolveVariable(this.testableId);
  assert(testableId.isNotEmpty == true);

  var name = "$id('$testableId')";
  log(
    name,
    tester: tester,
  );

  TestStep? step;

  var widgetExists =
      find.byKey(ValueKey<String?>(testableId)).evaluate().isNotEmpty == true;
  var resultStep = widgetExists == true ? whenTrue : whenFalse;
  if (resultStep != null) {
    step = TestStep.fromDynamic(resultStep);
  }

  if (step == null) {
    log(
      'conditional_widget_exists: exists: [$widgetExists] -- no step',
      tester: tester,
    );
  } else {
    log(
      'conditional_widget_exists: exists: [$widgetExists] -- executing step',
      tester: tester,
    );
    await tester.executeStep(
      cancelToken: cancelToken,
      report: report,
      step: step,
      subStep: true,
    );
  }
}