waitCondition method
Future<TestInfoList<St> >
waitCondition(
- StateCondition<
St> condition, { - bool testImmediately = true,
- bool ignoreIni = true,
- int? timeoutInSeconds,
Runs until the predicate function condition
returns true.
This function will receive each testInfo, from where it can
access the state, action, errors etc.
When testImmediately
is true (the default), it will test the condition
immediately when the method is called. If the condition is true, the
method will return immediately, without waiting for any actions to be
dispatched.
When testImmediately
is false, it will only test
the condition once an action is dispatched.
Only END states will be received, unless you pass ignoreIni
as false.
Returns a list with all info until the condition is met.
Implementation
Future<TestInfoList<St>> waitCondition(
StateCondition<St> condition, {
bool testImmediately = true,
bool ignoreIni = true,
int? timeoutInSeconds,
}) async {
timeoutInSeconds ??= defaultTimeout;
TestInfoList<St> infoList = TestInfoList<St>();
if (testImmediately) {
var currentTestInfoWithoutAction = TestInfo<St>(
_currentTestInfo.state,
false,
null,
null,
null,
_currentTestInfo.dispatchCount,
_currentTestInfo.reduceCount,
_currentTestInfo.errors,
);
if (condition(currentTestInfoWithoutAction)) {
infoList._add(currentTestInfoWithoutAction);
lastInfo = infoList.last;
return infoList;
}
}
TestInfo<St> testInfo = await _next(timeoutInSeconds: timeoutInSeconds);
while (true) {
if (ignoreIni)
while (testInfo.ini)
testInfo = await (_next(
timeoutInSeconds: timeoutInSeconds,
));
infoList._add(testInfo);
if (condition(testInfo))
break;
else
testInfo = await _next(timeoutInSeconds: timeoutInSeconds);
}
lastInfo = infoList.last;
return infoList;
}