| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012, 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 // Tests for Future.immediate | |
| 6 | |
| 7 testImmediate() { | |
| 8 final future = new Future<String>.immediate("42"); | |
| 9 Expect.isTrue(future.isComplete); | |
| 10 Expect.isTrue(future.hasValue); | |
| 11 var value = null; | |
| 12 future.then((x) => value = x); | |
| 13 Expect.equals("42", value); | |
| 14 } | |
| 15 | |
| 16 // Tests for getters (value, exception, isComplete, isValue) | |
| 17 | |
| 18 testNeverComplete() { | |
| 19 final completer = new Completer<int>(); | |
| 20 final future = completer.future; | |
| 21 Expect.isFalse(future.isComplete); | |
| 22 Expect.isFalse(future.hasValue); | |
| 23 Expect.throws(() { future.value; }); | |
| 24 Expect.throws(() { future.exception; }); | |
| 25 } | |
| 26 | |
| 27 testComplete() { | |
| 28 final completer = new Completer<int>(); | |
| 29 final future = completer.future; | |
| 30 | |
| 31 completer.complete(3); | |
| 32 | |
| 33 Expect.isTrue(future.isComplete); | |
| 34 Expect.isTrue(future.hasValue); | |
| 35 Expect.equals(3, future.value); | |
| 36 Expect.isNull(future.exception); | |
| 37 } | |
| 38 | |
| 39 // Tests for [then] | |
| 40 | |
| 41 testCompleteWithHandlerBeforeComplete() { | |
| 42 final completer = new Completer<int>(); | |
| 43 final future = completer.future; | |
| 44 | |
| 45 int before; | |
| 46 future.then((int v) { before = v; }); | |
| 47 Expect.throws(() { future.value; }); | |
| 48 Expect.isNull(before); | |
| 49 completer.complete(3); | |
| 50 | |
| 51 Expect.equals(3, future.value); | |
| 52 Expect.equals(3, before); | |
| 53 } | |
| 54 | |
| 55 testCompleteWithHandlerAfterComplete() { | |
| 56 final completer = new Completer<int>(); | |
| 57 final future = completer.future; | |
| 58 | |
| 59 int after; | |
| 60 completer.complete(3); | |
| 61 Expect.equals(3, future.value); | |
| 62 Expect.isNull(after); | |
| 63 | |
| 64 future.then((int v) { after = v; }); | |
| 65 | |
| 66 Expect.equals(3, future.value); | |
| 67 Expect.equals(3, after); | |
| 68 } | |
| 69 | |
| 70 testCompleteManyHandlers() { | |
| 71 final completer = new Completer<int>(); | |
| 72 final future = completer.future; | |
| 73 int after1; | |
| 74 int after2; | |
| 75 int after3; | |
| 76 | |
| 77 future.then((int v) { after1 = v; }); | |
| 78 completer.complete(3); | |
| 79 future.then((int v) { after2 = v; }); | |
| 80 future.then((int v) { after3 = v; }); | |
| 81 | |
| 82 Expect.equals(3, future.value); | |
| 83 Expect.equals(3, after1); | |
| 84 Expect.equals(3, after2); | |
| 85 Expect.equals(3, after3); | |
| 86 } | |
| 87 | |
| 88 // Tests for [handleException] | |
| 89 | |
| 90 testException() { | |
| 91 final completer = new Completer<int>(); | |
| 92 final future = completer.future; | |
| 93 final ex = new Exception(); | |
| 94 future.then((_) {}); // exception is thrown if we plan to use the value | |
| 95 Expect.throws( | |
| 96 () { completer.completeException(ex); }, | |
| 97 check: (e) => e == ex); | |
| 98 } | |
| 99 | |
| 100 testExceptionNoListeners() { | |
| 101 final completer = new Completer<int>(); | |
| 102 final future = completer.future; | |
| 103 final ex = new Exception(); | |
| 104 completer.completeException(ex); // future.then is not called, so no exception | |
| 105 } | |
| 106 | |
| 107 testExceptionHandler() { | |
| 108 final completer = new Completer<int>(); | |
| 109 final future = completer.future; | |
| 110 final ex = new Exception(); | |
| 111 | |
| 112 var ex2; | |
| 113 future.handleException((e) { ex2 = e; return true; }); | |
| 114 completer.completeException(ex); | |
| 115 Expect.equals(ex, ex2); | |
| 116 } | |
| 117 | |
| 118 testExceptionHandlerReturnsTrue() { | |
| 119 final completer = new Completer<int>(); | |
| 120 final future = completer.future; | |
| 121 final ex = new Exception(); | |
| 122 | |
| 123 bool reached = false; | |
| 124 future.handleException((e) { return true; }); | |
| 125 future.handleException((e) { reached = true; return false; }); // overshadowed | |
| 126 completer.completeException(ex); | |
| 127 Expect.isFalse(reached); | |
| 128 } | |
| 129 | |
| 130 testExceptionHandlerReturnsTrue2() { | |
| 131 final completer = new Completer<int>(); | |
| 132 final future = completer.future; | |
| 133 final ex = new Exception(); | |
| 134 | |
| 135 bool reached = false; | |
| 136 future.handleException((e) { return false; }); | |
| 137 future.handleException((e) { reached = true; return true; }); | |
| 138 completer.completeException(ex); | |
| 139 Expect.isTrue(reached); | |
| 140 } | |
| 141 | |
| 142 testExceptionHandlerReturnsFalse() { | |
| 143 final completer = new Completer<int>(); | |
| 144 final future = completer.future; | |
| 145 final ex = new Exception(); | |
| 146 | |
| 147 bool reached = false; | |
| 148 future.then((_) {}); // ensure exception is thrown... | |
| 149 future.handleException((e) { return false; }); | |
| 150 future.handleException((e) { reached = true; return false; }); // overshadowed | |
| 151 Expect.throws( | |
| 152 () { completer.completeException(ex); }, | |
| 153 check: (e) => e == ex); | |
| 154 Expect.isTrue(reached); | |
| 155 } | |
| 156 | |
| 157 testExceptionHandlerReturnsFalse2() { | |
| 158 final completer = new Completer<int>(); | |
| 159 final future = completer.future; | |
| 160 final ex = new Exception(); | |
| 161 | |
| 162 bool reached = false; | |
| 163 future.handleException((e) { return false; }); | |
| 164 future.handleException((e) { reached = true; return false; }); // overshadowed | |
| 165 completer.completeException(ex); // future.then is not called, so no exception | |
| 166 Expect.isTrue(reached); | |
| 167 } | |
| 168 | |
| 169 testExceptionHandlerAfterCompleteThenNotCalled() { | |
| 170 final completer = new Completer<int>(); | |
| 171 final future = completer.future; | |
| 172 final ex = new Exception(); | |
| 173 | |
| 174 var ex2; | |
| 175 completer.completeException(ex); | |
| 176 future.handleException((e) { ex2 = e; return true; }); | |
| 177 future.then((e) { }); | |
| 178 Expect.equals(ex, ex2); | |
| 179 } | |
| 180 | |
| 181 testExceptionHandlerAfterCompleteReturnsFalseThenThrows() { | |
| 182 final completer = new Completer<int>(); | |
| 183 final future = completer.future; | |
| 184 final ex = new Exception(); | |
| 185 | |
| 186 var ex2; | |
| 187 completer.completeException(ex); | |
| 188 future.handleException((e) { ex2 = e; return false; }); | |
| 189 Expect.throws(() { future.then((e) { }); }); | |
| 190 Expect.equals(ex, ex2); | |
| 191 } | |
| 192 | |
| 193 // Tests for Future.transform | |
| 194 | |
| 195 testTransformSuccess() { | |
| 196 final completer = new Completer<String>(); | |
| 197 final transformedFuture = completer.future.transform((x) => "** $x **"); | |
| 198 Expect.isFalse(transformedFuture.isComplete); | |
| 199 completer.complete("42"); | |
| 200 Expect.equals("** 42 **", transformedFuture.value); | |
| 201 } | |
| 202 | |
| 203 testTransformFutureFails() { | |
| 204 final completer = new Completer<String>(); | |
| 205 final error = new Exception("Oh no!"); | |
| 206 final transformedFuture = completer.future.transform((x) { | |
| 207 Expect.fail("transformer shouldn't be called"); | |
| 208 }); | |
| 209 Expect.isFalse(transformedFuture.isComplete); | |
| 210 completer.completeException(error); | |
| 211 Expect.equals(error, transformedFuture.exception); | |
| 212 } | |
| 213 | |
| 214 testTransformTransformerFails() { | |
| 215 final completer = new Completer<String>(); | |
| 216 final error = new Exception("Oh no!"); | |
| 217 final transformedFuture = completer.future.transform((x) { throw error; }); | |
| 218 Expect.isFalse(transformedFuture.isComplete); | |
| 219 completer.complete("42"); | |
| 220 Expect.equals(error, transformedFuture.exception); | |
| 221 } | |
| 222 | |
| 223 // Tests for Future.chain | |
| 224 | |
| 225 testChainSuccess() { | |
| 226 final completerA = new Completer<String>(); | |
| 227 final completerB = new Completer<String>(); | |
| 228 final chainedFuture = completerA.future.chain((x) { | |
| 229 Expect.equals("42", x); | |
| 230 return completerB.future; | |
| 231 }); | |
| 232 Expect.isFalse(chainedFuture.isComplete); | |
| 233 completerA.complete("42"); | |
| 234 Expect.isFalse(chainedFuture.isComplete); | |
| 235 completerB.complete("43"); | |
| 236 Expect.equals("43", chainedFuture.value); | |
| 237 } | |
| 238 | |
| 239 testChainFirstFutureFails() { | |
| 240 final completerA = new Completer<String>(); | |
| 241 final error = new Exception("Oh no!"); | |
| 242 final chainedFuture = completerA.future.chain((x) { | |
| 243 Expect.fail("transformer shouldn't be called"); | |
| 244 }); | |
| 245 Expect.isFalse(chainedFuture.isComplete); | |
| 246 completerA.completeException(error); | |
| 247 Expect.equals(error, chainedFuture.exception); | |
| 248 } | |
| 249 | |
| 250 testChainTransformerFails() { | |
| 251 final completerA = new Completer<String>(); | |
| 252 final error = new Exception("Oh no!"); | |
| 253 final chainedFuture = completerA.future.chain((x) { | |
| 254 Expect.equals("42", x); | |
| 255 throw error; | |
| 256 }); | |
| 257 Expect.isFalse(chainedFuture.isComplete); | |
| 258 completerA.complete("42"); | |
| 259 Expect.equals(error, chainedFuture.exception); | |
| 260 } | |
| 261 | |
| 262 testChainSecondFutureFails() { | |
| 263 final completerA = new Completer<String>(); | |
| 264 final completerB = new Completer<String>(); | |
| 265 final error = new Exception("Oh no!"); | |
| 266 final chainedFuture = completerA.future.chain((x) { | |
| 267 Expect.equals("42", x); | |
| 268 return completerB.future; | |
| 269 }); | |
| 270 Expect.isFalse(chainedFuture.isComplete); | |
| 271 completerA.complete("42"); | |
| 272 Expect.isFalse(chainedFuture.isComplete); | |
| 273 completerB.completeException(error); | |
| 274 Expect.equals(error, chainedFuture.exception); | |
| 275 } | |
| 276 | |
| 277 main() { | |
| 278 testImmediate(); | |
| 279 testNeverComplete(); | |
| 280 testComplete(); | |
| 281 testCompleteWithHandlerBeforeComplete(); | |
| 282 testCompleteWithHandlerAfterComplete(); | |
| 283 testCompleteManyHandlers(); | |
| 284 testException(); | |
| 285 testExceptionHandler(); | |
| 286 testExceptionHandlerReturnsTrue(); | |
| 287 testExceptionHandlerReturnsTrue2(); | |
| 288 testExceptionHandlerReturnsFalse(); | |
| 289 testExceptionHandlerReturnsFalse2(); | |
| 290 testExceptionHandlerAfterCompleteThenNotCalled(); | |
| 291 testExceptionHandlerAfterCompleteReturnsFalseThenThrows(); | |
| 292 testTransformSuccess(); | |
| 293 testTransformFutureFails(); | |
| 294 testTransformTransformerFails(); | |
| 295 testChainSuccess(); | |
| 296 testChainFirstFutureFails(); | |
| 297 testChainTransformerFails(); | |
| 298 testChainSecondFutureFails(); | |
| 299 } | |
| OLD | NEW |