execute method

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

Executes the step. This will first look for the Testable then instruct the widget to obscure itself using the given color. If color is null or set to Colors.transparent then this effectively un-obscures 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 = "obscure_widget('$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 widgetFinder = finder.evaluate();
  var found = false;
  if (widgetFinder.isNotEmpty == true) {
    final element = widgetFinder.first as StatefulElement;

    final state = element.state;
    if (state is TestableState) {
      try {
        await state.obscure(color);
        found = true;
      } catch (e) {
        found = false;
      }
    }
  }
  if (found != true) {
    throw Exception(
      'testableId: [$testableId] -- could not locate Testable with a functional [obscure] method.',
    );
  }
}