emitsInOrder function
Returns a StreamMatcher that matches the stream if each matcher in
matchers
matches, one after another.
If any matcher fails to match, this fails and consumes no events.
Implementation
StreamMatcher emitsInOrder(Iterable matchers) {
var streamMatchers = matchers.map(emits).toList();
if (streamMatchers.length == 1) return streamMatchers.first;
var description = 'do the following in order:\n'
'${bullet(streamMatchers.map((matcher) => matcher.description))}';
return StreamMatcher((queue) async {
for (var i = 0; i < streamMatchers.length; i++) {
var matcher = streamMatchers[i];
var result = await matcher.matchQueue(queue);
if (result == null) continue;
var newResult = "didn't ${matcher.description}";
if (result.isNotEmpty) {
newResult += newResult.contains('\n') ? '\n' : ' ';
newResult += 'because it $result';
}
return newResult;
}
return null;
}, description);
}