execute method

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

Attempts to locate the Testable widget identified by testableId and then will attempt to double tap the widget on center point of the widget.

Implementation

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

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

  final finder = await waitFor(
    testableId,
    cancelToken: cancelToken,
    tester: tester,
    timeout: timeout,
  );

  await sleep(
    tester.delays.postFoundWidget,
    cancelStream: cancelToken.stream,
    tester: tester,
  );

  final evaluated = finder.evaluate();
  if (evaluated.length > 1) {
    var error =
        '[ERROR]: found (${evaluated.length}) widgets; expected only one.';
    var index = 0;
    for (var w in evaluated) {
      error += '\n  ${++index}: ${w.widget.runtimeType} [${w.widget.key}]';
    }
    throw Exception(error);
  }

  if (cancelToken.cancelled == true) {
    throw Exception('[CANCELLED]: step was cancelled by the test');
  }
  await driver.tap(finder);

  if (cancelToken.cancelled == true) {
    throw Exception('[CANCELLED]: step was cancelled by the test');
  }
  await Future.delayed(const Duration(milliseconds: 100));

  if (cancelToken.cancelled == true) {
    throw Exception('[CANCELLED]: step was cancelled by the test');
  }
  await driver.tap(finder);
}