OLD | NEW |
---|---|
(Empty) | |
1 <script> | |
2 import "../resources/third_party/unittest/unittest.dart"; | |
Hixie
2015/06/30 19:38:51
We should save this off somewhere, maybe in events
| |
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 |