execute method
Future<void>
execute({
- required CancelToken cancelToken,
- required TestReport report,
- required TestController tester,
Iterates through all active Testable
widgets that have an id that
matches the given regEx, sets the id in variableName (or _testableId
if no variableName is set) and calls the step.
Implementation
@override
Future<void> execute({
required CancelToken cancelToken,
required TestReport report,
required TestController tester,
}) async {
var regEx = tester.resolveVariable(this.regEx).toString();
String variableName =
tester.resolveVariable(this.variableName) ?? '_testableId';
var name = "$id('$regEx', '$variableName')";
log(
name,
tester: tester,
);
TestStep? testStep;
if (step != null) {
testStep = TestStep.fromDynamic(step);
}
if (testStep == null) {
throw Exception('for_each_testable: failing due to no sub-step');
}
var regExp = RegExp(regEx);
var testables = find.byType(Testable).evaluate();
for (var testable in testables) {
if (cancelToken.cancelled == true) {
throw Exception('[CANCELLED]: the step has been cancelled.');
}
var key = testable.widget.key;
if (key is ValueKey) {
var id = key.value.toString();
if (id.isNotEmpty == true && regExp.hasMatch(id)) {
log(
'for_each_testable: testableId: [$id]',
tester: tester,
);
tester.setTestVariable(
value: id,
variableName: variableName,
);
await tester.executeStep(
cancelToken: cancelToken,
report: report,
step: testStep,
subStep: true,
);
}
}
}
}