| 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: --harmony-promises --harmony-observation --allow-natives-syntax | 28 // Flags: --harmony-promises --allow-natives-syntax |
| 29 | 29 |
| 30 var asyncAssertsExpected = 0; | 30 var asyncAssertsExpected = 0; |
| 31 | 31 |
| 32 function assertAsyncRan() { ++asyncAssertsExpected } | 32 function assertAsyncRan() { ++asyncAssertsExpected } |
| 33 | 33 |
| 34 function assertAsync(b, s) { | 34 function assertAsync(b, s) { |
| 35 if (b) { | 35 if (b) { |
| 36 print(s, "succeeded") | 36 print(s, "succeeded") |
| 37 } else { | 37 } else { |
| 38 %AbortJS(s + " FAILED!") // Simply throwing here will have no effect. | 38 %AbortJS(s + " FAILED!") // Simply throwing here will have no effect. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 | 75 |
| 76 (function() { | 76 (function() { |
| 77 (new Promise(function() { throw 5 })).chain( | 77 (new Promise(function() { throw 5 })).chain( |
| 78 assertUnreachable, | 78 assertUnreachable, |
| 79 function(r) { assertAsync(r === 5, "new-throw") } | 79 function(r) { assertAsync(r === 5, "new-throw") } |
| 80 ) | 80 ) |
| 81 assertAsyncRan() | 81 assertAsyncRan() |
| 82 })(); | 82 })(); |
| 83 | 83 |
| 84 (function() { | 84 (function() { |
| 85 Promise.resolve(5); | 85 Promise.accept(5); |
| 86 Promise.resolve(5).chain(undefined, assertUnreachable).chain( | 86 Promise.accept(5).chain(undefined, assertUnreachable).chain( |
| 87 function(x) { assertAsync(x === 5, "resolved/chain-nohandler") }, | 87 function(x) { assertAsync(x === 5, "resolved/chain-nohandler") }, |
| 88 assertUnreachable | 88 assertUnreachable |
| 89 ) | 89 ) |
| 90 assertAsyncRan() | 90 assertAsyncRan() |
| 91 })(); | 91 })(); |
| 92 | 92 |
| 93 (function() { | 93 (function() { |
| 94 Promise.reject(5).chain(assertUnreachable, undefined).chain( | 94 Promise.reject(5).chain(assertUnreachable, undefined).chain( |
| 95 assertUnreachable, | 95 assertUnreachable, |
| 96 function(r) { assertAsync(r === 5, "rejected/chain-nohandler") } | 96 function(r) { assertAsync(r === 5, "rejected/chain-nohandler") } |
| 97 ) | 97 ) |
| 98 assertAsyncRan() | 98 assertAsyncRan() |
| 99 })(); | 99 })(); |
| 100 | 100 |
| 101 (function() { | 101 (function() { |
| 102 Promise.resolve(5).then(undefined, assertUnreachable).chain( | 102 Promise.accept(5).then(undefined, assertUnreachable).chain( |
| 103 function(x) { assertAsync(x === 5, "resolved/then-nohandler-undefined") }, | 103 function(x) { assertAsync(x === 5, "resolved/then-nohandler-undefined") }, |
| 104 assertUnreachable | 104 assertUnreachable |
| 105 ) | 105 ) |
| 106 assertAsyncRan() | 106 assertAsyncRan() |
| 107 Promise.resolve(6).then(null, assertUnreachable).chain( | 107 Promise.accept(6).then(null, assertUnreachable).chain( |
| 108 function(x) { assertAsync(x === 6, "resolved/then-nohandler-null") }, | 108 function(x) { assertAsync(x === 6, "resolved/then-nohandler-null") }, |
| 109 assertUnreachable | 109 assertUnreachable |
| 110 ) | 110 ) |
| 111 assertAsyncRan() | 111 assertAsyncRan() |
| 112 })(); | 112 })(); |
| 113 | 113 |
| 114 (function() { | 114 (function() { |
| 115 Promise.reject(5).then(assertUnreachable, undefined).chain( | 115 Promise.reject(5).then(assertUnreachable, undefined).chain( |
| 116 assertUnreachable, | 116 assertUnreachable, |
| 117 function(r) { assertAsync(r === 5, "rejected/then-nohandler-undefined") } | 117 function(r) { assertAsync(r === 5, "rejected/then-nohandler-undefined") } |
| 118 ) | 118 ) |
| 119 assertAsyncRan() | 119 assertAsyncRan() |
| 120 Promise.reject(6).then(assertUnreachable, null).chain( | 120 Promise.reject(6).then(assertUnreachable, null).chain( |
| 121 assertUnreachable, | 121 assertUnreachable, |
| 122 function(r) { assertAsync(r === 6, "rejected/then-nohandler-null") } | 122 function(r) { assertAsync(r === 6, "rejected/then-nohandler-null") } |
| 123 ) | 123 ) |
| 124 assertAsyncRan() | 124 assertAsyncRan() |
| 125 })(); | 125 })(); |
| 126 | 126 |
| 127 (function() { | 127 (function() { |
| 128 var p1 = Promise.resolve(5) | 128 var p1 = Promise.accept(5) |
| 129 var p2 = Promise.resolve(p1) | 129 var p2 = Promise.accept(p1) |
| 130 var p3 = Promise.resolve(p2) | 130 var p3 = Promise.accept(p2) |
| 131 p3.chain( | 131 p3.chain( |
| 132 function(x) { assertAsync(x === p2, "resolved/chain") }, | 132 function(x) { assertAsync(x === p2, "resolved/chain") }, |
| 133 assertUnreachable | 133 assertUnreachable |
| 134 ) | 134 ) |
| 135 assertAsyncRan() | 135 assertAsyncRan() |
| 136 })(); | 136 })(); |
| 137 | 137 |
| 138 (function() { | 138 (function() { |
| 139 var p1 = Promise.resolve(5) | 139 var p1 = Promise.accept(5) |
| 140 var p2 = Promise.resolve(p1) | 140 var p2 = Promise.accept(p1) |
| 141 var p3 = Promise.resolve(p2) | 141 var p3 = Promise.accept(p2) |
| 142 p3.then( | 142 p3.then( |
| 143 function(x) { assertAsync(x === 5, "resolved/then") }, | 143 function(x) { assertAsync(x === 5, "resolved/then") }, |
| 144 assertUnreachable | 144 assertUnreachable |
| 145 ) | 145 ) |
| 146 assertAsyncRan() | 146 assertAsyncRan() |
| 147 })(); | 147 })(); |
| 148 | 148 |
| 149 (function() { | 149 (function() { |
| 150 var p1 = Promise.reject(5) | 150 var p1 = Promise.reject(5) |
| 151 var p2 = Promise.resolve(p1) | 151 var p2 = Promise.accept(p1) |
| 152 var p3 = Promise.resolve(p2) | 152 var p3 = Promise.accept(p2) |
| 153 p3.chain( | 153 p3.chain( |
| 154 function(x) { assertAsync(x === p2, "rejected/chain") }, | 154 function(x) { assertAsync(x === p2, "rejected/chain") }, |
| 155 assertUnreachable | 155 assertUnreachable |
| 156 ) | 156 ) |
| 157 assertAsyncRan() | 157 assertAsyncRan() |
| 158 })(); | 158 })(); |
| 159 | 159 |
| 160 (function() { | 160 (function() { |
| 161 var p1 = Promise.reject(5) | 161 var p1 = Promise.reject(5) |
| 162 var p2 = Promise.resolve(p1) | 162 var p2 = Promise.accept(p1) |
| 163 var p3 = Promise.resolve(p2) | 163 var p3 = Promise.accept(p2) |
| 164 p3.then( | 164 p3.then( |
| 165 assertUnreachable, | 165 assertUnreachable, |
| 166 function(x) { assertAsync(x === 5, "rejected/then") } | 166 function(x) { assertAsync(x === 5, "rejected/then") } |
| 167 ) | 167 ) |
| 168 assertAsyncRan() | 168 assertAsyncRan() |
| 169 })(); | 169 })(); |
| 170 | 170 |
| 171 (function() { | 171 (function() { |
| 172 var p1 = Promise.resolve(5) | 172 var p1 = Promise.accept(5) |
| 173 var p2 = Promise.resolve(p1) | 173 var p2 = Promise.accept(p1) |
| 174 var p3 = Promise.resolve(p2) | 174 var p3 = Promise.accept(p2) |
| 175 p3.chain(function(x) { return x }, assertUnreachable).chain( | 175 p3.chain(function(x) { return x }, assertUnreachable).chain( |
| 176 function(x) { assertAsync(x === p1, "resolved/chain/chain") }, | 176 function(x) { assertAsync(x === p1, "resolved/chain/chain") }, |
| 177 assertUnreachable | 177 assertUnreachable |
| 178 ) | 178 ) |
| 179 assertAsyncRan() | 179 assertAsyncRan() |
| 180 })(); | 180 })(); |
| 181 | 181 |
| 182 (function() { | 182 (function() { |
| 183 var p1 = Promise.resolve(5) | 183 var p1 = Promise.accept(5) |
| 184 var p2 = Promise.resolve(p1) | 184 var p2 = Promise.accept(p1) |
| 185 var p3 = Promise.resolve(p2) | 185 var p3 = Promise.accept(p2) |
| 186 p3.chain(function(x) { return x }, assertUnreachable).then( | 186 p3.chain(function(x) { return x }, assertUnreachable).then( |
| 187 function(x) { assertAsync(x === 5, "resolved/chain/then") }, | 187 function(x) { assertAsync(x === 5, "resolved/chain/then") }, |
| 188 assertUnreachable | 188 assertUnreachable |
| 189 ) | 189 ) |
| 190 assertAsyncRan() | 190 assertAsyncRan() |
| 191 })(); | 191 })(); |
| 192 | 192 |
| 193 (function() { | 193 (function() { |
| 194 var p1 = Promise.resolve(5) | 194 var p1 = Promise.accept(5) |
| 195 var p2 = Promise.resolve(p1) | 195 var p2 = Promise.accept(p1) |
| 196 var p3 = Promise.resolve(p2) | 196 var p3 = Promise.accept(p2) |
| 197 p3.chain(function(x) { return 6 }, assertUnreachable).chain( | 197 p3.chain(function(x) { return 6 }, assertUnreachable).chain( |
| 198 function(x) { assertAsync(x === 6, "resolved/chain/chain2") }, | 198 function(x) { assertAsync(x === 6, "resolved/chain/chain2") }, |
| 199 assertUnreachable | 199 assertUnreachable |
| 200 ) | 200 ) |
| 201 assertAsyncRan() | 201 assertAsyncRan() |
| 202 })(); | 202 })(); |
| 203 | 203 |
| 204 (function() { | 204 (function() { |
| 205 var p1 = Promise.resolve(5) | 205 var p1 = Promise.accept(5) |
| 206 var p2 = Promise.resolve(p1) | 206 var p2 = Promise.accept(p1) |
| 207 var p3 = Promise.resolve(p2) | 207 var p3 = Promise.accept(p2) |
| 208 p3.chain(function(x) { return 6 }, assertUnreachable).then( | 208 p3.chain(function(x) { return 6 }, assertUnreachable).then( |
| 209 function(x) { assertAsync(x === 6, "resolved/chain/then2") }, | 209 function(x) { assertAsync(x === 6, "resolved/chain/then2") }, |
| 210 assertUnreachable | 210 assertUnreachable |
| 211 ) | 211 ) |
| 212 assertAsyncRan() | 212 assertAsyncRan() |
| 213 })(); | 213 })(); |
| 214 | 214 |
| 215 (function() { | 215 (function() { |
| 216 var p1 = Promise.resolve(5) | 216 var p1 = Promise.accept(5) |
| 217 var p2 = Promise.resolve(p1) | 217 var p2 = Promise.accept(p1) |
| 218 var p3 = Promise.resolve(p2) | 218 var p3 = Promise.accept(p2) |
| 219 p3.then(function(x) { return x + 1 }, assertUnreachable).chain( | 219 p3.then(function(x) { return x + 1 }, assertUnreachable).chain( |
| 220 function(x) { assertAsync(x === 6, "resolved/then/chain") }, | 220 function(x) { assertAsync(x === 6, "resolved/then/chain") }, |
| 221 assertUnreachable | 221 assertUnreachable |
| 222 ) | 222 ) |
| 223 assertAsyncRan() | 223 assertAsyncRan() |
| 224 })(); | 224 })(); |
| 225 | 225 |
| 226 (function() { | 226 (function() { |
| 227 var p1 = Promise.resolve(5) | 227 var p1 = Promise.accept(5) |
| 228 var p2 = Promise.resolve(p1) | 228 var p2 = Promise.accept(p1) |
| 229 var p3 = Promise.resolve(p2) | 229 var p3 = Promise.accept(p2) |
| 230 p3.then(function(x) { return x + 1 }, assertUnreachable).then( | 230 p3.then(function(x) { return x + 1 }, assertUnreachable).then( |
| 231 function(x) { assertAsync(x === 6, "resolved/then/then") }, | 231 function(x) { assertAsync(x === 6, "resolved/then/then") }, |
| 232 assertUnreachable | 232 assertUnreachable |
| 233 ) | 233 ) |
| 234 assertAsyncRan() | 234 assertAsyncRan() |
| 235 })(); | 235 })(); |
| 236 | 236 |
| 237 (function() { | 237 (function() { |
| 238 var p1 = Promise.resolve(5) | 238 var p1 = Promise.accept(5) |
| 239 var p2 = Promise.resolve(p1) | 239 var p2 = Promise.accept(p1) |
| 240 var p3 = Promise.resolve(p2) | 240 var p3 = Promise.accept(p2) |
| 241 p3.then(function(x){ return Promise.resolve(x+1) }, assertUnreachable).chain( | 241 p3.then(function(x){ return Promise.accept(x+1) }, assertUnreachable).chain( |
| 242 function(x) { assertAsync(x === 6, "resolved/then/chain2") }, | 242 function(x) { assertAsync(x === 6, "resolved/then/chain2") }, |
| 243 assertUnreachable | 243 assertUnreachable |
| 244 ) | 244 ) |
| 245 assertAsyncRan() | 245 assertAsyncRan() |
| 246 })(); | 246 })(); |
| 247 | 247 |
| 248 (function() { | 248 (function() { |
| 249 var p1 = Promise.resolve(5) | 249 var p1 = Promise.accept(5) |
| 250 var p2 = Promise.resolve(p1) | 250 var p2 = Promise.accept(p1) |
| 251 var p3 = Promise.resolve(p2) | 251 var p3 = Promise.accept(p2) |
| 252 p3.then(function(x) { return Promise.resolve(x+1) }, assertUnreachable).then( | 252 p3.then(function(x) { return Promise.accept(x+1) }, assertUnreachable).then( |
| 253 function(x) { assertAsync(x === 6, "resolved/then/then2") }, | 253 function(x) { assertAsync(x === 6, "resolved/then/then2") }, |
| 254 assertUnreachable | 254 assertUnreachable |
| 255 ) | 255 ) |
| 256 assertAsyncRan() | 256 assertAsyncRan() |
| 257 })(); | 257 })(); |
| 258 | 258 |
| 259 (function() { | 259 (function() { |
| 260 var p1 = Promise.resolve(5) | 260 var p1 = Promise.accept(5) |
| 261 var p2 = Promise.resolve(p1) | 261 var p2 = Promise.accept(p1) |
| 262 var p3 = Promise.resolve(p2) | 262 var p3 = Promise.accept(p2) |
| 263 p3.chain(function(x) { throw 6 }, assertUnreachable).chain( | 263 p3.chain(function(x) { throw 6 }, assertUnreachable).chain( |
| 264 assertUnreachable, | 264 assertUnreachable, |
| 265 function(x) { assertAsync(x === 6, "resolved/chain-throw/chain") } | 265 function(x) { assertAsync(x === 6, "resolved/chain-throw/chain") } |
| 266 ) | 266 ) |
| 267 assertAsyncRan() | 267 assertAsyncRan() |
| 268 })(); | 268 })(); |
| 269 | 269 |
| 270 (function() { | 270 (function() { |
| 271 var p1 = Promise.resolve(5) | 271 var p1 = Promise.accept(5) |
| 272 var p2 = Promise.resolve(p1) | 272 var p2 = Promise.accept(p1) |
| 273 var p3 = Promise.resolve(p2) | 273 var p3 = Promise.accept(p2) |
| 274 p3.chain(function(x) { throw 6 }, assertUnreachable).then( | 274 p3.chain(function(x) { throw 6 }, assertUnreachable).then( |
| 275 assertUnreachable, | 275 assertUnreachable, |
| 276 function(x) { assertAsync(x === 6, "resolved/chain-throw/then") } | 276 function(x) { assertAsync(x === 6, "resolved/chain-throw/then") } |
| 277 ) | 277 ) |
| 278 assertAsyncRan() | 278 assertAsyncRan() |
| 279 })(); | 279 })(); |
| 280 | 280 |
| 281 (function() { | 281 (function() { |
| 282 var p1 = Promise.resolve(5) | 282 var p1 = Promise.accept(5) |
| 283 var p2 = Promise.resolve(p1) | 283 var p2 = Promise.accept(p1) |
| 284 var p3 = Promise.resolve(p2) | 284 var p3 = Promise.accept(p2) |
| 285 p3.then(function(x) { throw 6 }, assertUnreachable).chain( | 285 p3.then(function(x) { throw 6 }, assertUnreachable).chain( |
| 286 assertUnreachable, | 286 assertUnreachable, |
| 287 function(x) { assertAsync(x === 6, "resolved/then-throw/chain") } | 287 function(x) { assertAsync(x === 6, "resolved/then-throw/chain") } |
| 288 ) | 288 ) |
| 289 assertAsyncRan() | 289 assertAsyncRan() |
| 290 })(); | 290 })(); |
| 291 | 291 |
| 292 (function() { | 292 (function() { |
| 293 var p1 = Promise.resolve(5) | 293 var p1 = Promise.accept(5) |
| 294 var p2 = Promise.resolve(p1) | 294 var p2 = Promise.accept(p1) |
| 295 var p3 = Promise.resolve(p2) | 295 var p3 = Promise.accept(p2) |
| 296 p3.then(function(x) { throw 6 }, assertUnreachable).then( | 296 p3.then(function(x) { throw 6 }, assertUnreachable).then( |
| 297 assertUnreachable, | 297 assertUnreachable, |
| 298 function(x) { assertAsync(x === 6, "resolved/then-throw/then") } | 298 function(x) { assertAsync(x === 6, "resolved/then-throw/then") } |
| 299 ) | 299 ) |
| 300 assertAsyncRan() | 300 assertAsyncRan() |
| 301 })(); | 301 })(); |
| 302 | 302 |
| 303 (function() { | 303 (function() { |
| 304 var p1 = Promise.resolve(5) | 304 var p1 = Promise.accept(5) |
| 305 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 305 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 306 var p3 = Promise.resolve(p2) | 306 var p3 = Promise.accept(p2) |
| 307 p3.chain( | 307 p3.chain( |
| 308 function(x) { assertAsync(x === p2, "resolved/thenable/chain") }, | 308 function(x) { assertAsync(x === p2, "resolved/thenable/chain") }, |
| 309 assertUnreachable | 309 assertUnreachable |
| 310 ) | 310 ) |
| 311 assertAsyncRan() | 311 assertAsyncRan() |
| 312 })(); | 312 })(); |
| 313 | 313 |
| 314 (function() { | 314 (function() { |
| 315 var p1 = Promise.resolve(5) | 315 var p1 = Promise.accept(5) |
| 316 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 316 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 317 var p3 = Promise.resolve(p2) | 317 var p3 = Promise.accept(p2) |
| 318 p3.then( | 318 p3.then( |
| 319 function(x) { assertAsync(x === 5, "resolved/thenable/then") }, | 319 function(x) { assertAsync(x === 5, "resolved/thenable/then") }, |
| 320 assertUnreachable | 320 assertUnreachable |
| 321 ) | 321 ) |
| 322 assertAsyncRan() | 322 assertAsyncRan() |
| 323 })(); | 323 })(); |
| 324 | 324 |
| 325 (function() { | 325 (function() { |
| 326 var p1 = Promise.reject(5) | 326 var p1 = Promise.reject(5) |
| 327 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 327 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 328 var p3 = Promise.resolve(p2) | 328 var p3 = Promise.accept(p2) |
| 329 p3.chain( | 329 p3.chain( |
| 330 function(x) { assertAsync(x === p2, "rejected/thenable/chain") }, | 330 function(x) { assertAsync(x === p2, "rejected/thenable/chain") }, |
| 331 assertUnreachable | 331 assertUnreachable |
| 332 ) | 332 ) |
| 333 assertAsyncRan() | 333 assertAsyncRan() |
| 334 })(); | 334 })(); |
| 335 | 335 |
| 336 (function() { | 336 (function() { |
| 337 var p1 = Promise.reject(5) | 337 var p1 = Promise.reject(5) |
| 338 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 338 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 339 var p3 = Promise.resolve(p2) | 339 var p3 = Promise.accept(p2) |
| 340 p3.then( | 340 p3.then( |
| 341 assertUnreachable, | 341 assertUnreachable, |
| 342 function(x) { assertAsync(x === 5, "rejected/thenable/then") } | 342 function(x) { assertAsync(x === 5, "rejected/thenable/then") } |
| 343 ) | 343 ) |
| 344 assertAsyncRan() | 344 assertAsyncRan() |
| 345 })(); | 345 })(); |
| 346 | 346 |
| 347 (function() { | 347 (function() { |
| 348 var deferred = Promise.defer() | 348 var deferred = Promise.defer() |
| 349 var p1 = deferred.promise | 349 var p1 = deferred.promise |
| 350 var p2 = Promise.resolve(p1) | 350 var p2 = Promise.accept(p1) |
| 351 var p3 = Promise.resolve(p2) | 351 var p3 = Promise.accept(p2) |
| 352 p3.chain( | 352 p3.chain( |
| 353 function(x) { assertAsync(x === p2, "chain/resolve") }, | 353 function(x) { assertAsync(x === p2, "chain/resolve") }, |
| 354 assertUnreachable | 354 assertUnreachable |
| 355 ) | 355 ) |
| 356 deferred.resolve(5) | 356 deferred.resolve(5) |
| 357 assertAsyncRan() | 357 assertAsyncRan() |
| 358 })(); | 358 })(); |
| 359 | 359 |
| 360 (function() { | 360 (function() { |
| 361 var deferred = Promise.defer() | 361 var deferred = Promise.defer() |
| 362 var p1 = deferred.promise | 362 var p1 = deferred.promise |
| 363 var p2 = Promise.resolve(p1) | 363 var p2 = Promise.accept(p1) |
| 364 var p3 = Promise.resolve(p2) | 364 var p3 = Promise.accept(p2) |
| 365 p3.then( | 365 p3.then( |
| 366 function(x) { assertAsync(x === 5, "then/resolve") }, | 366 function(x) { assertAsync(x === 5, "then/resolve") }, |
| 367 assertUnreachable | 367 assertUnreachable |
| 368 ) | 368 ) |
| 369 deferred.resolve(5) | 369 deferred.resolve(5) |
| 370 assertAsyncRan() | 370 assertAsyncRan() |
| 371 })(); | 371 })(); |
| 372 | 372 |
| 373 (function() { | 373 (function() { |
| 374 var deferred = Promise.defer() | 374 var deferred = Promise.defer() |
| 375 var p1 = deferred.promise | 375 var p1 = deferred.promise |
| 376 var p2 = Promise.resolve(p1) | 376 var p2 = Promise.accept(p1) |
| 377 var p3 = Promise.resolve(p2) | 377 var p3 = Promise.accept(p2) |
| 378 p3.chain( | 378 p3.chain( |
| 379 function(x) { assertAsync(x === p2, "chain/reject") }, | 379 function(x) { assertAsync(x === p2, "chain/reject") }, |
| 380 assertUnreachable | 380 assertUnreachable |
| 381 ) | 381 ) |
| 382 deferred.reject(5) | 382 deferred.reject(5) |
| 383 assertAsyncRan() | 383 assertAsyncRan() |
| 384 })(); | 384 })(); |
| 385 | 385 |
| 386 (function() { | 386 (function() { |
| 387 var deferred = Promise.defer() | 387 var deferred = Promise.defer() |
| 388 var p1 = deferred.promise | 388 var p1 = deferred.promise |
| 389 var p2 = Promise.resolve(p1) | 389 var p2 = Promise.accept(p1) |
| 390 var p3 = Promise.resolve(p2) | 390 var p3 = Promise.accept(p2) |
| 391 p3.then( | 391 p3.then( |
| 392 assertUnreachable, | 392 assertUnreachable, |
| 393 function(x) { assertAsync(x === 5, "then/reject") } | 393 function(x) { assertAsync(x === 5, "then/reject") } |
| 394 ) | 394 ) |
| 395 deferred.reject(5) | 395 deferred.reject(5) |
| 396 assertAsyncRan() | 396 assertAsyncRan() |
| 397 })(); | 397 })(); |
| 398 | 398 |
| 399 (function() { | 399 (function() { |
| 400 var deferred = Promise.defer() | 400 var deferred = Promise.defer() |
| 401 var p1 = deferred.promise | 401 var p1 = deferred.promise |
| 402 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 402 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 403 var p3 = Promise.resolve(p2) | 403 var p3 = Promise.accept(p2) |
| 404 p3.chain( | 404 p3.chain( |
| 405 function(x) { assertAsync(x === p2, "chain/resolve/thenable") }, | 405 function(x) { assertAsync(x === p2, "chain/resolve/thenable") }, |
| 406 assertUnreachable | 406 assertUnreachable |
| 407 ) | 407 ) |
| 408 deferred.resolve(5) | 408 deferred.resolve(5) |
| 409 assertAsyncRan() | 409 assertAsyncRan() |
| 410 })(); | 410 })(); |
| 411 | 411 |
| 412 (function() { | 412 (function() { |
| 413 var deferred = Promise.defer() | 413 var deferred = Promise.defer() |
| 414 var p1 = deferred.promise | 414 var p1 = deferred.promise |
| 415 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 415 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 416 var p3 = Promise.resolve(p2) | 416 var p3 = Promise.accept(p2) |
| 417 p3.then( | 417 p3.then( |
| 418 function(x) { assertAsync(x === 5, "then/resolve/thenable") }, | 418 function(x) { assertAsync(x === 5, "then/resolve/thenable") }, |
| 419 assertUnreachable | 419 assertUnreachable |
| 420 ) | 420 ) |
| 421 deferred.resolve(5) | 421 deferred.resolve(5) |
| 422 assertAsyncRan() | 422 assertAsyncRan() |
| 423 })(); | 423 })(); |
| 424 | 424 |
| 425 (function() { | 425 (function() { |
| 426 var deferred = Promise.defer() | 426 var deferred = Promise.defer() |
| 427 var p1 = deferred.promise | 427 var p1 = deferred.promise |
| 428 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 428 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 429 var p3 = Promise.resolve(p2) | 429 var p3 = Promise.accept(p2) |
| 430 p3.chain( | 430 p3.chain( |
| 431 function(x) { assertAsync(x === p2, "chain/reject/thenable") }, | 431 function(x) { assertAsync(x === p2, "chain/reject/thenable") }, |
| 432 assertUnreachable | 432 assertUnreachable |
| 433 ) | 433 ) |
| 434 deferred.reject(5) | 434 deferred.reject(5) |
| 435 assertAsyncRan() | 435 assertAsyncRan() |
| 436 })(); | 436 })(); |
| 437 | 437 |
| 438 (function() { | 438 (function() { |
| 439 var deferred = Promise.defer() | 439 var deferred = Promise.defer() |
| 440 var p1 = deferred.promise | 440 var p1 = deferred.promise |
| 441 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 441 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 442 var p3 = Promise.resolve(p2) | 442 var p3 = Promise.accept(p2) |
| 443 p3.then( | 443 p3.then( |
| 444 assertUnreachable, | 444 assertUnreachable, |
| 445 function(x) { assertAsync(x === 5, "then/reject/thenable") } | 445 function(x) { assertAsync(x === 5, "then/reject/thenable") } |
| 446 ) | 446 ) |
| 447 deferred.reject(5) | 447 deferred.reject(5) |
| 448 assertAsyncRan() | 448 assertAsyncRan() |
| 449 })(); | 449 })(); |
| 450 | 450 |
| 451 (function() { | 451 (function() { |
| 452 var p1 = Promise.resolve(5) | 452 var p1 = Promise.accept(5) |
| 453 var p2 = Promise.resolve(p1) | 453 var p2 = Promise.accept(p1) |
| 454 var deferred = Promise.defer() | 454 var deferred = Promise.defer() |
| 455 var p3 = deferred.promise | 455 var p3 = deferred.promise |
| 456 p3.chain( | 456 p3.chain( |
| 457 function(x) { assertAsync(x === p2, "chain/resolve2") }, | 457 function(x) { assertAsync(x === p2, "chain/resolve2") }, |
| 458 assertUnreachable | 458 assertUnreachable |
| 459 ) | 459 ) |
| 460 deferred.resolve(p2) | 460 deferred.resolve(p2) |
| 461 assertAsyncRan() | 461 assertAsyncRan() |
| 462 })(); | 462 })(); |
| 463 | 463 |
| 464 (function() { | 464 (function() { |
| 465 var p1 = Promise.resolve(5) | 465 var p1 = Promise.accept(5) |
| 466 var p2 = Promise.resolve(p1) | 466 var p2 = Promise.accept(p1) |
| 467 var deferred = Promise.defer() | 467 var deferred = Promise.defer() |
| 468 var p3 = deferred.promise | 468 var p3 = deferred.promise |
| 469 p3.then( | 469 p3.then( |
| 470 function(x) { assertAsync(x === 5, "then/resolve2") }, | 470 function(x) { assertAsync(x === 5, "then/resolve2") }, |
| 471 assertUnreachable | 471 assertUnreachable |
| 472 ) | 472 ) |
| 473 deferred.resolve(p2) | 473 deferred.resolve(p2) |
| 474 assertAsyncRan() | 474 assertAsyncRan() |
| 475 })(); | 475 })(); |
| 476 | 476 |
| 477 (function() { | 477 (function() { |
| 478 var p1 = Promise.resolve(5) | 478 var p1 = Promise.accept(5) |
| 479 var p2 = Promise.resolve(p1) | 479 var p2 = Promise.accept(p1) |
| 480 var deferred = Promise.defer() | 480 var deferred = Promise.defer() |
| 481 var p3 = deferred.promise | 481 var p3 = deferred.promise |
| 482 p3.chain( | 482 p3.chain( |
| 483 assertUnreachable, | 483 assertUnreachable, |
| 484 function(x) { assertAsync(x === 5, "chain/reject2") } | 484 function(x) { assertAsync(x === 5, "chain/reject2") } |
| 485 ) | 485 ) |
| 486 deferred.reject(5) | 486 deferred.reject(5) |
| 487 assertAsyncRan() | 487 assertAsyncRan() |
| 488 })(); | 488 })(); |
| 489 | 489 |
| 490 (function() { | 490 (function() { |
| 491 var p1 = Promise.resolve(5) | 491 var p1 = Promise.accept(5) |
| 492 var p2 = Promise.resolve(p1) | 492 var p2 = Promise.accept(p1) |
| 493 var deferred = Promise.defer() | 493 var deferred = Promise.defer() |
| 494 var p3 = deferred.promise | 494 var p3 = deferred.promise |
| 495 p3.then( | 495 p3.then( |
| 496 assertUnreachable, | 496 assertUnreachable, |
| 497 function(x) { assertAsync(x === 5, "then/reject2") } | 497 function(x) { assertAsync(x === 5, "then/reject2") } |
| 498 ) | 498 ) |
| 499 deferred.reject(5) | 499 deferred.reject(5) |
| 500 assertAsyncRan() | 500 assertAsyncRan() |
| 501 })(); | 501 })(); |
| 502 | 502 |
| 503 (function() { | 503 (function() { |
| 504 var p1 = Promise.resolve(5) | 504 var p1 = Promise.accept(5) |
| 505 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 505 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 506 var deferred = Promise.defer() | 506 var deferred = Promise.defer() |
| 507 var p3 = deferred.promise | 507 var p3 = deferred.promise |
| 508 p3.chain( | 508 p3.chain( |
| 509 function(x) { assertAsync(x === p2, "chain/resolve/thenable2") }, | 509 function(x) { assertAsync(x === p2, "chain/resolve/thenable2") }, |
| 510 assertUnreachable | 510 assertUnreachable |
| 511 ) | 511 ) |
| 512 deferred.resolve(p2) | 512 deferred.resolve(p2) |
| 513 assertAsyncRan() | 513 assertAsyncRan() |
| 514 })(); | 514 })(); |
| 515 | 515 |
| 516 (function() { | 516 (function() { |
| 517 var p1 = Promise.resolve(5) | 517 var p1 = Promise.accept(5) |
| 518 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} | 518 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} |
| 519 var deferred = Promise.defer() | 519 var deferred = Promise.defer() |
| 520 var p3 = deferred.promise | 520 var p3 = deferred.promise |
| 521 p3.then( | 521 p3.then( |
| 522 function(x) { assertAsync(x === 5, "then/resolve/thenable2") }, | 522 function(x) { assertAsync(x === 5, "then/resolve/thenable2") }, |
| 523 assertUnreachable | 523 assertUnreachable |
| 524 ) | 524 ) |
| 525 deferred.resolve(p2) | 525 deferred.resolve(p2) |
| 526 assertAsyncRan() | 526 assertAsyncRan() |
| 527 })(); | 527 })(); |
| 528 | 528 |
| 529 (function() { | 529 (function() { |
| 530 var p1 = Promise.resolve(0) | 530 var p1 = Promise.accept(0) |
| 531 var p2 = p1.chain(function(x) { return p2 }, assertUnreachable) | 531 var p2 = p1.chain(function(x) { return p2 }, assertUnreachable) |
| 532 p2.chain( | 532 p2.chain( |
| 533 assertUnreachable, | 533 assertUnreachable, |
| 534 function(r) { assertAsync(r instanceof TypeError, "cyclic/chain") } | 534 function(r) { assertAsync(r instanceof TypeError, "cyclic/chain") } |
| 535 ) | 535 ) |
| 536 assertAsyncRan() | 536 assertAsyncRan() |
| 537 })(); | 537 })(); |
| 538 | 538 |
| 539 (function() { | 539 (function() { |
| 540 var p1 = Promise.resolve(0) | 540 var p1 = Promise.accept(0) |
| 541 var p2 = p1.then(function(x) { return p2 }, assertUnreachable) | 541 var p2 = p1.then(function(x) { return p2 }, assertUnreachable) |
| 542 p2.chain( | 542 p2.chain( |
| 543 assertUnreachable, | 543 assertUnreachable, |
| 544 function(r) { assertAsync(r instanceof TypeError, "cyclic/then") } | 544 function(r) { assertAsync(r instanceof TypeError, "cyclic/then") } |
| 545 ) | 545 ) |
| 546 assertAsyncRan() | 546 assertAsyncRan() |
| 547 })(); | 547 })(); |
| 548 | 548 |
| 549 (function() { | 549 (function() { |
| 550 var deferred = Promise.defer() | 550 var deferred = Promise.defer() |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 605 deferred2.resolve(2) | 605 deferred2.resolve(2) |
| 606 assertAsyncRan() | 606 assertAsyncRan() |
| 607 assertAsyncRan() | 607 assertAsyncRan() |
| 608 assertAsyncRan() | 608 assertAsyncRan() |
| 609 assertAsyncRan() | 609 assertAsyncRan() |
| 610 })(); | 610 })(); |
| 611 | 611 |
| 612 (function() { | 612 (function() { |
| 613 var deferred = Promise.defer() | 613 var deferred = Promise.defer() |
| 614 var p1 = deferred.promise | 614 var p1 = deferred.promise |
| 615 var p2 = Promise.resolve(2) | 615 var p2 = Promise.accept(2) |
| 616 var p3 = Promise.defer().promise | 616 var p3 = Promise.defer().promise |
| 617 Promise.all([p1, p2, p3]).chain( | 617 Promise.all([p1, p2, p3]).chain( |
| 618 assertUnreachable, | 618 assertUnreachable, |
| 619 assertUnreachable | 619 assertUnreachable |
| 620 ) | 620 ) |
| 621 deferred.resolve(1) | 621 deferred.resolve(1) |
| 622 })(); | 622 })(); |
| 623 | 623 |
| 624 (function() { | 624 (function() { |
| 625 var deferred1 = Promise.defer() | 625 var deferred1 = Promise.defer() |
| (...skipping 13 matching lines...) Expand all Loading... |
| 639 })(); | 639 })(); |
| 640 | 640 |
| 641 (function() { | 641 (function() { |
| 642 Promise.race([]).chain( | 642 Promise.race([]).chain( |
| 643 assertUnreachable, | 643 assertUnreachable, |
| 644 assertUnreachable | 644 assertUnreachable |
| 645 ) | 645 ) |
| 646 })(); | 646 })(); |
| 647 | 647 |
| 648 (function() { | 648 (function() { |
| 649 var p1 = Promise.resolve(1) | 649 var p1 = Promise.accept(1) |
| 650 var p2 = Promise.resolve(2) | 650 var p2 = Promise.accept(2) |
| 651 var p3 = Promise.resolve(3) | 651 var p3 = Promise.accept(3) |
| 652 Promise.race([p1, p2, p3]).chain( | 652 Promise.race([p1, p2, p3]).chain( |
| 653 function(x) { assertAsync(x === 1, "resolved/one") }, | 653 function(x) { assertAsync(x === 1, "resolved/one") }, |
| 654 assertUnreachable | 654 assertUnreachable |
| 655 ) | 655 ) |
| 656 assertAsyncRan() | 656 assertAsyncRan() |
| 657 })(); | 657 })(); |
| 658 | 658 |
| 659 (function() { | 659 (function() { |
| 660 var p1 = Promise.resolve(1) | 660 var p1 = Promise.accept(1) |
| 661 var p2 = Promise.resolve(2) | 661 var p2 = Promise.accept(2) |
| 662 var p3 = Promise.resolve(3) | 662 var p3 = Promise.accept(3) |
| 663 Promise.race([0, p1, p2, p3]).chain( | 663 Promise.race([0, p1, p2, p3]).chain( |
| 664 function(x) { assertAsync(x === 0, "resolved-const/one") }, | 664 function(x) { assertAsync(x === 0, "resolved-const/one") }, |
| 665 assertUnreachable | 665 assertUnreachable |
| 666 ) | 666 ) |
| 667 assertAsyncRan() | 667 assertAsyncRan() |
| 668 })(); | 668 })(); |
| 669 | 669 |
| 670 (function() { | 670 (function() { |
| 671 Promise.race({}).chain( | 671 Promise.race({}).chain( |
| 672 assertUnreachable, | 672 assertUnreachable, |
| (...skipping 14 matching lines...) Expand all Loading... |
| 687 assertUnreachable | 687 assertUnreachable |
| 688 ) | 688 ) |
| 689 deferred3.resolve(3) | 689 deferred3.resolve(3) |
| 690 deferred1.resolve(1) | 690 deferred1.resolve(1) |
| 691 assertAsyncRan() | 691 assertAsyncRan() |
| 692 })(); | 692 })(); |
| 693 | 693 |
| 694 (function() { | 694 (function() { |
| 695 var deferred = Promise.defer() | 695 var deferred = Promise.defer() |
| 696 var p1 = deferred.promise | 696 var p1 = deferred.promise |
| 697 var p2 = Promise.resolve(2) | 697 var p2 = Promise.accept(2) |
| 698 var p3 = Promise.defer().promise | 698 var p3 = Promise.defer().promise |
| 699 Promise.race([p1, p2, p3]).chain( | 699 Promise.race([p1, p2, p3]).chain( |
| 700 function(x) { assertAsync(x === 2, "resolved/one") }, | 700 function(x) { assertAsync(x === 2, "resolved/one") }, |
| 701 assertUnreachable | 701 assertUnreachable |
| 702 ) | 702 ) |
| 703 deferred.resolve(1) | 703 deferred.resolve(1) |
| 704 assertAsyncRan() | 704 assertAsyncRan() |
| 705 })(); | 705 })(); |
| 706 | 706 |
| 707 (function() { | 707 (function() { |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 782 | 782 |
| 783 log = "" | 783 log = "" |
| 784 var d6 = MyPromise.defer() | 784 var d6 = MyPromise.defer() |
| 785 d6.promise.chain(function(x) { | 785 d6.promise.chain(function(x) { |
| 786 return new Promise(function(resolve) { resolve(x) }) | 786 return new Promise(function(resolve) { resolve(x) }) |
| 787 }).chain(function() {}) | 787 }).chain(function() {}) |
| 788 d6.resolve(6) | 788 d6.resolve(6) |
| 789 assertTrue(log === "dncncnx6", "subclass/chain") | 789 assertTrue(log === "dncncnx6", "subclass/chain") |
| 790 | 790 |
| 791 log = "" | 791 log = "" |
| 792 Promise.all([11, Promise.resolve(12), 13, MyPromise.resolve(14), 15, 16]) | 792 Promise.all([11, Promise.accept(12), 13, MyPromise.accept(14), 15, 16]) |
| 793 assertTrue(log === "nx14cn", "subclass/all/arg") | 793 assertTrue(log === "nx14cn", "subclass/all/arg") |
| 794 | 794 |
| 795 log = "" | 795 log = "" |
| 796 MyPromise.all([21, Promise.resolve(22), 23, MyPromise.resolve(24), 25, 26]) | 796 MyPromise.all([21, Promise.accept(22), 23, MyPromise.accept(24), 25, 26]) |
| 797 assertTrue(log === "nx24nnx21cnnx23cncnnx25cnnx26cn", "subclass/all/self") | 797 assertTrue(log === "nx24nnx21cnnx23cncnnx25cnnx26cn", "subclass/all/self") |
| 798 })(); | 798 })(); |
| 799 | 799 |
| 800 | 800 |
| 801 assertAsyncDone() | 801 assertAsyncDone() |
| OLD | NEW |