OLD | NEW |
| (Empty) |
1 | |
2 library when.test; | |
3 | |
4 import 'dart:async'; | |
5 | |
6 import 'package:unittest/unittest.dart'; | |
7 import 'package:when/when.dart'; | |
8 | |
9 main() { | |
10 group('when', () { | |
11 | |
12 test('on non-Future callback result should call onSuccess with result, then
onComplete, and return onSuccess result', () { | |
13 var onSuccessCalled = false; | |
14 var onErrorCalled = false; | |
15 var onCompleteCalled = false; | |
16 var ret = when( | |
17 () => 5, | |
18 onSuccess: (x) { | |
19 expect(x, 5); | |
20 onSuccessCalled = true; | |
21 return 10; | |
22 }, | |
23 onError: (e) => onErrorCalled = true, | |
24 onComplete: () { | |
25 expect(onSuccessCalled, isTrue); | |
26 onCompleteCalled = true; | |
27 }); | |
28 expect(onErrorCalled, isFalse); | |
29 expect(onCompleteCalled, isTrue); | |
30 expect(ret, 10); | |
31 }); | |
32 | |
33 test('on callback failure should call onError with error, then onComplete',
() { | |
34 var onSuccessCalled = false; | |
35 var onErrorCalled = false; | |
36 var onCompleteCalled = false; | |
37 var ret = when( | |
38 () => throw 'e', | |
39 onSuccess: (_) => onSuccessCalled = true, | |
40 onError: (e) { | |
41 expect(e, 'e'); | |
42 onErrorCalled = true; | |
43 }, | |
44 onComplete: () { | |
45 expect(onErrorCalled, isTrue); | |
46 onCompleteCalled = true; | |
47 }); | |
48 expect(onSuccessCalled, isFalse); | |
49 expect(onCompleteCalled, isTrue); | |
50 expect(ret, isNull); | |
51 }); | |
52 | |
53 test('should pass stack trace to onError if binary', () { | |
54 var onErrorCalled = false; | |
55 when( | |
56 () => throw 'e', | |
57 onError: (e, s) { | |
58 onErrorCalled = true; | |
59 expect(s, isNotNull); | |
60 }); | |
61 expect(onErrorCalled, isTrue); | |
62 }); | |
63 | |
64 test('should throw callback error if no onError provided', () { | |
65 try { | |
66 when( | |
67 () => throw 'e'); | |
68 fail('callback error was swallowed'); | |
69 } catch (e) { | |
70 expect(e, 'e'); | |
71 } | |
72 }); | |
73 | |
74 test('should just return callback result if onSuccess not provided', () { | |
75 expect(when(() => 5), 5); | |
76 }); | |
77 | |
78 test('should not swallow onComplete error', () { | |
79 try { | |
80 when( | |
81 () {}, | |
82 onComplete: () => throw 'e'); | |
83 fail('onComplete error was swallowed'); | |
84 } catch (e) { | |
85 expect(e, 'e'); | |
86 } | |
87 }); | |
88 | |
89 group('on Future callback result', () { | |
90 | |
91 test('which succeeds should call onSuccess with result, then onComplete, a
nd complete with onSuccess result', () { | |
92 var onSuccessCalled = false; | |
93 var onErrorCalled = false; | |
94 var onCompleteCalled = false; | |
95 var result = when( | |
96 () => new Future.value(5), | |
97 onSuccess: (x) { | |
98 expect(x, 5); | |
99 onSuccessCalled = true; | |
100 return 10; | |
101 }, | |
102 onError: (e) => onErrorCalled = true, | |
103 onComplete: () { | |
104 expect(onSuccessCalled, isTrue); | |
105 onCompleteCalled = true; | |
106 }); | |
107 expect(onSuccessCalled, isFalse); | |
108 expect(onCompleteCalled, isFalse); | |
109 expect(result, new isInstanceOf<Future>()); | |
110 return result.then((ret) { | |
111 expect(onErrorCalled, isFalse); | |
112 expect(onCompleteCalled, isTrue); | |
113 expect(ret, 10); | |
114 }); | |
115 }); | |
116 | |
117 test('which fails should call onError with error, then onComplete', () { | |
118 var onSuccessCalled = false; | |
119 var onErrorCalled = false; | |
120 var onCompleteCalled = false; | |
121 var result = when( | |
122 () => new Future.error('e'), | |
123 onSuccess: (_) => onSuccessCalled = true, | |
124 onError: (e) { | |
125 expect(e, 'e'); | |
126 onErrorCalled = true; | |
127 }, | |
128 onComplete: () { | |
129 onErrorCalled = true; | |
130 onCompleteCalled = true; | |
131 }); | |
132 expect(onErrorCalled, isFalse); | |
133 expect(onCompleteCalled, isFalse); | |
134 expect(result, new isInstanceOf<Future>()); | |
135 return result.then((ret) { | |
136 expect(ret, isNull); | |
137 expect(onSuccessCalled, isFalse); | |
138 expect(onCompleteCalled, isTrue); | |
139 }); | |
140 }); | |
141 | |
142 test('should pass stack trace to onError if binary', () { | |
143 var onErrorCalled = false; | |
144 return when( | |
145 () => new Future.error('e'), | |
146 onError: (e, s) { | |
147 onErrorCalled = true; | |
148 // TODO: Why is the stack trace null? | |
149 // expect(s, isNotNull); | |
150 }).then((_) { | |
151 expect(onErrorCalled, isTrue); | |
152 }); | |
153 }); | |
154 | |
155 test('should throw callback error if no onError provided', () { | |
156 return when( | |
157 () => new Future.error('e') | |
158 ).then((_) { | |
159 fail('callback error was swallowed'); | |
160 }, onError: (e) { | |
161 expect(e, 'e'); | |
162 }); | |
163 }); | |
164 | |
165 test('should just return callback result if onSuccess not provided', () { | |
166 return when(() => new Future.value(5)).then((result) { | |
167 expect(result, 5); | |
168 }); | |
169 }); | |
170 | |
171 test('should not swallow onComplete error', () { | |
172 return when( | |
173 () => new Future.value(), | |
174 onComplete: () => throw 'e') | |
175 .then((ret) { | |
176 fail('onComplete error was swallowed'); | |
177 }, onError: (e) { | |
178 expect(e, 'e'); | |
179 }); | |
180 }); | |
181 | |
182 }); | |
183 }); | |
184 } | |
OLD | NEW |