| Index: pkg/scheduled_test/lib/src/stream_matcher.dart
|
| diff --git a/pkg/scheduled_test/lib/src/stream_matcher.dart b/pkg/scheduled_test/lib/src/stream_matcher.dart
|
| index f1e65dad6482c9cf73becb0a3bbff7814fa0e3f8..f92a1c425b9be9b25072ee7548b0173eac795054 100644
|
| --- a/pkg/scheduled_test/lib/src/stream_matcher.dart
|
| +++ b/pkg/scheduled_test/lib/src/stream_matcher.dart
|
| @@ -82,6 +82,14 @@ StreamMatcher either(streamMatcher1, streamMatcher2) =>
|
| /// [streamMatcher] can be a [StreamMatcher], a [Matcher], or an [Object].
|
| StreamMatcher allow(streamMatcher) => new _AllowMatcher(streamMatcher);
|
|
|
| +/// A matcher that asserts that a stream never emits values matching
|
| +/// [streamMatcher].
|
| +///
|
| +/// This will consume the remainder of a stream.
|
| +///
|
| +/// [streamMatcher] can be a [StreamMatcher], a [Matcher], or an [Object].
|
| +StreamMatcher never(streamMatcher) => new _NeverMatcher(streamMatcher);
|
| +
|
| /// A matcher that matches a stream that emits no more values.
|
| StreamMatcher get isDone => new _IsDoneMatcher();
|
|
|
| @@ -279,6 +287,38 @@ class _AllowMatcher implements StreamMatcher {
|
| }
|
| }
|
|
|
| +/// See [never].
|
| +class _NeverMatcher implements StreamMatcher {
|
| + final StreamMatcher _matcher;
|
| +
|
| + _NeverMatcher(streamMatcher)
|
| + : _matcher = new StreamMatcher.wrap(streamMatcher);
|
| +
|
| + Future<Description> tryMatch(ScheduledStream stream) {
|
| + consumeNext() {
|
| + return stream.hasNext.then((hasNext) {
|
| + if (!hasNext) return new Future.value();
|
| +
|
| + var fork = stream.fork();
|
| + return _matcher.tryMatch(fork).whenComplete(fork.close)
|
| + .then((description) {
|
| + if (description != null) {
|
| + return stream.next().then((_) => consumeNext());
|
| + }
|
| +
|
| + return new StringDescription("matched\n")
|
| + .add(prefixLines(_matcher.toString(), prefix: ' '));
|
| + });
|
| + });
|
| + }
|
| +
|
| + return consumeNext();
|
| + }
|
| +
|
| + String toString() =>
|
| + 'never\n${prefixLines(_matcher.toString(), prefix: ' ')}';
|
| +}
|
| +
|
| /// See [isDone].
|
| class _IsDoneMatcher implements StreamMatcher {
|
| _IsDoneMatcher();
|
|
|