emits function
Returns a StreamMatcher for matcher
.
If matcher
is already a StreamMatcher, it's returned as-is. If it's any
other Matcher, this matches a single event that matches that matcher. If
it's any other Object, this matches a single event that's equal to that
object.
This functions like wrapMatcher for StreamMatchers: it can convert any matcher-like value into a proper StreamMatcher.
Implementation
StreamMatcher emits(matcher) {
if (matcher is StreamMatcher) return matcher;
var wrapped = wrapMatcher(matcher);
var matcherDescription = wrapped.describe(StringDescription());
return StreamMatcher((queue) async {
if (!await queue.hasNext) return "";
var matchState = {};
var actual = await queue.next;
if (wrapped.matches(actual, matchState)) return null;
var mismatchDescription = StringDescription();
wrapped.describeMismatch(actual, mismatchDescription, matchState, false);
if (mismatchDescription.length == 0) return "";
return "emitted an event that $mismatchDescription";
},
// TODO(nweiz): add "should" once matcher#42 is fixed.
"emit an event that $matcherDescription");
}