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 |