OLD | NEW |
(Empty) | |
| 1 <script> |
| 2 import "../resources/third_party/unittest/unittest.dart"; |
| 3 import "../resources/unit.dart"; |
| 4 import "dart:sky"; |
| 5 import 'dart:async'; |
| 6 |
| 7 void send20IntegersToDispatcherController(DispatcherController d) { |
| 8 for (var index = 0; index < 20; index += 1) |
| 9 d.add(index); |
| 10 } |
| 11 |
| 12 void main() { |
| 13 initUnit(); |
| 14 |
| 15 group('Dispatcher', () { |
| 16 |
| 17 test('simple listen', () { |
| 18 var d = new DispatcherController(); |
| 19 var result = new List(); |
| 20 d.dispatcher.listen((v) => result.add(v)); |
| 21 send20IntegersToDispatcherController(d); |
| 22 expect(result, orderedEquals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,
18,19])); |
| 23 }); |
| 24 |
| 25 test('firstWhere', () { |
| 26 var d = new DispatcherController(); |
| 27 var result = new List(); |
| 28 d.dispatcher.firstWhere((n) => n > 15).then((v) => result.add(v)); |
| 29 send20IntegersToDispatcherController(d); |
| 30 new Timer(new Duration(), expectAsync(() => expect(result, orderedEquals([
16])))); |
| 31 }); |
| 32 |
| 33 test('where', () { |
| 34 var d = new DispatcherController(); |
| 35 var result = new List(); |
| 36 d.dispatcher.where((n) => n % 2 == 0).until((n) => n > 10).listen((v) => r
esult.add(v)); |
| 37 send20IntegersToDispatcherController(d); |
| 38 expect(result, orderedEquals([0,2,4,6,8,10])); |
| 39 }); |
| 40 |
| 41 test('where without listener', () { |
| 42 var d = new DispatcherController(); |
| 43 var result = new List(); |
| 44 d.dispatcher.where((n) => result.add(n)); |
| 45 send20IntegersToDispatcherController(d); |
| 46 expect(result, orderedEquals([])); |
| 47 }); |
| 48 |
| 49 test('where with listeners removed', () { |
| 50 var d = new DispatcherController(); |
| 51 var result = new List(); |
| 52 var w = d.dispatcher.where((n) { result.add(n); return true; }); |
| 53 d.add(0); |
| 54 var f1 = (v) => result.add(100 + v); |
| 55 w.listen(f1); |
| 56 d.add(1); |
| 57 var f2 = (v) => result.add(200 + v); |
| 58 w.listen(f2); |
| 59 d.add(2); |
| 60 w.unlisten(f1); |
| 61 d.add(3); |
| 62 w.unlisten(f2); |
| 63 d.add(4); |
| 64 expect(result, orderedEquals([1, 101, 2, 102, 202, 3, 203])); |
| 65 }); |
| 66 |
| 67 test('double listeners', () { |
| 68 var d = new DispatcherController(); |
| 69 var result = new List(); |
| 70 d.dispatcher..listen((v) => result.add(v)) |
| 71 ..where((n) => n < 3).listen((v) => result.add(v*100)); |
| 72 send20IntegersToDispatcherController(d); |
| 73 expect(result, orderedEquals([0,0,1,100,2,200,3,4,5,6,7,8,9,10,11,12,13,14
,15,16,17,18,19])); |
| 74 }); |
| 75 |
| 76 test('zones', () { |
| 77 var d = new DispatcherController(); |
| 78 var result = new List(); |
| 79 runZoned(() { |
| 80 var zoneA = Zone.current; |
| 81 var listener; |
| 82 listener = (v) { |
| 83 if (Zone.current == zoneA) |
| 84 result.add(v + 0.1); |
| 85 if (v >= 18) |
| 86 d.dispatcher.unlisten(listener); |
| 87 }; |
| 88 d.dispatcher.listen(listener); |
| 89 }); |
| 90 runZoned(() { |
| 91 var zoneB = Zone.current; |
| 92 d.dispatcher.until((n) => n >= 10).listen((v) { |
| 93 if (Zone.current == zoneB) |
| 94 result.add(v + 0.2); |
| 95 }); |
| 96 }); |
| 97 send20IntegersToDispatcherController(d); |
| 98 expect(result, orderedEquals([0.1,0.2,1.1,1.2,2.1,2.2,3.1,3.2,4.1,4.2,5.1,
5.2,6.1,6.2,7.1,7.2,8.1,8.2,9.1,9.2,10.1,11.1,12.1,13.1,14.1,15.1,16.1,17.1,18.1
])); |
| 99 }); |
| 100 |
| 101 }); |
| 102 } |
| 103 </script> |
OLD | NEW |