OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
11 // with the distribution. | 11 // with the distribution. |
12 // * Neither the name of Google Inc. nor the names of its | 12 // * Neither the name of Google Inc. nor the names of its |
13 // contributors may be used to endorse or promote products derived | 13 // contributors may be used to endorse or promote products derived |
14 // from this software without specific prior written permission. | 14 // from this software without specific prior written permission. |
15 // | 15 // |
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | 27 |
28 // Flags: --allow-natives-syntax --promise-extra | 28 // Flags: --allow-natives-syntax |
29 | 29 |
30 // Make sure we don't rely on functions patchable by monkeys. | 30 // Make sure we don't rely on functions patchable by monkeys. |
31 var call = Function.prototype.call.call.bind(Function.prototype.call) | 31 var call = Function.prototype.call.call.bind(Function.prototype.call) |
32 var getOwnPropertyNames = Object.getOwnPropertyNames; | 32 var getOwnPropertyNames = Object.getOwnPropertyNames; |
33 var defineProperty = Object.defineProperty; | 33 var defineProperty = Object.defineProperty; |
34 var numberPrototype = Number.prototype; | 34 var numberPrototype = Number.prototype; |
35 var symbolIterator = Symbol.iterator; | 35 var symbolIterator = Symbol.iterator; |
36 | 36 |
37 | 37 |
38 (function() { | 38 (function() { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 | 75 |
76 for (var i in globals) { | 76 for (var i in globals) { |
77 var name = globals[i] | 77 var name = globals[i] |
78 if (name in whitelist || name[0] === name[0].toLowerCase()) delete globals[i] | 78 if (name in whitelist || name[0] === name[0].toLowerCase()) delete globals[i] |
79 } | 79 } |
80 for (var i in globals) { | 80 for (var i in globals) { |
81 if (globals[i]) clearProp(this, globals[i]) | 81 if (globals[i]) clearProp(this, globals[i]) |
82 } | 82 } |
83 | 83 |
84 | 84 |
| 85 function defer(constructor) { |
| 86 var resolve, reject; |
| 87 var promise = new constructor((res, rej) => { resolve = res; reject = rej }); |
| 88 return { promise, resolve, reject }; |
| 89 } |
| 90 |
85 var asyncAssertsExpected = 0; | 91 var asyncAssertsExpected = 0; |
86 | 92 |
87 function assertAsyncRan() { ++asyncAssertsExpected } | 93 function assertAsyncRan() { ++asyncAssertsExpected } |
88 | 94 |
89 function assertAsync(b, s) { | 95 function assertAsync(b, s) { |
90 if (b) { | 96 if (b) { |
91 print(s, "succeeded") | 97 print(s, "succeeded") |
92 } else { | 98 } else { |
93 %AbortJS(s + " FAILED!") // Simply throwing here will have no effect. | 99 %AbortJS(s + " FAILED!") // Simply throwing here will have no effect. |
94 } | 100 } |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 | 140 |
135 (function() { | 141 (function() { |
136 assertThrows(function() { new Promise(5) }, TypeError) | 142 assertThrows(function() { new Promise(5) }, TypeError) |
137 })(); | 143 })(); |
138 | 144 |
139 (function() { | 145 (function() { |
140 assertDoesNotThrow(function() { new Promise(function() { throw 5 }) }) | 146 assertDoesNotThrow(function() { new Promise(function() { throw 5 }) }) |
141 })(); | 147 })(); |
142 | 148 |
143 (function() { | 149 (function() { |
144 (new Promise(function() { throw 5 })).chain( | 150 (new Promise(function() { throw 5 })).then( |
145 assertUnreachable, | 151 assertUnreachable, |
146 function(r) { assertAsync(r === 5, "new-throw") } | 152 function(r) { assertAsync(r === 5, "new-throw") } |
147 ) | 153 ) |
148 assertAsyncRan() | 154 assertAsyncRan() |
149 })(); | 155 })(); |
150 | 156 |
151 (function() { | 157 (function() { |
152 Promise.accept(5); | 158 Promise.resolve(5); |
153 Promise.accept(5).chain(undefined, assertUnreachable).chain( | 159 Promise.resolve(5).then(undefined, assertUnreachable).then( |
154 function(x) { assertAsync(x === 5, "resolved/chain-nohandler") }, | 160 function(x) { assertAsync(x === 5, "resolved/then-nohandler") }, |
155 assertUnreachable | 161 assertUnreachable |
156 ) | 162 ) |
157 assertAsyncRan() | 163 assertAsyncRan() |
158 })(); | 164 })(); |
159 | 165 |
160 (function() { | 166 (function() { |
161 Promise.reject(5).chain(assertUnreachable, undefined).chain( | 167 Promise.resolve(5).then(undefined, assertUnreachable).then( |
162 assertUnreachable, | |
163 function(r) { assertAsync(r === 5, "rejected/chain-nohandler") } | |
164 ) | |
165 assertAsyncRan() | |
166 })(); | |
167 | |
168 (function() { | |
169 Promise.accept(5).then(undefined, assertUnreachable).chain( | |
170 function(x) { assertAsync(x === 5, "resolved/then-nohandler-undefined") }, | 168 function(x) { assertAsync(x === 5, "resolved/then-nohandler-undefined") }, |
171 assertUnreachable | 169 assertUnreachable |
172 ) | 170 ) |
173 assertAsyncRan() | 171 assertAsyncRan() |
174 Promise.accept(6).then(null, assertUnreachable).chain( | 172 Promise.resolve(6).then(null, assertUnreachable).then( |
175 function(x) { assertAsync(x === 6, "resolved/then-nohandler-null") }, | 173 function(x) { assertAsync(x === 6, "resolved/then-nohandler-null") }, |
176 assertUnreachable | 174 assertUnreachable |
177 ) | 175 ) |
178 assertAsyncRan() | 176 assertAsyncRan() |
179 })(); | 177 })(); |
180 | 178 |
181 (function() { | 179 (function() { |
182 Promise.reject(5).then(assertUnreachable, undefined).chain( | 180 var p1 = Promise.resolve(5) |
183 assertUnreachable, | 181 var p2 = Promise.resolve(p1) |
184 function(r) { assertAsync(r === 5, "rejected/then-nohandler-undefined") } | 182 var p3 = Promise.resolve(p2) |
185 ) | |
186 assertAsyncRan() | |
187 Promise.reject(6).then(assertUnreachable, null).chain( | |
188 assertUnreachable, | |
189 function(r) { assertAsync(r === 6, "rejected/then-nohandler-null") } | |
190 ) | |
191 assertAsyncRan() | |
192 })(); | |
193 | |
194 (function() { | |
195 var p1 = Promise.accept(5) | |
196 var p2 = Promise.accept(p1) | |
197 var p3 = Promise.accept(p2) | |
198 // Note: Chain now has then-style semantics, here and in future tests. | |
199 p3.chain( | |
200 function(x) { assertAsync(x === 5, "resolved/chain") }, | |
201 assertUnreachable | |
202 ) | |
203 assertAsyncRan() | |
204 })(); | |
205 | |
206 (function() { | |
207 var p1 = Promise.accept(5) | |
208 var p2 = Promise.accept(p1) | |
209 var p3 = Promise.accept(p2) | |
210 p3.then( | 183 p3.then( |
211 function(x) { assertAsync(x === 5, "resolved/then") }, | 184 function(x) { assertAsync(x === 5, "resolved/then") }, |
212 assertUnreachable | 185 assertUnreachable |
213 ) | 186 ) |
214 assertAsyncRan() | 187 assertAsyncRan() |
215 })(); | 188 })(); |
216 | 189 |
217 (function() { | 190 (function() { |
218 var p1 = Promise.reject(5) | 191 var p1 = Promise.reject(5) |
219 var p2 = Promise.accept(p1) | 192 var p2 = Promise.resolve(p1) |
220 var p3 = Promise.accept(p2) | 193 var p3 = Promise.resolve(p2) |
221 p3.chain( | |
222 assertUnreachable, | |
223 function(x) { assertAsync(x === 5, "rejected/chain") } | |
224 ) | |
225 assertAsyncRan() | |
226 })(); | |
227 | |
228 (function() { | |
229 var p1 = Promise.reject(5) | |
230 var p2 = Promise.accept(p1) | |
231 var p3 = Promise.accept(p2) | |
232 p3.then( | 194 p3.then( |
233 assertUnreachable, | 195 assertUnreachable, |
234 function(x) { assertAsync(x === 5, "rejected/then") } | 196 function(x) { assertAsync(x === 5, "rejected/then") } |
235 ) | 197 ) |
236 assertAsyncRan() | 198 assertAsyncRan() |
237 })(); | 199 })(); |
238 | 200 |
239 (function() { | 201 (function() { |
240 var p1 = Promise.accept(5) | 202 var p1 = Promise.resolve(5) |
241 var p2 = Promise.accept(p1) | 203 var p2 = Promise.resolve(p1) |
242 var p3 = Promise.accept(p2) | 204 var p3 = Promise.resolve(p2) |
243 p3.chain(function(x) { return x }, assertUnreachable).chain( | 205 p3.then(function(x) { return x }, assertUnreachable).then( |
244 function(x) { assertAsync(x === 5, "resolved/chain/chain") }, | 206 function(x) { assertAsync(x === 5, "resolved/then/then") }, |
245 assertUnreachable | 207 assertUnreachable |
246 ) | 208 ) |
247 assertAsyncRan() | 209 assertAsyncRan() |
248 })(); | 210 })(); |
249 | 211 |
250 (function() { | 212 (function() { |
251 var p1 = Promise.accept(5) | 213 var p1 = Promise.resolve(5) |
252 var p2 = Promise.accept(p1) | 214 var p2 = Promise.resolve(p1) |
253 var p3 = Promise.accept(p2) | 215 var p3 = Promise.resolve(p2) |
254 p3.chain(function(x) { return x }, assertUnreachable).then( | 216 p3.then(function(x){ return Promise.resolve(x+1) }, assertUnreachable).then( |
255 function(x) { assertAsync(x === 5, "resolved/chain/then") }, | |
256 assertUnreachable | |
257 ) | |
258 assertAsyncRan() | |
259 })(); | |
260 | |
261 (function() { | |
262 var p1 = Promise.accept(5) | |
263 var p2 = Promise.accept(p1) | |
264 var p3 = Promise.accept(p2) | |
265 p3.chain(function(x) { return 6 }, assertUnreachable).chain( | |
266 function(x) { assertAsync(x === 6, "resolved/chain/chain2") }, | |
267 assertUnreachable | |
268 ) | |
269 assertAsyncRan() | |
270 })(); | |
271 | |
272 (function() { | |
273 var p1 = Promise.accept(5) | |
274 var p2 = Promise.accept(p1) | |
275 var p3 = Promise.accept(p2) | |
276 p3.chain(function(x) { return 6 }, assertUnreachable).then( | |
277 function(x) { assertAsync(x === 6, "resolved/chain/then2") }, | |
278 assertUnreachable | |
279 ) | |
280 assertAsyncRan() | |
281 })(); | |
282 | |
283 (function() { | |
284 var p1 = Promise.accept(5) | |
285 var p2 = Promise.accept(p1) | |
286 var p3 = Promise.accept(p2) | |
287 p3.then(function(x) { return x + 1 }, assertUnreachable).chain( | |
288 function(x) { assertAsync(x === 6, "resolved/then/chain") }, | |
289 assertUnreachable | |
290 ) | |
291 assertAsyncRan() | |
292 })(); | |
293 | |
294 (function() { | |
295 var p1 = Promise.accept(5) | |
296 var p2 = Promise.accept(p1) | |
297 var p3 = Promise.accept(p2) | |
298 p3.then(function(x) { return x + 1 }, assertUnreachable).then( | |
299 function(x) { assertAsync(x === 6, "resolved/then/then") }, | |
300 assertUnreachable | |
301 ) | |
302 assertAsyncRan() | |
303 })(); | |
304 | |
305 (function() { | |
306 var p1 = Promise.accept(5) | |
307 var p2 = Promise.accept(p1) | |
308 var p3 = Promise.accept(p2) | |
309 p3.then(function(x){ return Promise.accept(x+1) }, assertUnreachable).chain( | |
310 function(x) { assertAsync(x === 6, "resolved/then/chain2") }, | |
311 assertUnreachable | |
312 ) | |
313 assertAsyncRan() | |
314 })(); | |
315 | |
316 (function() { | |
317 var p1 = Promise.accept(5) | |
318 var p2 = Promise.accept(p1) | |
319 var p3 = Promise.accept(p2) | |
320 p3.then(function(x) { return Promise.accept(x+1) }, assertUnreachable).then( | |
321 function(x) { assertAsync(x === 6, "resolved/then/then2") }, | 217 function(x) { assertAsync(x === 6, "resolved/then/then2") }, |
322 assertUnreachable | 218 assertUnreachable |
323 ) | 219 ) |
324 assertAsyncRan() | 220 assertAsyncRan() |
325 })(); | 221 })(); |
326 | 222 |
327 (function() { | 223 (function() { |
328 var p1 = Promise.accept(5) | 224 var p1 = Promise.resolve(5) |
329 var p2 = Promise.accept(p1) | 225 var p2 = Promise.resolve(p1) |
330 var p3 = Promise.accept(p2) | 226 var p3 = Promise.resolve(p2) |
331 p3.chain(function(x) { throw 6 }, assertUnreachable).chain( | 227 p3.then(function(x) { throw 6 }, assertUnreachable).then( |
332 assertUnreachable, | 228 assertUnreachable, |
333 function(x) { assertAsync(x === 6, "resolved/chain-throw/chain") } | 229 function(x) { assertAsync(x === 6, "resolved/then-throw/then") } |
334 ) | 230 ) |
335 assertAsyncRan() | 231 assertAsyncRan() |
336 })(); | 232 })(); |
337 | 233 |
338 (function() { | 234 (function() { |
339 var p1 = Promise.accept(5) | 235 var p1 = Promise.resolve(5) |
340 var p2 = Promise.accept(p1) | 236 var p2 = Promise.resolve(p1) |
341 var p3 = Promise.accept(p2) | 237 var p3 = Promise.resolve(p2) |
342 p3.chain(function(x) { throw 6 }, assertUnreachable).then( | 238 p3.then(function(x) { throw 6 }, assertUnreachable).then( |
343 assertUnreachable, | 239 assertUnreachable, |
344 function(x) { assertAsync(x === 6, "resolved/chain-throw/then") } | 240 function(x) { assertAsync(x === 6, "resolved/then-throw/then") } |
345 ) | 241 ) |
346 assertAsyncRan() | 242 assertAsyncRan() |
347 })(); | 243 })(); |
348 | 244 |
349 (function() { | 245 (function() { |
350 var p1 = Promise.accept(5) | 246 var p1 = Promise.resolve(5) |
351 var p2 = Promise.accept(p1) | 247 var p2 = Promise.resolve(p1) |
352 var p3 = Promise.accept(p2) | 248 var p3 = Promise.resolve(p2) |
353 p3.then(function(x) { throw 6 }, assertUnreachable).chain( | 249 p3.then(function(x) { throw 6 }, assertUnreachable).then( |
354 assertUnreachable, | 250 assertUnreachable, |
355 function(x) { assertAsync(x === 6, "resolved/then-throw/chain") } | 251 function(x) { assertAsync(x === 6, "resolved/then-throw/then") } |
356 ) | 252 ) |
357 assertAsyncRan() | 253 assertAsyncRan() |
358 })(); | 254 })(); |
359 | 255 |
360 (function() { | 256 (function() { |
361 var p1 = Promise.accept(5) | 257 var p1 = Promise.resolve(5) |
362 var p2 = Promise.accept(p1) | 258 var p2 = Promise.resolve(p1) |
363 var p3 = Promise.accept(p2) | 259 var p3 = Promise.resolve(p2) |
364 p3.then(function(x) { throw 6 }, assertUnreachable).then( | 260 p3.then(function(x) { throw 6 }, assertUnreachable).then( |
365 assertUnreachable, | 261 assertUnreachable, |
366 function(x) { assertAsync(x === 6, "resolved/then-throw/then") } | 262 function(x) { assertAsync(x === 6, "resolved/then-throw/then") } |
367 ) | 263 ) |
368 assertAsyncRan() | 264 assertAsyncRan() |
369 })(); | 265 })(); |
370 | 266 |
371 (function() { | 267 (function() { |
372 var p1 = Promise.accept(5) | 268 var p1 = Promise.resolve(5) |
373 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 269 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
374 var p3 = Promise.accept(p2) | 270 var p3 = Promise.resolve(p2) |
375 p3.chain( | 271 p3.then( |
376 function(x) { assertAsync(x === 5, "resolved/thenable/chain") }, | 272 function(x) { assertAsync(x === 5, "resolved/thenable/then") }, |
377 assertUnreachable | 273 assertUnreachable |
378 ) | 274 ) |
379 assertAsyncRan() | 275 assertAsyncRan() |
380 })(); | 276 })(); |
381 | 277 |
382 (function() { | 278 (function() { |
383 var p1 = Promise.accept(5) | 279 var p1 = Promise.resolve(5) |
384 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 280 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
385 var p3 = Promise.accept(p2) | 281 var p3 = Promise.resolve(p2) |
386 p3.then( | 282 p3.then( |
387 function(x) { assertAsync(x === 5, "resolved/thenable/then") }, | 283 function(x) { assertAsync(x === 5, "resolved/thenable/then") }, |
388 assertUnreachable | 284 assertUnreachable |
389 ) | 285 ) |
390 assertAsyncRan() | 286 assertAsyncRan() |
391 })(); | 287 })(); |
392 | 288 |
393 (function() { | 289 (function() { |
394 var p1 = Promise.reject(5) | 290 var p1 = Promise.reject(5) |
395 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 291 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
396 var p3 = Promise.accept(p2) | 292 var p3 = Promise.resolve(p2) |
397 p3.chain( | 293 p3.then( |
398 assertUnreachable, | 294 assertUnreachable, |
399 function(x) { assertAsync(x === 5, "rejected/thenable/chain") } | 295 function(x) { assertAsync(x === 5, "rejected/thenable/then") } |
400 ) | 296 ) |
401 assertAsyncRan() | 297 assertAsyncRan() |
402 })(); | 298 })(); |
403 | 299 |
404 (function() { | 300 (function() { |
405 var p1 = Promise.reject(5) | 301 var p1 = Promise.reject(5) |
406 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 302 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
407 var p3 = Promise.accept(p2) | 303 var p3 = Promise.resolve(p2) |
408 p3.then( | 304 p3.then( |
409 assertUnreachable, | 305 assertUnreachable, |
410 function(x) { assertAsync(x === 5, "rejected/thenable/then") } | 306 function(x) { assertAsync(x === 5, "rejected/thenable/then") } |
411 ) | 307 ) |
412 assertAsyncRan() | 308 assertAsyncRan() |
413 })(); | 309 })(); |
414 | 310 |
415 (function() { | 311 (function() { |
416 var deferred = Promise.defer() | 312 var deferred = defer(Promise) |
417 var p1 = deferred.promise | 313 var p1 = deferred.promise |
418 var p2 = Promise.accept(p1) | 314 var p2 = Promise.resolve(p1) |
419 var p3 = Promise.accept(p2) | 315 var p3 = Promise.resolve(p2) |
420 p3.chain( | 316 p3.then( |
421 function(x) { assertAsync(x === 5, "chain/resolve") }, | 317 function(x) { assertAsync(x === 5, "then/resolve") }, |
422 assertUnreachable | 318 assertUnreachable |
423 ) | 319 ) |
424 deferred.resolve(5) | 320 deferred.resolve(5) |
425 assertAsyncRan() | 321 assertAsyncRan() |
426 })(); | 322 })(); |
427 | 323 |
428 (function() { | 324 (function() { |
429 var deferred = Promise.defer() | 325 var deferred = defer(Promise) |
430 var p1 = deferred.promise | 326 var p1 = deferred.promise |
431 var p2 = Promise.resolve(p1) | 327 var p2 = Promise.resolve(p1) |
432 var p3 = Promise.resolve(p2) | 328 var p3 = Promise.resolve(p2) |
433 p3.then( | 329 p3.then( |
434 function(x) { assertAsync(x === 5, "then/resolve") }, | 330 function(x) { assertAsync(x === 5, "then/resolve") }, |
435 assertUnreachable | 331 assertUnreachable |
436 ) | 332 ) |
437 deferred.resolve(5) | 333 deferred.resolve(5) |
438 assertAsyncRan() | 334 assertAsyncRan() |
439 })(); | 335 })(); |
440 | 336 |
441 (function() { | 337 (function() { |
442 var deferred = Promise.defer() | 338 var deferred = defer(Promise) |
443 var p1 = deferred.promise | 339 var p1 = deferred.promise |
444 var p2 = Promise.accept(p1) | 340 var p2 = Promise.resolve(p1) |
445 var p3 = Promise.accept(p2) | 341 var p3 = Promise.resolve(p2) |
446 p3.chain( | 342 p3.then( |
447 assertUnreachable, | 343 assertUnreachable, |
448 function(x) { assertAsync(x === 5, "chain/reject") } | 344 function(x) { assertAsync(x === 5, "then/reject") } |
449 ) | 345 ) |
450 deferred.reject(5) | 346 deferred.reject(5) |
451 assertAsyncRan() | 347 assertAsyncRan() |
452 })(); | 348 })(); |
453 | 349 |
454 (function() { | 350 (function() { |
455 var deferred = Promise.defer() | 351 var deferred = defer(Promise) |
456 var p1 = deferred.promise | 352 var p1 = deferred.promise |
457 var p2 = Promise.accept(p1) | 353 var p2 = Promise.resolve(p1) |
458 var p3 = Promise.accept(p2) | 354 var p3 = Promise.resolve(p2) |
459 p3.then( | 355 p3.then( |
460 assertUnreachable, | 356 assertUnreachable, |
461 function(x) { assertAsync(x === 5, "then/reject") } | 357 function(x) { assertAsync(x === 5, "then/reject") } |
462 ) | 358 ) |
463 deferred.reject(5) | 359 deferred.reject(5) |
464 assertAsyncRan() | 360 assertAsyncRan() |
465 })(); | 361 })(); |
466 | 362 |
467 (function() { | 363 (function() { |
468 var deferred = Promise.defer() | 364 var deferred = defer(Promise) |
469 var p1 = deferred.promise | 365 var p1 = deferred.promise |
470 var p2 = p1.then(1, 2) | 366 var p2 = p1.then(1, 2) |
471 p2.then( | 367 p2.then( |
472 function(x) { assertAsync(x === 5, "then/resolve-non-function") }, | 368 function(x) { assertAsync(x === 5, "then/resolve-non-function") }, |
473 assertUnreachable | 369 assertUnreachable |
474 ) | 370 ) |
475 deferred.resolve(5) | 371 deferred.resolve(5) |
476 assertAsyncRan() | 372 assertAsyncRan() |
477 })(); | 373 })(); |
478 | 374 |
479 (function() { | 375 (function() { |
480 var deferred = Promise.defer() | 376 var deferred = defer(Promise) |
481 var p1 = deferred.promise | 377 var p1 = deferred.promise |
482 var p2 = p1.then(1, 2) | 378 var p2 = p1.then(1, 2) |
483 p2.then( | 379 p2.then( |
484 assertUnreachable, | 380 assertUnreachable, |
485 function(x) { assertAsync(x === 5, "then/reject-non-function") } | 381 function(x) { assertAsync(x === 5, "then/reject-non-function") } |
486 ) | 382 ) |
487 deferred.reject(5) | 383 deferred.reject(5) |
488 assertAsyncRan() | 384 assertAsyncRan() |
489 })(); | 385 })(); |
490 | 386 |
491 (function() { | 387 (function() { |
492 var deferred = Promise.defer() | 388 var deferred = defer(Promise) |
493 var p1 = deferred.promise | 389 var p1 = deferred.promise |
494 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 390 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
495 var p3 = Promise.accept(p2) | 391 var p3 = Promise.resolve(p2) |
496 p3.chain( | 392 p3.then( |
497 function(x) { assertAsync(x === 5, "chain/resolve/thenable") }, | 393 function(x) { assertAsync(x === 5, "then/resolve/thenable") }, |
498 assertUnreachable | 394 assertUnreachable |
499 ) | 395 ) |
500 deferred.resolve(5) | 396 deferred.resolve(5) |
501 assertAsyncRan() | 397 assertAsyncRan() |
502 })(); | 398 })(); |
503 | 399 |
504 (function() { | 400 (function() { |
505 var deferred = Promise.defer() | 401 var deferred = defer(Promise) |
506 var p1 = deferred.promise | 402 var p1 = deferred.promise |
507 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 403 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
508 var p3 = Promise.accept(p2) | 404 var p3 = Promise.resolve(p2) |
509 p3.then( | 405 p3.then( |
510 function(x) { assertAsync(x === 5, "then/resolve/thenable") }, | 406 function(x) { assertAsync(x === 5, "then/resolve/thenable") }, |
511 assertUnreachable | 407 assertUnreachable |
512 ) | 408 ) |
513 deferred.resolve(5) | 409 deferred.resolve(5) |
514 assertAsyncRan() | 410 assertAsyncRan() |
515 })(); | 411 })(); |
516 | 412 |
517 (function() { | 413 (function() { |
518 var deferred = Promise.defer() | 414 var deferred = defer(Promise) |
519 var p1 = deferred.promise | 415 var p1 = deferred.promise |
520 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 416 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
521 var p3 = Promise.accept(p2) | 417 var p3 = Promise.resolve(p2) |
522 p3.chain( | 418 p3.then( |
523 assertUnreachable, | 419 assertUnreachable, |
524 function(x) { assertAsync(x === 5, "chain/reject/thenable") } | 420 function(x) { assertAsync(x === 5, "then/reject/thenable") } |
525 ) | 421 ) |
526 deferred.reject(5) | 422 deferred.reject(5) |
527 assertAsyncRan() | 423 assertAsyncRan() |
528 })(); | 424 })(); |
529 | 425 |
530 (function() { | 426 (function() { |
531 var deferred = Promise.defer() | 427 var deferred = defer(Promise) |
532 var p1 = deferred.promise | 428 var p1 = deferred.promise |
533 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 429 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
534 var p3 = Promise.accept(p2) | 430 var p3 = Promise.resolve(p2) |
535 p3.then( | 431 p3.then( |
536 assertUnreachable, | 432 assertUnreachable, |
537 function(x) { assertAsync(x === 5, "then/reject/thenable") } | 433 function(x) { assertAsync(x === 5, "then/reject/thenable") } |
538 ) | 434 ) |
539 deferred.reject(5) | 435 deferred.reject(5) |
540 assertAsyncRan() | 436 assertAsyncRan() |
541 })(); | 437 })(); |
542 | 438 |
543 (function() { | 439 (function() { |
544 var p1 = Promise.accept(5) | 440 var p1 = Promise.resolve(5) |
545 var p2 = Promise.accept(p1) | 441 var p2 = Promise.resolve(p1) |
546 var deferred = Promise.defer() | 442 var deferred = defer(Promise) |
547 var p3 = deferred.promise | 443 var p3 = deferred.promise |
548 p3.chain( | 444 p3.then( |
549 function(x) { assertAsync(x === 5, "chain/resolve2") }, | 445 function(x) { assertAsync(x === 5, "then/resolve2") }, |
550 assertUnreachable | 446 assertUnreachable |
551 ) | 447 ) |
552 deferred.resolve(p2) | 448 deferred.resolve(p2) |
553 assertAsyncRan() | 449 assertAsyncRan() |
554 })(); | 450 })(); |
555 | 451 |
556 (function() { | 452 (function() { |
557 var p1 = Promise.accept(5) | 453 var p1 = Promise.resolve(5) |
558 var p2 = Promise.accept(p1) | 454 var p2 = Promise.resolve(p1) |
559 var deferred = Promise.defer() | 455 var deferred = defer(Promise) |
560 var p3 = deferred.promise | 456 var p3 = deferred.promise |
561 p3.then( | 457 p3.then( |
562 function(x) { assertAsync(x === 5, "then/resolve2") }, | 458 function(x) { assertAsync(x === 5, "then/resolve2") }, |
563 assertUnreachable | 459 assertUnreachable |
564 ) | 460 ) |
565 deferred.resolve(p2) | 461 deferred.resolve(p2) |
566 assertAsyncRan() | 462 assertAsyncRan() |
567 })(); | 463 })(); |
568 | 464 |
569 (function() { | 465 (function() { |
570 var p1 = Promise.accept(5) | 466 var p1 = Promise.resolve(5) |
571 var p2 = Promise.accept(p1) | 467 var p2 = Promise.resolve(p1) |
572 var deferred = Promise.defer() | 468 var deferred = defer(Promise) |
573 var p3 = deferred.promise | 469 var p3 = deferred.promise |
574 p3.chain( | 470 p3.then( |
575 assertUnreachable, | 471 assertUnreachable, |
576 function(x) { assertAsync(x === 5, "chain/reject2") } | 472 function(x) { assertAsync(x === 5, "then/reject2") } |
577 ) | 473 ) |
578 deferred.reject(5) | 474 deferred.reject(5) |
579 assertAsyncRan() | 475 assertAsyncRan() |
580 })(); | 476 })(); |
581 | 477 |
582 (function() { | 478 (function() { |
583 var p1 = Promise.accept(5) | 479 var p1 = Promise.resolve(5) |
584 var p2 = Promise.accept(p1) | 480 var p2 = Promise.resolve(p1) |
585 var deferred = Promise.defer() | 481 var deferred = defer(Promise) |
586 var p3 = deferred.promise | 482 var p3 = deferred.promise |
587 p3.then( | 483 p3.then( |
588 assertUnreachable, | 484 assertUnreachable, |
589 function(x) { assertAsync(x === 5, "then/reject2") } | 485 function(x) { assertAsync(x === 5, "then/reject2") } |
590 ) | 486 ) |
591 deferred.reject(5) | 487 deferred.reject(5) |
592 assertAsyncRan() | 488 assertAsyncRan() |
593 })(); | 489 })(); |
594 | 490 |
595 (function() { | 491 (function() { |
596 var p1 = Promise.accept(5) | 492 var p1 = Promise.resolve(5) |
597 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 493 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
598 var deferred = Promise.defer() | 494 var deferred = defer(Promise) |
599 var p3 = deferred.promise | 495 var p3 = deferred.promise |
600 p3.chain( | 496 p3.then( |
601 function(x) { assertAsync(x === 5, "chain/resolve/thenable2") }, | 497 function(x) { assertAsync(x === 5, "then/resolve/thenable2") }, |
602 assertUnreachable | 498 assertUnreachable |
603 ) | 499 ) |
604 deferred.resolve(p2) | 500 deferred.resolve(p2) |
605 assertAsyncRan() | 501 assertAsyncRan() |
606 })(); | 502 })(); |
607 | 503 |
608 (function() { | 504 (function() { |
609 var p1 = Promise.accept(5) | 505 var p1 = Promise.resolve(5) |
610 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 506 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
611 var deferred = Promise.defer() | 507 var deferred = defer(Promise) |
612 var p3 = deferred.promise | 508 var p3 = deferred.promise |
613 p3.then( | 509 p3.then( |
614 function(x) { assertAsync(x === 5, "then/resolve/thenable2") }, | 510 function(x) { assertAsync(x === 5, "then/resolve/thenable2") }, |
615 assertUnreachable | 511 assertUnreachable |
616 ) | 512 ) |
617 deferred.resolve(p2) | 513 deferred.resolve(p2) |
618 assertAsyncRan() | 514 assertAsyncRan() |
619 })(); | 515 })(); |
620 | 516 |
621 (function() { | 517 (function() { |
622 var p1 = Promise.accept(0) | 518 var p1 = Promise.resolve(0) |
623 var p2 = p1.chain(function(x) { return p2 }, assertUnreachable) | 519 var p2 = p1.then(function(x) { return p2 }, assertUnreachable) |
624 p2.chain( | 520 p2.then( |
625 assertUnreachable, | 521 assertUnreachable, |
626 function(r) { assertAsync(r instanceof TypeError, "cyclic/chain") } | 522 function(r) { assertAsync(r instanceof TypeError, "cyclic/then") } |
627 ) | 523 ) |
628 assertAsyncRan() | 524 assertAsyncRan() |
629 })(); | 525 })(); |
630 | 526 |
631 (function() { | 527 (function() { |
632 var p1 = Promise.accept(0) | 528 var p1 = Promise.resolve(0) |
633 var p2 = p1.then(function(x) { return p2 }, assertUnreachable) | 529 var p2 = p1.then(function(x) { return p2 }, assertUnreachable) |
634 p2.chain( | 530 p2.then( |
635 assertUnreachable, | 531 assertUnreachable, |
636 function(r) { assertAsync(r instanceof TypeError, "cyclic/then") } | 532 function(r) { assertAsync(r instanceof TypeError, "cyclic/then") } |
637 ) | 533 ) |
638 assertAsyncRan() | 534 assertAsyncRan() |
639 })(); | 535 })(); |
640 | 536 |
641 (function() { | 537 (function() { |
642 var deferred = Promise.defer() | 538 var deferred = defer(Promise) |
643 var p = deferred.promise | 539 var p = deferred.promise |
644 deferred.resolve(p) | 540 deferred.resolve(p) |
645 p.chain( | 541 p.then( |
646 assertUnreachable, | 542 assertUnreachable, |
647 function(r) { assertAsync(r instanceof TypeError, "cyclic/deferred/then") } | 543 function(r) { assertAsync(r instanceof TypeError, "cyclic/deferred/then") } |
648 ) | 544 ) |
649 assertAsyncRan() | 545 assertAsyncRan() |
650 })(); | 546 })(); |
651 | 547 |
652 (function() { | 548 (function() { |
653 var deferred = Promise.defer() | 549 var deferred = defer(Promise) |
654 var p = deferred.promise | 550 var p = deferred.promise |
655 deferred.resolve(p) | 551 deferred.resolve(p) |
656 p.then( | 552 p.then( |
657 assertUnreachable, | 553 assertUnreachable, |
658 function(r) { assertAsync(r instanceof TypeError, "cyclic/deferred/then") } | 554 function(r) { assertAsync(r instanceof TypeError, "cyclic/deferred/then") } |
659 ) | 555 ) |
660 assertAsyncRan() | 556 assertAsyncRan() |
661 })(); | 557 })(); |
662 | 558 |
663 (function() { | 559 (function() { |
664 Promise.all([]).chain( | 560 Promise.all([]).then( |
665 function(x) { assertAsync(x.length === 0, "all/resolve/empty") }, | 561 function(x) { assertAsync(x.length === 0, "all/resolve/empty") }, |
666 assertUnreachable | 562 assertUnreachable |
667 ) | 563 ) |
668 assertAsyncRan() | 564 assertAsyncRan() |
669 })(); | 565 })(); |
670 | 566 |
671 (function() { | 567 (function() { |
672 function testPromiseAllNonIterable(value) { | 568 function testPromiseAllNonIterable(value) { |
673 Promise.all(value).chain( | 569 Promise.all(value).then( |
674 assertUnreachable, | 570 assertUnreachable, |
675 function(r) { | 571 function(r) { |
676 assertAsync(r instanceof TypeError, 'all/non iterable'); | 572 assertAsync(r instanceof TypeError, 'all/non iterable'); |
677 }); | 573 }); |
678 assertAsyncRan(); | 574 assertAsyncRan(); |
679 } | 575 } |
680 testPromiseAllNonIterable(null); | 576 testPromiseAllNonIterable(null); |
681 testPromiseAllNonIterable(undefined); | 577 testPromiseAllNonIterable(undefined); |
682 testPromiseAllNonIterable({}); | 578 testPromiseAllNonIterable({}); |
683 testPromiseAllNonIterable(42); | 579 testPromiseAllNonIterable(42); |
684 })(); | 580 })(); |
685 | 581 |
686 (function() { | 582 (function() { |
687 var deferred = Promise.defer(); | 583 var deferred = defer(Promise); |
688 var p = deferred.promise; | 584 var p = deferred.promise; |
689 function* f() { | 585 function* f() { |
690 yield 1; | 586 yield 1; |
691 yield p; | 587 yield p; |
692 yield 3; | 588 yield 3; |
693 } | 589 } |
694 Promise.all(f()).chain( | 590 Promise.all(f()).then( |
695 function(x) { | 591 function(x) { |
696 assertAsync(x.length === 3, "all/resolve/iterable"); | 592 assertAsync(x.length === 3, "all/resolve/iterable"); |
697 assertAsync(x[0] === 1, "all/resolve/iterable/0"); | 593 assertAsync(x[0] === 1, "all/resolve/iterable/0"); |
698 assertAsync(x[1] === 2, "all/resolve/iterable/1"); | 594 assertAsync(x[1] === 2, "all/resolve/iterable/1"); |
699 assertAsync(x[2] === 3, "all/resolve/iterable/2"); | 595 assertAsync(x[2] === 3, "all/resolve/iterable/2"); |
700 }, | 596 }, |
701 assertUnreachable); | 597 assertUnreachable); |
702 deferred.resolve(2); | 598 deferred.resolve(2); |
703 assertAsyncRan(); | 599 assertAsyncRan(); |
704 assertAsyncRan(); | 600 assertAsyncRan(); |
705 assertAsyncRan(); | 601 assertAsyncRan(); |
706 assertAsyncRan(); | 602 assertAsyncRan(); |
707 })(); | 603 })(); |
708 | 604 |
709 | 605 |
710 (function() { | 606 (function() { |
711 var deferred1 = Promise.defer() | 607 var deferred1 = defer(Promise) |
712 var p1 = deferred1.promise | 608 var p1 = deferred1.promise |
713 var deferred2 = Promise.defer() | 609 var deferred2 = defer(Promise) |
714 var p2 = deferred2.promise | 610 var p2 = deferred2.promise |
715 var deferred3 = Promise.defer() | 611 var deferred3 = defer(Promise) |
716 var p3 = deferred3.promise | 612 var p3 = deferred3.promise |
717 Promise.all([p1, p2, p3]).chain( | 613 Promise.all([p1, p2, p3]).then( |
718 function(x) { | 614 function(x) { |
719 assertAsync(x.length === 3, "all/resolve") | 615 assertAsync(x.length === 3, "all/resolve") |
720 assertAsync(x[0] === 1, "all/resolve/0") | 616 assertAsync(x[0] === 1, "all/resolve/0") |
721 assertAsync(x[1] === 2, "all/resolve/1") | 617 assertAsync(x[1] === 2, "all/resolve/1") |
722 assertAsync(x[2] === 3, "all/resolve/2") | 618 assertAsync(x[2] === 3, "all/resolve/2") |
723 }, | 619 }, |
724 assertUnreachable | 620 assertUnreachable |
725 ) | 621 ) |
726 deferred1.resolve(1) | 622 deferred1.resolve(1) |
727 deferred3.resolve(3) | 623 deferred3.resolve(3) |
728 deferred2.resolve(2) | 624 deferred2.resolve(2) |
729 assertAsyncRan() | 625 assertAsyncRan() |
730 assertAsyncRan() | 626 assertAsyncRan() |
731 assertAsyncRan() | 627 assertAsyncRan() |
732 assertAsyncRan() | 628 assertAsyncRan() |
733 })(); | 629 })(); |
734 | 630 |
735 (function() { | 631 (function() { |
736 var deferred = Promise.defer() | 632 var deferred = defer(Promise) |
737 var p1 = deferred.promise | 633 var p1 = deferred.promise |
738 var p2 = Promise.accept(2) | 634 var p2 = Promise.resolve(2) |
739 var p3 = Promise.defer().promise | 635 var p3 = defer(Promise).promise |
740 Promise.all([p1, p2, p3]).chain( | 636 Promise.all([p1, p2, p3]).then( |
741 assertUnreachable, | 637 assertUnreachable, |
742 assertUnreachable | 638 assertUnreachable |
743 ) | 639 ) |
744 deferred.resolve(1) | 640 deferred.resolve(1) |
745 })(); | 641 })(); |
746 | 642 |
747 (function() { | 643 (function() { |
748 var deferred1 = Promise.defer() | 644 var deferred1 = defer(Promise) |
749 var p1 = deferred1.promise | 645 var p1 = deferred1.promise |
750 var deferred2 = Promise.defer() | 646 var deferred2 = defer(Promise) |
751 var p2 = deferred2.promise | 647 var p2 = deferred2.promise |
752 var deferred3 = Promise.defer() | 648 var deferred3 = defer(Promise) |
753 var p3 = deferred3.promise | 649 var p3 = deferred3.promise |
754 Promise.all([p1, p2, p3]).chain( | 650 Promise.all([p1, p2, p3]).then( |
755 assertUnreachable, | 651 assertUnreachable, |
756 function(x) { assertAsync(x === 2, "all/reject") } | 652 function(x) { assertAsync(x === 2, "all/reject") } |
757 ) | 653 ) |
758 deferred1.resolve(1) | 654 deferred1.resolve(1) |
759 deferred3.resolve(3) | 655 deferred3.resolve(3) |
760 deferred2.reject(2) | 656 deferred2.reject(2) |
761 assertAsyncRan() | 657 assertAsyncRan() |
762 })(); | 658 })(); |
763 | 659 |
764 (function() { | 660 (function() { |
(...skipping 14 matching lines...) Expand all Loading... |
779 next() { | 675 next() { |
780 nextCalls++; | 676 nextCalls++; |
781 return {value: i++, done: i > n}; | 677 return {value: i++, done: i > n}; |
782 } | 678 } |
783 }; | 679 }; |
784 }; | 680 }; |
785 }, | 681 }, |
786 configurable: true | 682 configurable: true |
787 }); | 683 }); |
788 | 684 |
789 Promise.all(3).chain( | 685 Promise.all(3).then( |
790 function(x) { | 686 function(x) { |
791 assertAsync(x.length === 3, "all/iterable/number/length"); | 687 assertAsync(x.length === 3, "all/iterable/number/length"); |
792 assertAsync(x[0] === 0, "all/iterable/number/0"); | 688 assertAsync(x[0] === 0, "all/iterable/number/0"); |
793 assertAsync(x[1] === 1, "all/iterable/number/1"); | 689 assertAsync(x[1] === 1, "all/iterable/number/1"); |
794 assertAsync(x[2] === 2, "all/iterable/number/2"); | 690 assertAsync(x[2] === 2, "all/iterable/number/2"); |
795 }, | 691 }, |
796 assertUnreachable); | 692 assertUnreachable); |
797 delete numberPrototype[symbolIterator]; | 693 delete numberPrototype[symbolIterator]; |
798 | 694 |
799 assertEquals(getCalls, 1); | 695 assertEquals(getCalls, 1); |
800 assertEquals(funcCalls, 1); | 696 assertEquals(funcCalls, 1); |
801 assertEquals(nextCalls, 3 + 1); // + 1 for {done: true} | 697 assertEquals(nextCalls, 3 + 1); // + 1 for {done: true} |
802 assertAsyncRan(); | 698 assertAsyncRan(); |
803 assertAsyncRan(); | 699 assertAsyncRan(); |
804 assertAsyncRan(); | 700 assertAsyncRan(); |
805 assertAsyncRan(); | 701 assertAsyncRan(); |
806 })(); | 702 })(); |
807 | 703 |
808 | 704 |
809 (function() { | 705 (function() { |
810 Promise.race([]).chain( | 706 Promise.race([]).then( |
811 assertUnreachable, | 707 assertUnreachable, |
812 assertUnreachable | 708 assertUnreachable |
813 ) | 709 ) |
814 })(); | 710 })(); |
815 | 711 |
816 (function() { | 712 (function() { |
817 var p1 = Promise.accept(1) | 713 var p1 = Promise.resolve(1) |
818 var p2 = Promise.accept(2) | 714 var p2 = Promise.resolve(2) |
819 var p3 = Promise.accept(3) | 715 var p3 = Promise.resolve(3) |
820 Promise.race([p1, p2, p3]).chain( | 716 Promise.race([p1, p2, p3]).then( |
821 function(x) { assertAsync(x === 1, "resolved/one") }, | 717 function(x) { assertAsync(x === 1, "resolved/one") }, |
822 assertUnreachable | 718 assertUnreachable |
823 ) | 719 ) |
824 assertAsyncRan() | 720 assertAsyncRan() |
825 })(); | 721 })(); |
826 | 722 |
827 (function() { | 723 (function() { |
828 var p1 = Promise.accept(1) | 724 var p1 = Promise.resolve(1) |
829 var p2 = Promise.accept(2) | 725 var p2 = Promise.resolve(2) |
830 var p3 = Promise.accept(3) | 726 var p3 = Promise.resolve(3) |
831 Promise.race([0, p1, p2, p3]).chain( | 727 Promise.race([0, p1, p2, p3]).then( |
832 function(x) { assertAsync(x === 0, "resolved-const/one") }, | 728 function(x) { assertAsync(x === 0, "resolved-const/one") }, |
833 assertUnreachable | 729 assertUnreachable |
834 ) | 730 ) |
835 assertAsyncRan() | 731 assertAsyncRan() |
836 })(); | 732 })(); |
837 | 733 |
838 (function() { | 734 (function() { |
839 var deferred1 = Promise.defer() | 735 var deferred1 = defer(Promise) |
840 var p1 = deferred1.promise | 736 var p1 = deferred1.promise |
841 var deferred2 = Promise.defer() | 737 var deferred2 = defer(Promise) |
842 var p2 = deferred2.promise | 738 var p2 = deferred2.promise |
843 var deferred3 = Promise.defer() | 739 var deferred3 = defer(Promise) |
844 var p3 = deferred3.promise | 740 var p3 = deferred3.promise |
845 Promise.race([p1, p2, p3]).chain( | 741 Promise.race([p1, p2, p3]).then( |
846 function(x) { assertAsync(x === 3, "one/resolve") }, | 742 function(x) { assertAsync(x === 3, "one/resolve") }, |
847 assertUnreachable | 743 assertUnreachable |
848 ) | 744 ) |
849 deferred3.resolve(3) | 745 deferred3.resolve(3) |
850 deferred1.resolve(1) | 746 deferred1.resolve(1) |
851 assertAsyncRan() | 747 assertAsyncRan() |
852 })(); | 748 })(); |
853 | 749 |
854 (function() { | 750 (function() { |
855 var deferred = Promise.defer() | 751 var deferred = defer(Promise) |
856 var p1 = deferred.promise | 752 var p1 = deferred.promise |
857 var p2 = Promise.accept(2) | 753 var p2 = Promise.resolve(2) |
858 var p3 = Promise.defer().promise | 754 var p3 = defer(Promise).promise |
859 Promise.race([p1, p2, p3]).chain( | 755 Promise.race([p1, p2, p3]).then( |
860 function(x) { assertAsync(x === 2, "resolved/one") }, | 756 function(x) { assertAsync(x === 2, "resolved/one") }, |
861 assertUnreachable | 757 assertUnreachable |
862 ) | 758 ) |
863 deferred.resolve(1) | 759 deferred.resolve(1) |
864 assertAsyncRan() | 760 assertAsyncRan() |
865 })(); | 761 })(); |
866 | 762 |
867 (function() { | 763 (function() { |
868 var deferred1 = Promise.defer() | 764 var deferred1 = defer(Promise) |
869 var p1 = deferred1.promise | 765 var p1 = deferred1.promise |
870 var deferred2 = Promise.defer() | 766 var deferred2 = defer(Promise) |
871 var p2 = deferred2.promise | 767 var p2 = deferred2.promise |
872 var deferred3 = Promise.defer() | 768 var deferred3 = defer(Promise) |
873 var p3 = deferred3.promise | 769 var p3 = deferred3.promise |
874 Promise.race([p1, p2, p3]).chain( | 770 Promise.race([p1, p2, p3]).then( |
875 function(x) { assertAsync(x === 3, "one/resolve/reject") }, | 771 function(x) { assertAsync(x === 3, "one/resolve/reject") }, |
876 assertUnreachable | 772 assertUnreachable |
877 ) | 773 ) |
878 deferred3.resolve(3) | 774 deferred3.resolve(3) |
879 deferred1.reject(1) | 775 deferred1.reject(1) |
880 assertAsyncRan() | 776 assertAsyncRan() |
881 })(); | 777 })(); |
882 | 778 |
883 (function() { | 779 (function() { |
884 var deferred1 = Promise.defer() | 780 var deferred1 = defer(Promise) |
885 var p1 = deferred1.promise | 781 var p1 = deferred1.promise |
886 var deferred2 = Promise.defer() | 782 var deferred2 = defer(Promise) |
887 var p2 = deferred2.promise | 783 var p2 = deferred2.promise |
888 var deferred3 = Promise.defer() | 784 var deferred3 = defer(Promise) |
889 var p3 = deferred3.promise | 785 var p3 = deferred3.promise |
890 Promise.race([p1, p2, p3]).chain( | 786 Promise.race([p1, p2, p3]).then( |
891 assertUnreachable, | 787 assertUnreachable, |
892 function(x) { assertAsync(x === 3, "one/reject/resolve") } | 788 function(x) { assertAsync(x === 3, "one/reject/resolve") } |
893 ) | 789 ) |
894 deferred3.reject(3) | 790 deferred3.reject(3) |
895 deferred1.resolve(1) | 791 deferred1.resolve(1) |
896 assertAsyncRan() | 792 assertAsyncRan() |
897 })(); | 793 })(); |
898 | 794 |
899 | 795 |
900 (function() { | 796 (function() { |
901 function testPromiseRaceNonIterable(value) { | 797 function testPromiseRaceNonIterable(value) { |
902 Promise.race(value).chain( | 798 Promise.race(value).then( |
903 assertUnreachable, | 799 assertUnreachable, |
904 function(r) { | 800 function(r) { |
905 assertAsync(r instanceof TypeError, 'race/non iterable'); | 801 assertAsync(r instanceof TypeError, 'race/non iterable'); |
906 }); | 802 }); |
907 assertAsyncRan(); | 803 assertAsyncRan(); |
908 } | 804 } |
909 testPromiseRaceNonIterable(null); | 805 testPromiseRaceNonIterable(null); |
910 testPromiseRaceNonIterable(undefined); | 806 testPromiseRaceNonIterable(undefined); |
911 testPromiseRaceNonIterable({}); | 807 testPromiseRaceNonIterable({}); |
912 testPromiseRaceNonIterable(42); | 808 testPromiseRaceNonIterable(42); |
913 })(); | 809 })(); |
914 | 810 |
915 | 811 |
916 (function() { | 812 (function() { |
917 var deferred1 = Promise.defer() | 813 var deferred1 = defer(Promise) |
918 var p1 = deferred1.promise | 814 var p1 = deferred1.promise |
919 var deferred2 = Promise.defer() | 815 var deferred2 = defer(Promise) |
920 var p2 = deferred2.promise | 816 var p2 = deferred2.promise |
921 var deferred3 = Promise.defer() | 817 var deferred3 = defer(Promise) |
922 var p3 = deferred3.promise | 818 var p3 = deferred3.promise |
923 function* f() { | 819 function* f() { |
924 yield p1; | 820 yield p1; |
925 yield p2; | 821 yield p2; |
926 yield p3; | 822 yield p3; |
927 } | 823 } |
928 Promise.race(f()).chain( | 824 Promise.race(f()).then( |
929 function(x) { assertAsync(x === 3, "race/iterable/resolve/reject") }, | 825 function(x) { assertAsync(x === 3, "race/iterable/resolve/reject") }, |
930 assertUnreachable | 826 assertUnreachable |
931 ) | 827 ) |
932 deferred3.resolve(3) | 828 deferred3.resolve(3) |
933 deferred1.reject(1) | 829 deferred1.reject(1) |
934 assertAsyncRan() | 830 assertAsyncRan() |
935 })(); | 831 })(); |
936 | 832 |
937 (function() { | 833 (function() { |
938 var deferred1 = Promise.defer() | 834 var deferred1 = defer(Promise) |
939 var p1 = deferred1.promise | 835 var p1 = deferred1.promise |
940 var deferred2 = Promise.defer() | 836 var deferred2 = defer(Promise) |
941 var p2 = deferred2.promise | 837 var p2 = deferred2.promise |
942 var deferred3 = Promise.defer() | 838 var deferred3 = defer(Promise) |
943 var p3 = deferred3.promise | 839 var p3 = deferred3.promise |
944 function* f() { | 840 function* f() { |
945 yield p1; | 841 yield p1; |
946 yield p2; | 842 yield p2; |
947 yield p3; | 843 yield p3; |
948 } | 844 } |
949 Promise.race(f()).chain( | 845 Promise.race(f()).then( |
950 assertUnreachable, | 846 assertUnreachable, |
951 function(x) { assertAsync(x === 3, "race/iterable/reject/resolve") } | 847 function(x) { assertAsync(x === 3, "race/iterable/reject/resolve") } |
952 ) | 848 ) |
953 deferred3.reject(3) | 849 deferred3.reject(3) |
954 deferred1.resolve(1) | 850 deferred1.resolve(1) |
955 assertAsyncRan() | 851 assertAsyncRan() |
956 })(); | 852 })(); |
957 | 853 |
958 (function() { | 854 (function() { |
959 'use strict'; | 855 'use strict'; |
(...skipping 13 matching lines...) Expand all Loading... |
973 next() { | 869 next() { |
974 nextCalls++; | 870 nextCalls++; |
975 return {value: i++, done: i > n}; | 871 return {value: i++, done: i > n}; |
976 } | 872 } |
977 }; | 873 }; |
978 }; | 874 }; |
979 }, | 875 }, |
980 configurable: true | 876 configurable: true |
981 }); | 877 }); |
982 | 878 |
983 Promise.race(3).chain( | 879 Promise.race(3).then( |
984 function(x) { | 880 function(x) { |
985 assertAsync(x === 0, "race/iterable/number"); | 881 assertAsync(x === 0, "race/iterable/number"); |
986 }, | 882 }, |
987 assertUnreachable); | 883 assertUnreachable); |
988 delete numberPrototype[symbolIterator]; | 884 delete numberPrototype[symbolIterator]; |
989 | 885 |
990 assertEquals(getCalls, 1); | 886 assertEquals(getCalls, 1); |
991 assertEquals(funcCalls, 1); | 887 assertEquals(funcCalls, 1); |
992 assertEquals(nextCalls, 3 + 1); // + 1 for {done: true} | 888 assertEquals(nextCalls, 3 + 1); // + 1 for {done: true} |
993 assertAsyncRan(); | 889 assertAsyncRan(); |
(...skipping 13 matching lines...) Expand all Loading... |
1007 return promise | 903 return promise |
1008 } | 904 } |
1009 | 905 |
1010 MyPromise.__proto__ = Promise | 906 MyPromise.__proto__ = Promise |
1011 MyPromise.defer = function() { | 907 MyPromise.defer = function() { |
1012 log += "d" | 908 log += "d" |
1013 return call(this.__proto__.defer, this) | 909 return call(this.__proto__.defer, this) |
1014 } | 910 } |
1015 | 911 |
1016 MyPromise.prototype.__proto__ = Promise.prototype | 912 MyPromise.prototype.__proto__ = Promise.prototype |
1017 MyPromise.prototype.chain = function(resolve, reject) { | 913 MyPromise.prototype.then = function(resolve, reject) { |
1018 log += "c" | 914 log += "c" |
1019 return call(this.__proto__.__proto__.chain, this, resolve, reject) | 915 return call(this.__proto__.__proto__.then, this, resolve, reject) |
1020 } | 916 } |
1021 | 917 |
1022 log = "" | 918 log = "" |
1023 var p1 = new MyPromise(function(resolve, reject) { resolve(1) }) | 919 var p1 = new MyPromise(function(resolve, reject) { resolve(1) }) |
1024 var p2 = new MyPromise(function(resolve, reject) { reject(2) }) | 920 var p2 = new MyPromise(function(resolve, reject) { reject(2) }) |
1025 var d3 = MyPromise.defer() | 921 var d3 = defer(MyPromise) |
1026 assertTrue(d3.promise instanceof Promise, "subclass/instance") | 922 assertTrue(d3.promise instanceof Promise, "subclass/instance") |
1027 assertTrue(d3.promise instanceof MyPromise, "subclass/instance-my3") | 923 assertTrue(d3.promise instanceof MyPromise, "subclass/instance-my3") |
1028 assertTrue(log === "nx1nr2dn", "subclass/create") | 924 assertTrue(log === "nx1nr2n", "subclass/create") |
1029 | 925 |
1030 log = "" | 926 log = "" |
1031 var p4 = MyPromise.resolve(4) | 927 var p4 = MyPromise.resolve(4) |
1032 var p5 = MyPromise.reject(5) | 928 var p5 = MyPromise.reject(5) |
1033 assertTrue(p4 instanceof MyPromise, "subclass/instance4") | 929 assertTrue(p4 instanceof MyPromise, "subclass/instance4") |
1034 assertTrue(p4 instanceof MyPromise, "subclass/instance-my4") | 930 assertTrue(p4 instanceof MyPromise, "subclass/instance-my4") |
1035 assertTrue(p5 instanceof MyPromise, "subclass/instance5") | 931 assertTrue(p5 instanceof MyPromise, "subclass/instance5") |
1036 assertTrue(p5 instanceof MyPromise, "subclass/instance-my5") | 932 assertTrue(p5 instanceof MyPromise, "subclass/instance-my5") |
1037 d3.resolve(3) | 933 d3.resolve(3) |
1038 assertTrue(log === "nx4nr5x3", "subclass/resolve") | 934 assertTrue(log === "nx4nr5x3", "subclass/resolve") |
1039 | 935 |
1040 log = "" | 936 log = "" |
1041 var d6 = MyPromise.defer() | 937 var d6 = defer(MyPromise) |
1042 d6.promise.chain(function(x) { | 938 d6.promise.then(function(x) { |
1043 return new Promise(function(resolve) { resolve(x) }) | 939 return new Promise(function(resolve) { resolve(x) }) |
1044 }).chain(function() {}) | 940 }).then(function() {}) |
1045 d6.resolve(6) | 941 d6.resolve(6) |
1046 assertTrue(log === "dncncnx6", "subclass/chain") | 942 assertTrue(log === "ncncnx6", "subclass/then") |
1047 | 943 |
1048 log = "" | 944 log = "" |
1049 Promise.all([11, Promise.accept(12), 13, MyPromise.accept(14), 15, 16]) | 945 Promise.all([11, Promise.resolve(12), 13, MyPromise.resolve(14), 15, 16]) |
1050 | 946 |
1051 assertTrue(log === "nx14", "subclass/all/arg") | 947 assertTrue(log === "nx14", "subclass/all/arg") |
1052 | 948 |
1053 log = "" | 949 log = "" |
1054 MyPromise.all([21, Promise.accept(22), 23, MyPromise.accept(24), 25, 26]) | 950 MyPromise.all([21, Promise.resolve(22), 23, MyPromise.resolve(24), 25, 26]) |
1055 assertTrue(log === "nx24nnx21nnx[object Promise]nnx23nnnx25nnx26n", | 951 assertTrue(log === "nx24nnx21cnnx[object Promise]cnnx23cncnnx25cnnx26cn", |
1056 "subclass/all/self") | 952 "subclass/all/self") |
1057 })(); | 953 })(); |
1058 | 954 |
1059 (function() { | 955 (function() { |
1060 'use strict'; | 956 'use strict'; |
1061 | 957 |
1062 class Pact extends Promise { } | 958 class Pact extends Promise { } |
1063 class Vow extends Pact { } | 959 class Vow extends Pact { } |
1064 class Oath extends Vow { } | 960 class Oath extends Vow { } |
1065 | 961 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1108 var p = Promise.resolve(); | 1004 var p = Promise.resolve(); |
1109 var callCount = 0; | 1005 var callCount = 0; |
1110 defineProperty(p, "constructor", { | 1006 defineProperty(p, "constructor", { |
1111 get: function() { ++callCount; return Promise; } | 1007 get: function() { ++callCount; return Promise; } |
1112 }); | 1008 }); |
1113 p.then(); | 1009 p.then(); |
1114 assertEquals(1, callCount); | 1010 assertEquals(1, callCount); |
1115 })(); | 1011 })(); |
1116 | 1012 |
1117 assertAsyncDone() | 1013 assertAsyncDone() |
OLD | NEW |