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);
}