| 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 |