Index: packages/async/test/result_future_test.dart |
diff --git a/packages/async/test/result_future_test.dart b/packages/async/test/result_future_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d8b4e01e2778357c0a36b1d1cdd42749a73dafa5 |
--- /dev/null |
+++ b/packages/async/test/result_future_test.dart |
@@ -0,0 +1,44 @@ |
+// Copyright (c) 2015, 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. |
+ |
+import 'dart:async'; |
+ |
+import 'package:async/async.dart'; |
+import 'package:stack_trace/stack_trace.dart'; |
+import 'package:test/test.dart'; |
+ |
+void main() { |
+ var completer; |
+ var future; |
+ setUp(() { |
+ completer = new Completer(); |
+ future = new ResultFuture(completer.future); |
+ }); |
+ |
+ test('before completion, result is null', () { |
+ expect(future.result, isNull); |
+ }); |
+ |
+ test('after successful completion, result is the value of the future', () { |
+ completer.complete(12); |
+ |
+ // The completer calls its listeners asynchronously. We have to wait |
+ // before we can access the result. |
+ expect(future.then((_) => future.result.asValue.value), |
+ completion(equals(12))); |
+ }); |
+ |
+ test("after an error completion, result is the future's error", () { |
+ var trace = new Trace.current(); |
+ completer.completeError('error', trace); |
+ |
+ // The completer calls its listeners asynchronously. We have to wait |
+ // before we can access the result. |
+ return future.catchError((_) {}).then((_) { |
+ var error = future.result.asError; |
+ expect(error.error, equals('error')); |
+ expect(error.stackTrace, equals(trace)); |
+ }); |
+ }); |
+} |