@@ -21,90 +21,92 @@ void main() {
2121 group ('MultiFutureTracker' , () {
2222 /// A special test designed to check shared [MultiFutureTracker]
2323 /// behavior when exceptions occur after a delay in the passed closures to
24- /// [MultiFutureTracker.addFutureFromClosure ] .
24+ /// [MultiFutureTracker.add ] .
2525 test ('no deadlock when delayed exceptions fire in closures' , () async {
26- var sharedTracker = MultiFutureTracker ( 2 );
26+ var sharedTracker = TaskQueue (maxJobs : 2 );
2727 expect (() async {
2828 var t =
2929 Future .delayed (Duration (milliseconds: 10 ), () => throw Exception ());
30- await sharedTracker.addFutureFromClosure (() => t);
30+ await sharedTracker.add (() => t);
3131 return t;
3232 }, throwsA (const TypeMatcher <Exception >()));
3333 expect (() async {
3434 var t =
3535 Future .delayed (Duration (milliseconds: 10 ), () => throw Exception ());
36- await sharedTracker.addFutureFromClosure (() => t);
36+ await sharedTracker.add (() => t);
3737 return t;
3838 }, throwsA (const TypeMatcher <Exception >()));
3939 expect (() async {
4040 var t =
4141 Future .delayed (Duration (milliseconds: 10 ), () => throw Exception ());
4242 // ignore: empty_catches
43- await sharedTracker.addFutureFromClosure (() => t);
43+ await sharedTracker.add (() => t);
4444 return t;
4545 }, throwsA (const TypeMatcher <Exception >()));
4646 expect (() async {
4747 var t =
4848 Future .delayed (Duration (milliseconds: 10 ), () => throw Exception ());
49- await sharedTracker.addFutureFromClosure (() => t);
49+ await sharedTracker.add (() => t);
5050 return t;
5151 }, throwsA (const TypeMatcher <Exception >()));
5252
5353 /// We deadlock here if the exception is not handled properly.
54- await sharedTracker.wait () ;
54+ await sharedTracker.tasksComplete ;
5555 });
5656
5757 test ('basic sequential processing works with no deadlock' , () async {
5858 var completed = < int > {};
59- var tracker = MultiFutureTracker ( 1 );
60- await tracker.addFutureFromClosure (() async => completed.add (1 ));
61- await tracker.addFutureFromClosure (() async => completed.add (2 ));
62- await tracker.addFutureFromClosure (() async => completed.add (3 ));
63- await tracker.wait () ;
59+ var tracker = TaskQueue (maxJobs : 1 );
60+ await tracker.add (() async => completed.add (1 ));
61+ await tracker.add (() async => completed.add (2 ));
62+ await tracker.add (() async => completed.add (3 ));
63+ await tracker.tasksComplete ;
6464 expect (completed.length, equals (3 ));
6565 });
6666
6767 test ('basic sequential processing works on exceptions' , () async {
6868 var completed = < int > {};
69- var tracker = MultiFutureTracker (1 );
70- await tracker.addFutureFromClosure (() async => completed.add (0 ));
71- await tracker
72- .addFutureFromClosure (() async => throw Exception ())
73- .catchError ((e) {});
74- await tracker
75- .addFutureFromClosure (() async => throw Exception ())
76- .catchError ((e) {});
77- await tracker.addFutureFromClosure (() async => completed.add (3 ));
78- await tracker.wait ();
69+ var tracker = TaskQueue (maxJobs: 1 );
70+ await tracker.add (() async => completed.add (0 ));
71+ await tracker.add (() async => throw Exception ()).catchError ((e) {});
72+ await tracker.add (() async => throw Exception ()).catchError ((e) {});
73+ await tracker.add (() async => completed.add (3 ));
74+ await tracker.tasksComplete;
7975 expect (completed.length, equals (2 ));
8076 });
8177
8278 /// Verify that if there are more exceptions than the maximum number
8379 /// of in-flight [Future] s that there is no deadlock.
8480 test ('basic parallel processing works with no deadlock' , () async {
8581 var completed = < int > {};
86- var tracker = MultiFutureTracker ( 10 );
82+ var tracker = TaskQueue (maxJobs : 10 );
8783 for (var i = 0 ; i < 100 ; i++ ) {
88- await tracker.addFutureFromClosure (() async => completed.add (i));
84+ await tracker.add (() async => completed.add (i));
8985 }
90- await tracker.wait () ;
86+ await tracker.tasksComplete ;
9187 expect (completed.length, equals (100 ));
9288 });
9389
9490 test ('basic parallel processing works on exceptions' , () async {
9591 var completed = < int > {};
96- var tracker = MultiFutureTracker ( 10 );
92+ var tracker = TaskQueue (maxJobs : 10 );
9793 for (var i = 0 ; i < 50 ; i++ ) {
98- await tracker.addFutureFromClosure (() async => completed.add (i));
94+ await tracker.add (() async => completed.add (i));
9995 }
10096 for (var i = 50 ; i < 65 ; i++ ) {
101- await tracker.addFutureFromClosure (() async => throw Exception ());
97+ try {
98+ await tracker.add (() async => throw TestException ());
99+ } on TestException {
100+ // Ignore
101+ }
102102 }
103103 for (var i = 65 ; i < 100 ; i++ ) {
104- await tracker.addFutureFromClosure (() async => completed.add (i));
104+ await tracker.add (() async => completed.add (i));
105105 }
106- await tracker.wait () ;
106+ await tracker.tasksComplete ;
107107 expect (completed.length, equals (85 ));
108108 });
109109 });
110110}
111+
112+ class TestException implements Exception {}
0 commit comments