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

Side by Side Diff: tests/lib_2/async/future_test.dart

Issue 2999943002: Migrated test block 168 to Dart 2.0. (Closed)
Patch Set: Fixed package:test crash related issues, addressed Bob's comments. Created 3 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library future_test; 5 library future_test;
6 6
7 import 'package:async_helper/async_helper.dart'; 7 import 'package:async_helper/async_helper.dart';
8 import "package:expect/expect.dart"; 8 import "package:expect/expect.dart";
9 import 'dart:async'; 9 import 'dart:async';
10 10
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 }); 114 });
115 } 115 }
116 116
117 void testCompleteManySuccessHandlers() { 117 void testCompleteManySuccessHandlers() {
118 final completer = new Completer<int>(); 118 final completer = new Completer<int>();
119 final future = completer.future; 119 final future = completer.future;
120 int before; 120 int before;
121 int after1; 121 int after1;
122 int after2; 122 int after2;
123 123
124 var futures = []; 124 var futures = <Future<int>>[];
125 futures.add(future.then((int v) { 125 futures.add(future.then((int v) {
126 before = v; 126 before = v;
127 })); 127 }));
128 completer.complete(3); 128 completer.complete(3);
129 futures.add(future.then((int v) { 129 futures.add(future.then((int v) {
130 after1 = v; 130 after1 = v;
131 })); 131 }));
132 futures.add(future.then((int v) { 132 futures.add(future.then((int v) {
133 after2 = v; 133 after2 = v;
134 })); 134 }));
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 completer.future.then((v) { 594 completer.future.then((v) {
595 Expect.equals(42, v); 595 Expect.equals(42, v);
596 asyncEnd(); 596 asyncEnd();
597 }); 597 });
598 completer2.complete(42); 598 completer2.complete(42);
599 } 599 }
600 600
601 void testCompleteWithFutureSuccess2() { 601 void testCompleteWithFutureSuccess2() {
602 asyncStart(); 602 asyncStart();
603 final completer = new Completer<int>(); 603 final completer = new Completer<int>();
604 Future result = new Future.value(42); 604 final result = new Future<int>.value(42);
605 completer.complete(result); 605 completer.complete(result);
606 completer.future.then((v) { 606 completer.future.then((v) {
607 Expect.equals(42, v); 607 Expect.equals(42, v);
608 asyncEnd(); 608 asyncEnd();
609 }); 609 });
610 } 610 }
611 611
612 void testCompleteWithFutureError() { 612 void testCompleteWithFutureError() {
613 asyncStart(); 613 asyncStart();
614 final completer = new Completer<int>(); 614 final completer = new Completer<int>();
615 final completer2 = new Completer<int>(); 615 final completer2 = new Completer<int>();
616 completer.complete(completer2.future); 616 completer.complete(completer2.future);
617 completer.future.then((v) { 617 completer.future.then((v) {
618 Expect.fail("Should not happen"); 618 Expect.fail("Should not happen");
619 asyncEnd(); 619 asyncEnd();
620 }, onError: (e) { 620 }, onError: (e) {
621 Expect.equals("ERROR-tcwfe", e); 621 Expect.equals("ERROR-tcwfe", e);
622 asyncEnd(); 622 asyncEnd();
623 }); 623 });
624 completer2.completeError("ERROR-tcwfe"); 624 completer2.completeError("ERROR-tcwfe");
625 } 625 }
626 626
627 void testCompleteWithFutureError2() { 627 void testCompleteWithFutureError2() {
628 asyncStart(); 628 asyncStart();
629 final completer = new Completer<int>(); 629 final completer = new Completer<int>();
630 Future result = new Future.error("ERROR-tcwfe2"); 630 var result = new Future<int>.error("ERROR-tcwfe2");
631 completer.complete(result); 631 completer.complete(result);
632 completer.future.then((v) { 632 completer.future.then((v) {
633 Expect.fail("Should not happen"); 633 Expect.fail("Should not happen");
634 asyncEnd(); 634 asyncEnd();
635 }, onError: (e) { 635 }, onError: (e) {
636 Expect.equals("ERROR-tcwfe2", e); 636 Expect.equals("ERROR-tcwfe2", e);
637 asyncEnd(); 637 asyncEnd();
638 }); 638 });
639
639 } 640 }
640 641
641 void testCompleteErrorWithFuture() { 642 void testCompleteErrorWithFuture() {
642 asyncStart(); 643 asyncStart();
643 final completer = new Completer<int>(); 644 final completer = new Completer<int>();
644 completer.completeError(new Future.value(42)); 645 completer.completeError(new Future.value(42));
645 completer.future.then((_) { 646 completer.future.then((_) {
646 Expect.fail("Shouldn't happen"); 647 Expect.fail("Shouldn't happen");
647 }, onError: (e, s) { 648 }, onError: (e, s) {
648 Future f = e; 649 Future f = e;
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 } 770 }
770 771
771 void testWaitCleanUp() { 772 void testWaitCleanUp() {
772 asyncStart(); 773 asyncStart();
773 // Creates three futures with different completion times, and where some fail. 774 // Creates three futures with different completion times, and where some fail.
774 // The `mask` specifies which futures fail (values 1-7), 775 // The `mask` specifies which futures fail (values 1-7),
775 // and `permute` defines the order of completion. values 0-5. 776 // and `permute` defines the order of completion. values 0-5.
776 void doTest(int mask, int permute) { 777 void doTest(int mask, int permute) {
777 asyncStart(); 778 asyncStart();
778 String stringId = "waitCleanup-$mask-$permute"; 779 String stringId = "waitCleanup-$mask-$permute";
779 List futures = new List(3); 780 List<Future> futures = new List(3);
780 List cleanup = new List(3); 781 List cleanup = new List(3);
781 int permuteTmp = permute; 782 int permuteTmp = permute;
782 for (int i = 0; i < 3; i++) { 783 for (int i = 0; i < 3; i++) {
783 bool throws = (mask & (1 << i)) != 0; 784 bool throws = (mask & (1 << i)) != 0;
784 var future = new Future.delayed(new Duration(milliseconds: 100 * (i + 1)), 785 var future = new Future.delayed(new Duration(milliseconds: 100 * (i + 1)),
785 () => (throws ? throw "Error $i($mask-$permute)" : i)); 786 () => (throws ? throw "Error $i($mask-$permute)" : i));
786 int mod = 3 - i; 787 int mod = 3 - i;
787 int position = permuteTmp % mod; 788 int position = permuteTmp % mod;
788 permuteTmp = permuteTmp ~/ mod; 789 permuteTmp = permuteTmp ~/ mod;
789 while (futures[position] != null) position++; 790 while (futures[position] != null) position++;
(...skipping 24 matching lines...) Expand all
814 void testWaitCleanUpEager() { 815 void testWaitCleanUpEager() {
815 asyncStart(); 816 asyncStart();
816 // Creates three futures with different completion times, and where some fail. 817 // Creates three futures with different completion times, and where some fail.
817 // The `mask` specifies which futures fail (values 1-7), 818 // The `mask` specifies which futures fail (values 1-7),
818 // and `permute` defines the order of completion. values 0-5. 819 // and `permute` defines the order of completion. values 0-5.
819 void doTest(int mask, int permute) { 820 void doTest(int mask, int permute) {
820 asyncStart(); 821 asyncStart();
821 asyncStart(); 822 asyncStart();
822 bool done = false; 823 bool done = false;
823 String stringId = "waitCleanup-$mask-$permute"; 824 String stringId = "waitCleanup-$mask-$permute";
824 List futures = new List(3); 825 List<Future> futures = new List<Future>(3);
825 List cleanup = new List(3); 826 List cleanup = new List(3);
826 int permuteTmp = permute; 827 int permuteTmp = permute;
827 for (int i = 0; i < 3; i++) { 828 for (int i = 0; i < 3; i++) {
828 bool throws = (mask & (1 << i)) != 0; 829 bool throws = (mask & (1 << i)) != 0;
829 var future = new Future.delayed(new Duration(milliseconds: 100 * (i + 1)), 830 var future = new Future.delayed(new Duration(milliseconds: 100 * (i + 1)),
830 () => (throws ? throw "Error $i($mask-$permute)" : i)); 831 () => (throws ? throw "Error $i($mask-$permute)" : i));
831 int mod = 3 - i; 832 int mod = 3 - i;
832 int position = permuteTmp % mod; 833 int position = permuteTmp % mod;
833 permuteTmp = permuteTmp ~/ mod; 834 permuteTmp = permuteTmp ~/ mod;
834 while (futures[position] != null) position++; 835 while (futures[position] != null) position++;
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
987 testType(name, future.whenComplete(() {}), depth - 1); 988 testType(name, future.whenComplete(() {}), depth - 1);
988 } 989 }
989 } 990 }
990 991
991 for (var value in [42, null]) { 992 for (var value in [42, null]) {
992 testType("Future($value)", new Future<int>(() => value)); 993 testType("Future($value)", new Future<int>(() => value));
993 testType("Future.delayed($value)", 994 testType("Future.delayed($value)",
994 new Future<int>.delayed(Duration.ZERO, () => value)); 995 new Future<int>.delayed(Duration.ZERO, () => value));
995 testType( 996 testType(
996 "Future.microtask($value)", new Future<int>.microtask(() => value)); 997 "Future.microtask($value)", new Future<int>.microtask(() => value));
997 testType("Future.sync($value)", new Future<int>.sync(() => value)); //# 01: ok 998 testType(
998 testType("Future.sync(future($value))", // //# 01: continued 999 "Future.sync($value)", new Future<int>.sync(() => value)); // #01: ok
999 new Future<int>.sync(() => new Future<int>.value(value))); //# 01: continued 1000 testType( //# 01: continued
1001 "Future.sync(future($value))", //# 01: continued
1002 new Future<int>.sync(//# 01: continued
1003 () => new Future<int>.value(value))); //# 01: continued
1000 testType("Future.value($value)", new Future<int>.value(value)); 1004 testType("Future.value($value)", new Future<int>.value(value));
1001 } 1005 }
1002 testType("Completer.future", new Completer<int>().future); 1006 testType("Completer.future", new Completer<int>().future);
1003 testType("Future.error", new Future<int>.error("ERR")..catchError((_) {})); 1007 testType("Future.error", new Future<int>.error("ERR")..catchError((_) {}));
1004 } 1008 }
1005 1009
1006 void testAnyValue() { 1010 void testAnyValue() {
1007 asyncStart(); 1011 asyncStart();
1008 var cs = new List.generate(3, (_) => new Completer()); 1012 var cs = new List.generate(3, (_) => new Completer());
1009 var result = Future.any(cs.map((x) => x.future)); 1013 var result = Future.any(cs.map((x) => x.future));
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1167 testAnyIgnoreIncomplete(); 1171 testAnyIgnoreIncomplete();
1168 testAnyIgnoreError(); 1172 testAnyIgnoreError();
1169 1173
1170 testFutureResult(); 1174 testFutureResult();
1171 1175
1172 asyncEnd(); 1176 asyncEnd();
1173 } 1177 }
1174 1178
1175 /// A well-behaved Future that isn't recognizable as a _Future. 1179 /// A well-behaved Future that isn't recognizable as a _Future.
1176 class CustomFuture<T> implements Future<T> { 1180 class CustomFuture<T> implements Future<T> {
1177 Future _realFuture; 1181 Future<T> _realFuture;
1178 CustomFuture(this._realFuture); 1182 CustomFuture(this._realFuture);
1179 Future then(action(result), {Function onError}) => 1183 Future<S> then<S>(action(T result), {Function onError}) =>
1180 _realFuture.then(action, onError: onError); 1184 _realFuture.then(action, onError: onError);
1181 Future catchError(Function onError, {bool test(e)}) => 1185 Future<T> catchError(Function onError, {bool test(e)}) =>
1182 _realFuture.catchError(onError, test: test); 1186 _realFuture.catchError(onError, test: test);
1183 Future whenComplete(action()) => _realFuture.whenComplete(action); 1187 Future<T> whenComplete(action()) => _realFuture.whenComplete(action);
1184 Future timeout(Duration timeLimit, {void onTimeout()}) => 1188 Future<T> timeout(Duration timeLimit, {void onTimeout()}) =>
1185 _realFuture.timeout(timeLimit, onTimeout: onTimeout); 1189 _realFuture.timeout(timeLimit, onTimeout: onTimeout);
1186 Stream asStream() => _realFuture.asStream(); 1190 Stream<T> asStream() => _realFuture.asStream();
1187 String toString() => "CustomFuture@${_realFuture.hashCode}"; 1191 String toString() => "CustomFuture@${_realFuture.hashCode}";
1188 int get hashCode => _realFuture.hashCode; 1192 int get hashCode => _realFuture.hashCode;
1189 } 1193 }
1190 1194
1191 /// A bad future that throws on every method. 1195 /// A bad future that throws on every method.
1192 class BadFuture<T> implements Future<T> { 1196 class BadFuture<T> implements Future<T> {
1193 Future then(action(T result), {Function onError}) { 1197 Future<S> then<S>(action(T result), {Function onError}) {
1194 throw "then GOTCHA!"; 1198 throw "then GOTCHA!";
1195 } 1199 }
1196 1200
1197 Future catchError(Function onError, {bool test(e)}) { 1201 Future<T> catchError(Function onError, {bool test(Object e)}) {
1198 throw "catch GOTCHA!"; 1202 throw "catch GOTCHA!";
1199 } 1203 }
1200 1204
1201 Future whenComplete(action()) { 1205 Future<T> whenComplete(action()) {
1202 throw "finally GOTCHA!"; 1206 throw "finally GOTCHA!";
1203 } 1207 }
1204 1208
1205 Stream<T> asStream() { 1209 Stream<T> asStream() {
1206 throw "asStream GOTCHA!"; 1210 throw "asStream GOTCHA!";
1207 } 1211 }
1208 1212
1209 Future timeout(Duration duration, {onTimeout()}) { 1213 Future<T> timeout(Duration duration, {onTimeout()}) {
1210 throw "timeout GOTCHA!"; 1214 throw "timeout GOTCHA!";
1211 } 1215 }
1212 } 1216 }
1213 1217
1214 // An evil future that completes with another future. 1218 // An evil future that completes with another future.
1215 class UglyFuture implements Future<dynamic> { 1219 class UglyFuture implements Future<dynamic> {
1216 final _result; 1220 final _result;
1217 UglyFuture(int badness) 1221 UglyFuture(int badness)
1218 : _result = (badness == 0) ? 42 : new UglyFuture(badness - 1); 1222 : _result = (badness == 0) ? 42 : new UglyFuture(badness - 1);
1219 Future then(action(value), {onError(error, StackTrace stack)}) { 1223 Future<S> then<S>(action(value), {Function onError}) {
1220 var c = new Completer(); 1224 var c = new Completer();
1221 c.complete(new Future.microtask(() => action(_result))); 1225 c.complete(new Future.microtask(() => action(_result)));
1222 return c.future; 1226 return c.future;
1223 } 1227 }
1224 1228
1225 Future catchError(onError, {test}) => this; // Never an error. 1229 Future catchError(onError, {test}) => this; // Never an error.
1226 Future whenComplete(action()) { 1230 Future whenComplete(action()) {
1227 return new Future.microtask(action).then((_) => this); 1231 return new Future.microtask(action).then((_) => this);
1228 } 1232 }
1229 1233
1230 Stream asStream() { 1234 Stream asStream() {
1231 return (new StreamController() 1235 return (new StreamController()
1232 ..add(_result) 1236 ..add(_result)
1233 ..close()) 1237 ..close())
1234 .stream; 1238 .stream;
1235 } 1239 }
1236 1240
1237 Future timeout(Duration duration, {onTimeout()}) { 1241 Future timeout(Duration duration, {onTimeout()}) {
1238 return this; 1242 return this;
1239 } 1243 }
1240 } 1244 }
OLDNEW
« no previous file with comments | « tests/lib_2/async/future_or_strong_test.dart ('k') | tests/lib_2/async/future_timeout_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698