Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(568)

Side by Side Diff: test/mjsunit/es6/promises.js

Issue 2267033002: Remove --promise-extra flag (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix syntax for skip Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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()
OLDNEW
« no previous file with comments | « test/mjsunit/es6/promise-internal-setter.js ('k') | test/mjsunit/es6/regress/regress-cr372788.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698