Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2014, 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 import 'package:async_helper/async_helper.dart'; | |
| 6 import "package:expect/expect.dart"; | |
| 7 import 'dart:async'; | |
| 8 | |
| 9 /// StreamController in nested runZoned. Trivial. | |
| 10 test1() { | |
| 11 var events = []; | |
| 12 var done = new Completer(); | |
| 13 runZoned(() { | |
| 14 runZoned(() { | |
| 15 var c = new StreamController(); | |
| 16 c.stream.listen( | |
| 17 (x) => events.add("stream: $x"), | |
| 18 onError: (x) => events.add("stream: error $x"), | |
| 19 onDone: done.complete); | |
| 20 c.add(1); | |
| 21 c.addError(2); | |
| 22 c.close(); | |
| 23 }, onError: (x) => events.add("rza: error $x")); | |
| 24 }, onError: (x) => events.add("rzb: error $x")); | |
| 25 return [done.future, () { | |
| 26 Expect.listEquals(["stream: 1", "stream: error 2"], events); | |
| 27 }]; | |
| 28 } | |
| 29 | |
| 30 /// Adding errors to the stream controller from an outside zone. | |
| 31 test2() { | |
| 32 var events = []; | |
| 33 var done = new Completer(); | |
| 34 runZoned(() { | |
| 35 var c; | |
| 36 runZoned(() { | |
| 37 c = new StreamController(); | |
| 38 c.stream.listen( | |
| 39 (x) => events.add("stream: $x"), | |
| 40 onError: (x) => events.add("stream: error $x"), | |
| 41 onDone: done.complete); | |
| 42 }, onError: (x) => events.add("rza: error $x")); | |
| 43 c.add(1); | |
| 44 c.addError(2); | |
| 45 c.close(); | |
| 46 }, onError: (x) => events.add("rzb: error $x")); | |
| 47 return [done.future, () { | |
| 48 Expect.listEquals(["stream: 1", "stream: error 2"], events); | |
| 49 }]; | |
| 50 } | |
| 51 | |
| 52 /// Adding errors to the stream controller from a more nested zone. | |
| 53 test3() { | |
| 54 var events = []; | |
| 55 var done = new Completer(); | |
| 56 runZoned(() { | |
| 57 var c = new StreamController(); | |
| 58 c.stream.listen( | |
| 59 (x) => events.add("stream: $x"), | |
| 60 onError: (x) => events.add("stream: error $x"), | |
| 61 onDone: done.complete); | |
| 62 runZoned(() { | |
| 63 c.add(1); | |
| 64 c.addError(2); | |
| 65 c.close(); | |
| 66 }, onError: (x) => events.add("rza: error $x")); | |
| 67 }, onError: (x) => events.add("rzb: error $x")); | |
| 68 return [done.future, () { | |
| 69 Expect.listEquals(["stream: 1", "stream: error 2"], events); | |
| 70 }]; | |
| 71 } | |
| 72 | |
| 73 /// Feeding a stream from a different zone into another controller. | |
| 74 test4() { | |
| 75 var events = []; | |
| 76 var done = new Completer(); | |
| 77 runZoned(() { | |
| 78 var c = new StreamController(); | |
| 79 c.stream.listen( | |
| 80 (x) => events.add("stream: $x"), | |
| 81 onError: (x) => events.add("stream: error $x"), | |
| 82 onDone: done.complete); | |
| 83 runZoned(() { | |
| 84 var c2 = new StreamController(); | |
| 85 c.addStream(c2.stream).whenComplete(c.close); | |
| 86 c2.add(1); | |
| 87 c2.addError(2); | |
| 88 c2.close(); | |
| 89 }, onError: (x) => events.add("rza: error $x")); | |
| 90 }, onError: (x) => events.add("rzb: error $x")); | |
| 91 return [done.future, () { | |
| 92 Expect.listEquals(["stream: 1", "stream: error 2"], events); | |
| 93 }]; | |
| 94 } | |
| 95 | |
| 96 /// Feeding a stream from a different zone into another controller. | |
| 97 /// This time nesting is reversed wrt test4. | |
| 98 test5() { | |
| 99 var events = []; | |
| 100 var done = new Completer(); | |
| 101 runZoned(() { | |
| 102 var c; | |
| 103 runZoned(() { | |
| 104 c = new StreamController(); | |
| 105 c.stream.listen( | |
| 106 (x) => events.add("stream: $x"), | |
| 107 onError: (x) => events.add("stream: error $x"), | |
| 108 onDone: done.complete); | |
| 109 }, onError: (x) => events.add("rza: error $x")); | |
| 110 var c2 = new StreamController(); | |
| 111 c.addStream(c2.stream).whenComplete(c.close); | |
| 112 c2.add(1); | |
| 113 c2.addError(2); | |
| 114 c2.close(); | |
| 115 }, onError: (x) => events.add("rzb: error $x")); | |
| 116 return [done.future, () { | |
| 117 Expect.listEquals(["stream: 1", "stream: error 2"], events); | |
| 118 }]; | |
| 119 } | |
| 120 | |
|
Lasse Reichstein Nielsen
2014/07/10 09:45:17
All the tests have nested zones. How about indepen
floitsch
2014/07/10 13:50:42
Done.
| |
| 121 main() { | |
| 122 asyncStart(); | |
| 123 | |
| 124 var tests = [ | |
| 125 test1(), | |
| 126 test2(), | |
| 127 test3(), | |
| 128 test4(), | |
| 129 test5(), | |
| 130 ]; | |
| 131 | |
| 132 Future.wait(tests.map((l) => l.first)).then((_) { | |
| 133 // Give time to complete all pending actions. | |
| 134 Timer.run(() { | |
| 135 tests.forEach((l) => (l.last)()); | |
| 136 asyncEnd(); | |
| 137 }); | |
| 138 }); | |
| 139 } | |
| OLD | NEW |