Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
| 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. | |
| 4 | |
| 5 library async.subscription_stream_test; | |
| 6 | |
| 7 import "dart:async"; | |
| 8 | |
| 9 import "package:async/async.dart" show SubscriptionStream; | |
| 10 import "package:test/test.dart"; | |
|
ahe
2015/06/08 16:55:16
This most likely makes this a really slow test to
Lasse Reichstein Nielsen
2015/06/09 07:33:53
If the test package is slow on dart2js, then it sh
| |
| 11 | |
| 12 main() { | |
| 13 test("simple", () async { | |
| 14 var stream = createStream(); | |
| 15 var sub = stream.listen(null); | |
| 16 var ss = new SubscriptionStream<int>(sub); | |
| 17 await sleep(10); | |
| 18 expect(ss.toList(), completion([1, 2, 3, 4])); | |
| 19 }); | |
| 20 | |
| 21 test("after 2", () async { | |
| 22 var stream = createStream(); | |
| 23 int skips = 0; | |
| 24 var c = new Completer(); | |
| 25 var sub; | |
| 26 sub = stream.listen((v) { | |
| 27 ++skips; | |
| 28 expect(v, skips); | |
| 29 if (skips == 2) c.complete(new SubscriptionStream<int>(sub)); | |
| 30 }); | |
| 31 Stream<int> ss = await c.future; | |
| 32 await sleep(10); | |
| 33 expect(ss.toList(), completion([3, 4])); | |
| 34 }); | |
| 35 | |
| 36 group("cancelOnError", () { | |
| 37 for (var original in [false, true]) { | |
| 38 group(original ? "yes" : "no", () { | |
| 39 test("no", () async { | |
| 40 var stream = createErrorStream(); | |
| 41 var sub = stream.listen(null, cancelOnError: original); | |
| 42 var ss = new SubscriptionStream(sub, isCancelOnError: original); | |
| 43 var c = new Completer(); | |
| 44 var l = []; | |
| 45 var sub2 = ss.listen(l.add, onError: l.add, onDone: c.complete); | |
| 46 await c.future; | |
| 47 var expected = [1, 2, "To err is divine!"]; | |
| 48 if (!original) expected.add(4); | |
| 49 expect(l, expected); | |
| 50 }); | |
| 51 | |
| 52 test("yes", () async { | |
| 53 var stream = createErrorStream(); | |
| 54 var sub = stream.listen(null, cancelOnError: original); | |
| 55 var ss = new SubscriptionStream(sub, isCancelOnError: original); | |
| 56 var c = new Completer(); | |
| 57 var l = []; | |
| 58 var sub2 = ss.listen(l.add, | |
| 59 onError: (v) { l.add(v); c.complete(); }, | |
| 60 onDone: () => throw "should not happen", | |
| 61 cancelOnError: true); | |
| 62 await c.future; | |
| 63 await sleep(10); | |
| 64 expect(l, [1, 2, "To err is divine!"]); | |
| 65 }); | |
| 66 }); | |
| 67 | |
| 68 test("no-asFuture-noerr", () async { | |
| 69 var stream = createStream(); | |
| 70 var sub = stream.listen(null, cancelOnError: original); | |
| 71 var ss = new SubscriptionStream(sub, isCancelOnError: original); | |
| 72 var sub2 = ss.listen(null); | |
| 73 expect(sub2.asFuture(42), completion(42)); | |
| 74 }); | |
| 75 | |
| 76 test("no-asFuture-err", () async { | |
| 77 var stream = createErrorStream(); | |
| 78 var sub = stream.listen(null, cancelOnError: original); | |
| 79 var ss = new SubscriptionStream(sub, isCancelOnError: original); | |
| 80 var sub2 = ss.listen(null); | |
| 81 expect(sub2.asFuture(), throws); | |
| 82 }); | |
| 83 | |
| 84 test("yes-asFuture-noerr", () async { | |
| 85 var stream = createStream(); | |
| 86 var sub = stream.listen(null, cancelOnError: original); | |
| 87 var ss = new SubscriptionStream(sub, isCancelOnError: original); | |
| 88 var sub2 = ss.listen(null, cancelOnError: true); | |
| 89 expect(sub2.asFuture(42), completion(42)); | |
| 90 }); | |
| 91 | |
| 92 test("yes-asFuture-err", () async { | |
| 93 var stream = createErrorStream(); | |
| 94 var sub = stream.listen(null, cancelOnError: original); | |
| 95 var ss = new SubscriptionStream(sub, isCancelOnError: original); | |
| 96 var sub2 = ss.listen(null, cancelOnError: true); | |
| 97 expect(sub2.asFuture(), throws); | |
| 98 }); | |
| 99 } | |
| 100 }); | |
| 101 } | |
| 102 | |
| 103 const MS = const Duration(milliseconds: 1); | |
| 104 Future sleep(int n) => new Future.delayed(MS * n); | |
| 105 | |
| 106 Stream<int> createStream() async* { | |
| 107 yield 1; | |
| 108 await sleep(20); | |
| 109 yield 2; | |
| 110 await sleep(10); | |
| 111 yield 3; | |
| 112 await sleep(15); | |
| 113 yield 4; | |
| 114 } | |
| 115 | |
| 116 Stream<int> createErrorStream() { | |
| 117 StreamController controller = new StreamController<int>(); | |
| 118 () async { | |
| 119 controller.add(1); | |
| 120 await sleep(20); | |
| 121 controller.add(2); | |
| 122 await sleep(10); | |
| 123 controller.addError("To err is divine!"); | |
| 124 await sleep(15); | |
| 125 controller.add(4); | |
| 126 await sleep(5); | |
| 127 controller.close(); | |
| 128 }(); | |
| 129 return controller.stream; | |
| 130 } | |
| 131 | |
| 132 Stream<int> createLongStream() async* { | |
| 133 for (int i = 0; i < 200; i++) yield i; | |
| 134 } | |
| OLD | NEW |