Index: pkg/scheduled_test/lib/src/scheduled_future_matchers.dart |
diff --git a/pkg/scheduled_test/lib/src/scheduled_future_matchers.dart b/pkg/scheduled_test/lib/src/scheduled_future_matchers.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ad3c739c32cd59fd34e08ad61e2e59cb611ffdc3 |
--- /dev/null |
+++ b/pkg/scheduled_test/lib/src/scheduled_future_matchers.dart |
@@ -0,0 +1,60 @@ |
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+ |
+library scheduled_future_matchers; |
+ |
+import 'dart:async'; |
+ |
+import '../scheduled_test.dart'; |
+ |
+/// Matches a [Future] that completes successfully with a value. Note that this |
+/// creates an asynchronous expectation. The call to `expect()` that includes |
+/// this will return immediately and execution will continue. Later, when the |
+/// future completes, the actual expectation will run. |
+/// |
+/// To test that a Future completes with an exception, you can use [throws] and |
+/// [throwsA]. |
+/// |
+/// This differs from the `completes` matcher in `unittest` in that it pipes any |
+/// errors in the Future to [currentSchedule], rather than reporting them in the |
+/// [expect]'s error message. |
+Matcher completes = const _ScheduledCompletes(null); |
+ |
+/// Matches a [Future] that completes succesfully with a value that matches |
+/// [matcher]. Note that this creates an asynchronous expectation. The call to |
+/// `expect()` that includes this will return immediately and execution will |
+/// continue. Later, when the future completes, the actual expectation will run. |
+/// |
+/// To test that a Future completes with an exception, you can use [throws] and |
+/// [throwsA]. |
+/// |
+/// This differs from the `completion` matcher in `unittest` in that it pipes |
+/// any errors in the Future to [currentSchedule], rather than reporting them in |
+/// the [expect]'s error message. |
+Matcher completion(matcher) => new _ScheduledCompletes(wrapMatcher(matcher)); |
+ |
+class _ScheduledCompletes extends BaseMatcher { |
+ final Matcher _matcher; |
+ |
+ const _ScheduledCompletes(this._matcher); |
+ |
+ bool matches(item, MatchState matchState) { |
+ if (item is! Future) return false; |
+ |
+ wrapFuture(item.then((value) { |
+ if (_matcher != null) expect(value, _matcher); |
+ })); |
+ |
+ return true; |
+ } |
+ |
+ Description describe(Description description) { |
+ if (_matcher == null) { |
+ description.add('completes successfully'); |
+ } else { |
+ description.add('completes to a value that ').addDescriptionOf(_matcher); |
+ } |
+ return description; |
+ } |
+} |