execute method
Future<void>
execute({
- required CancelToken cancelToken,
- required TestReport report,
- required TestController tester,
override
Executes the step. This will first look for the Testable, get the error from the Testable, then compare it against the set error value.
Implementation
@override
Future<void> execute({
required CancelToken cancelToken,
required TestReport report,
required TestController tester,
}) async {
String? error = tester.resolveVariable(this.error);
String? testableId = tester.resolveVariable(this.testableId);
assert(testableId?.isNotEmpty == true);
var name = "$id('$testableId', '$error', '$equals', '$caseSensitive')";
log(
name,
tester: tester,
);
var finder = await waitFor(
testableId,
cancelToken: cancelToken,
tester: tester,
timeout: timeout,
);
await sleep(
tester.delays.postFoundWidget,
cancelStream: cancelToken.stream,
tester: tester,
);
if (cancelToken.cancelled == true) {
throw Exception('[CANCELLED]: step was cancelled by the test');
}
var widgetFinder = finder.evaluate();
var match = false;
if (widgetFinder.isNotEmpty == true) {
var element = widgetFinder.first as StatefulElement;
var state = element.state;
if (state is TestableState) {
try {
var actual = state.onRequestError!();
if (equals ==
(caseSensitive == true
? (actual?.toString() == error)
: (actual?.toString().toLowerCase() ==
error?.toString().toLowerCase()))) {
match = true;
} else {
throw Exception(
'testableId: [$testableId] -- actualValue: [$actual] ${equals == true ? '!=' : '=='} [$error] (caseSensitive = [$caseSensitive]).',
);
}
} catch (e) {
// no-op; fail via "match != true"
}
}
}
if (match != true) {
throw Exception(
'testableId: [$testableId] -- could not locate Testable with a functional [onRequestError] method.',
);
}
}