Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(335)

Unified Diff: tests/corelib/src/FutureTest.dart

Issue 9392029: futures: add more tests for future and completer. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: '' Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/corelib/src/FutureTest.dart
diff --git a/tests/corelib/src/FutureTest.dart b/tests/corelib/src/FutureTest.dart
index 871cc75064cc088d2629a3ff67a837e455ea0f1b..43c11ff7800cb0c5ad3b0c00fee145f5c4d79c3e 100644
--- a/tests/corelib/src/FutureTest.dart
+++ b/tests/corelib/src/FutureTest.dart
@@ -2,14 +2,172 @@
// 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.
+// Tests for Future.immediate
+
testImmediate() {
final future = new Future<String>.immediate("42");
Expect.isTrue(future.isComplete);
+ Expect.isTrue(future.hasValue);
var value = null;
future.then((x) => value = x);
Expect.equals("42", value);
}
+// Tests for getters (value, exception, isComplete, isValue)
+
+testNeverComplete() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ Expect.isFalse(future.isComplete);
+ Expect.isFalse(future.hasValue);
+ Expect.throws(() { future.value; });
+ Expect.throws(() { future.exception; });
+}
+
+testComplete() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+
+ completer.complete(3);
+
+ Expect.isTrue(future.isComplete);
+ Expect.isTrue(future.hasValue);
+ Expect.equals(3, future.value);
+ Expect.isNull(future.exception);
+}
+
+// Tests for [then]
+
+testCompleteWithHandlerBeforeComplete() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+
+ int before;
+ future.then((int v) { before = v; });
+ Expect.throws(() { future.value; });
+ Expect.isNull(before);
+ completer.complete(3);
+
+ Expect.equals(3, future.value);
+ Expect.equals(3, before);
+}
+
+testCompleteWithHandlerAfterComplete() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+
+ int after;
+ completer.complete(3);
+ Expect.equals(3, future.value);
+ Expect.isNull(after);
+
+ future.then((int v) { after = v; });
+
+ Expect.equals(3, future.value);
+ Expect.equals(3, after);
+}
+
+testCompleteManyHandlers() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ int after1;
+ int after2;
+ int after3;
+
+ future.then((int v) { after1 = v; });
+ completer.complete(3);
+ future.then((int v) { after2 = v; });
+ future.then((int v) { after3 = v; });
+
+ Expect.equals(3, future.value);
+ Expect.equals(3, after1);
+ Expect.equals(3, after2);
+ Expect.equals(3, after3);
+}
+
+// Tests for [handleException]
+
+testException() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ final ex = new Exception();
+ future.then((_) {}); // exception is thrown if we plan to use the value
+ Expect.throws(
+ () { completer.completeException(ex); },
+ check: (e) => e == ex);
+}
+
+testExceptionNoListeners() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ final ex = new Exception();
+ completer.completeException(ex); // future.then is not called, so no exception
+}
+
+testExceptionHandler() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ final ex = new Exception();
+
+ var ex2;
+ future.handleException((e) { ex2 = e; return true; });
+ completer.completeException(ex);
+ Expect.equals(ex, ex2);
+}
+
+testExceptionHandlerReturnsTrue() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ final ex = new Exception();
+
+ bool reached = false;
+ future.handleException((e) { return true; });
+ future.handleException((e) { reached = true; return false; }); // overshadowed
+ completer.completeException(ex);
+ Expect.isFalse(reached);
+}
+
+testExceptionHandlerReturnsTrue2() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ final ex = new Exception();
+
+ bool reached = false;
+ future.handleException((e) { return false; });
+ future.handleException((e) { reached = true; return true; });
+ completer.completeException(ex);
+ Expect.isTrue(reached);
+}
+
+testExceptionHandlerReturnsFalse() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ final ex = new Exception();
+
+ bool reached = false;
+ future.then((_) {}); // ensure exception is thrown...
+ future.handleException((e) { return false; });
+ future.handleException((e) { reached = true; return false; }); // overshadowed
+ Expect.throws(
+ () { completer.completeException(ex); },
+ check: (e) => e == ex);
+ Expect.isTrue(reached);
+}
+
+testExceptionHandlerReturnsFalse2() {
+ final completer = new Completer<int>();
+ final future = completer.future;
+ final ex = new Exception();
+
+ bool reached = false;
+ future.handleException((e) { return false; });
+ future.handleException((e) { reached = true; return false; }); // overshadowed
+ completer.completeException(ex); // future.then is not called, so no exception
+ Expect.isTrue(reached);
+}
+
+// Tests for Future.transform
+
testTransformSuccess() {
final completer = new Completer<String>();
final transformedFuture = completer.future.transform((x) => "** $x **");
@@ -38,6 +196,8 @@ testTransformTransformerFails() {
Expect.equals(error, transformedFuture.exception);
}
+// Tests for Future.chain
+
testChainSuccess() {
final completerA = new Completer<String>();
final completerB = new Completer<String>();
@@ -92,6 +252,17 @@ testChainSecondFutureFails() {
main() {
testImmediate();
+ testNeverComplete();
+ testComplete();
+ testCompleteWithHandlerBeforeComplete();
+ testCompleteWithHandlerAfterComplete();
+ testCompleteManyHandlers();
+ testException();
+ testExceptionHandler();
+ testExceptionHandlerReturnsTrue();
+ testExceptionHandlerReturnsTrue2();
+ testExceptionHandlerReturnsFalse();
+ testExceptionHandlerReturnsFalse2();
testTransformSuccess();
testTransformFutureFails();
testTransformTransformerFails();
@@ -99,4 +270,4 @@ main() {
testChainFirstFutureFails();
testChainTransformerFails();
testChainSecondFutureFails();
-}
+}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698