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

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

Issue 99573002: Promises: some adaptations to spec (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« src/promise.js ('K') | « src/runtime.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 assertAsync(false, "all") 51 assertAsync(false, "all")
52 else 52 else
53 assertAsyncDone(iteration + 1) 53 assertAsyncDone(iteration + 1)
54 } 54 }
55 ) 55 )
56 dummy.dummy = dummy 56 dummy.dummy = dummy
57 } 57 }
58 58
59 59
60 (function() { 60 (function() {
61 assertThrows(function() { new Promise(5) }, TypeError) 61 assertThrows(function() { Promise(function() {}) }, TypeError)
62 })(); 62 })();
63 63
64 (function() { 64 (function() {
65 assertThrows(function() { new Promise(function() { throw 5 }) }, 5) 65 assertTrue(new Promise(function() {}) instanceof Promise)
66 })(); 66 })();
67 67
68 (function() { 68 (function() {
69 Promise.resolved(5); 69 assertDoesNotThrow(function() { new Promise(5) })
70 Promise.resolved(5).chain(undefined, assertUnreachable).chain( 70 assertDoesNotThrow(function() { new Promise(function() { throw 5 }) })
71 })();
72
73 (function() {
74 (new Promise(5)).chain(
75 assertUnreachable,
76 function(r) { assertAsync(r instanceof TypeError, "new-noresolver") }
77 )
78 assertAsyncRan()
79 })();
80
81 (function() {
82 (new Promise(function() { throw 5 })).chain(
83 assertUnreachable,
84 function(r) { assertAsync(r === 5, "new-throw") }
85 )
86 assertAsyncRan()
87 })();
88
89 (function() {
90 Promise.resolve(5);
91 Promise.resolve(5).chain(undefined, assertUnreachable).chain(
71 function(x) { assertAsync(x === 5, "resolved/chain-nohandler") }, 92 function(x) { assertAsync(x === 5, "resolved/chain-nohandler") },
72 assertUnreachable 93 assertUnreachable
73 ) 94 )
74 assertAsyncRan() 95 assertAsyncRan()
75 })(); 96 })();
76 97
77 (function() { 98 (function() {
78 Promise.rejected(5).chain(assertUnreachable, undefined).chain( 99 Promise.reject(5).chain(assertUnreachable, undefined).chain(
79 assertUnreachable, 100 assertUnreachable,
80 function(r) { assertAsync(r === 5, "rejected/chain-nohandler") } 101 function(r) { assertAsync(r === 5, "rejected/chain-nohandler") }
81 ) 102 )
82 assertAsyncRan() 103 assertAsyncRan()
83 })(); 104 })();
84 105
85 (function() { 106 (function() {
86 Promise.resolved(5).then(undefined, assertUnreachable).chain( 107 Promise.resolve(5).then(undefined, assertUnreachable).chain(
87 function(x) { assertAsync(x === 5, "resolved/then-nohandler") }, 108 function(x) { assertAsync(x === 5, "resolved/then-nohandler") },
88 assertUnreachable 109 assertUnreachable
89 ) 110 )
90 assertAsyncRan() 111 assertAsyncRan()
91 })(); 112 })();
92 113
93 (function() { 114 (function() {
94 Promise.rejected(5).then(assertUnreachable, undefined).chain( 115 Promise.reject(5).then(assertUnreachable, undefined).chain(
95 assertUnreachable, 116 assertUnreachable,
96 function(r) { assertAsync(r === 5, "rejected/then-nohandler") } 117 function(r) { assertAsync(r === 5, "rejected/then-nohandler") }
97 ) 118 )
98 assertAsyncRan() 119 assertAsyncRan()
99 })(); 120 })();
100 121
101 (function() { 122 (function() {
102 var p1 = Promise.resolved(5) 123 var p1 = Promise.resolve(5)
103 var p2 = Promise.resolved(p1) 124 var p2 = Promise.resolve(p1)
104 var p3 = Promise.resolved(p2) 125 var p3 = Promise.resolve(p2)
105 p3.chain( 126 p3.chain(
106 function(x) { assertAsync(x === p2, "resolved/chain") }, 127 function(x) { assertAsync(x === p2, "resolved/chain") },
107 assertUnreachable 128 assertUnreachable
108 ) 129 )
109 assertAsyncRan() 130 assertAsyncRan()
110 })(); 131 })();
111 132
112 (function() { 133 (function() {
113 var p1 = Promise.resolved(5) 134 var p1 = Promise.resolve(5)
114 var p2 = Promise.resolved(p1) 135 var p2 = Promise.resolve(p1)
115 var p3 = Promise.resolved(p2) 136 var p3 = Promise.resolve(p2)
116 p3.then( 137 p3.then(
117 function(x) { assertAsync(x === 5, "resolved/then") }, 138 function(x) { assertAsync(x === 5, "resolved/then") },
118 assertUnreachable 139 assertUnreachable
119 ) 140 )
120 assertAsyncRan() 141 assertAsyncRan()
121 })(); 142 })();
122 143
123 (function() { 144 (function() {
124 var p1 = Promise.rejected(5) 145 var p1 = Promise.reject(5)
125 var p2 = Promise.resolved(p1) 146 var p2 = Promise.resolve(p1)
126 var p3 = Promise.resolved(p2) 147 var p3 = Promise.resolve(p2)
127 p3.chain( 148 p3.chain(
128 function(x) { assertAsync(x === p2, "rejected/chain") }, 149 function(x) { assertAsync(x === p2, "rejected/chain") },
129 assertUnreachable 150 assertUnreachable
130 ) 151 )
131 assertAsyncRan() 152 assertAsyncRan()
132 })(); 153 })();
133 154
134 (function() { 155 (function() {
135 var p1 = Promise.rejected(5) 156 var p1 = Promise.reject(5)
136 var p2 = Promise.resolved(p1) 157 var p2 = Promise.resolve(p1)
137 var p3 = Promise.resolved(p2) 158 var p3 = Promise.resolve(p2)
138 p3.then( 159 p3.then(
139 assertUnreachable, 160 assertUnreachable,
140 function(x) { assertAsync(x === 5, "rejected/then") } 161 function(x) { assertAsync(x === 5, "rejected/then") }
141 ) 162 )
142 assertAsyncRan() 163 assertAsyncRan()
143 })(); 164 })();
144 165
145 (function() { 166 (function() {
146 var p1 = Promise.resolved(5) 167 var p1 = Promise.resolve(5)
147 var p2 = Promise.resolved(p1) 168 var p2 = Promise.resolve(p1)
148 var p3 = Promise.resolved(p2) 169 var p3 = Promise.resolve(p2)
149 p3.chain(function(x) { return x }, assertUnreachable).chain( 170 p3.chain(function(x) { return x }, assertUnreachable).chain(
150 function(x) { assertAsync(x === p1, "resolved/chain/chain") }, 171 function(x) { assertAsync(x === p1, "resolved/chain/chain") },
151 assertUnreachable 172 assertUnreachable
152 ) 173 )
153 assertAsyncRan() 174 assertAsyncRan()
154 })(); 175 })();
155 176
156 (function() { 177 (function() {
157 var p1 = Promise.resolved(5) 178 var p1 = Promise.resolve(5)
158 var p2 = Promise.resolved(p1) 179 var p2 = Promise.resolve(p1)
159 var p3 = Promise.resolved(p2) 180 var p3 = Promise.resolve(p2)
160 p3.chain(function(x) { return x }, assertUnreachable).then( 181 p3.chain(function(x) { return x }, assertUnreachable).then(
161 function(x) { assertAsync(x === 5, "resolved/chain/then") }, 182 function(x) { assertAsync(x === 5, "resolved/chain/then") },
162 assertUnreachable 183 assertUnreachable
163 ) 184 )
164 assertAsyncRan() 185 assertAsyncRan()
165 })(); 186 })();
166 187
167 (function() { 188 (function() {
168 var p1 = Promise.resolved(5) 189 var p1 = Promise.resolve(5)
169 var p2 = Promise.resolved(p1) 190 var p2 = Promise.resolve(p1)
170 var p3 = Promise.resolved(p2) 191 var p3 = Promise.resolve(p2)
171 p3.chain(function(x) { return 6 }, assertUnreachable).chain( 192 p3.chain(function(x) { return 6 }, assertUnreachable).chain(
172 function(x) { assertAsync(x === 6, "resolved/chain/chain2") }, 193 function(x) { assertAsync(x === 6, "resolved/chain/chain2") },
173 assertUnreachable 194 assertUnreachable
174 ) 195 )
175 assertAsyncRan() 196 assertAsyncRan()
176 })(); 197 })();
177 198
178 (function() { 199 (function() {
179 var p1 = Promise.resolved(5) 200 var p1 = Promise.resolve(5)
180 var p2 = Promise.resolved(p1) 201 var p2 = Promise.resolve(p1)
181 var p3 = Promise.resolved(p2) 202 var p3 = Promise.resolve(p2)
182 p3.chain(function(x) { return 6 }, assertUnreachable).then( 203 p3.chain(function(x) { return 6 }, assertUnreachable).then(
183 function(x) { assertAsync(x === 6, "resolved/chain/then2") }, 204 function(x) { assertAsync(x === 6, "resolved/chain/then2") },
184 assertUnreachable 205 assertUnreachable
185 ) 206 )
186 assertAsyncRan() 207 assertAsyncRan()
187 })(); 208 })();
188 209
189 (function() { 210 (function() {
190 var p1 = Promise.resolved(5) 211 var p1 = Promise.resolve(5)
191 var p2 = Promise.resolved(p1) 212 var p2 = Promise.resolve(p1)
192 var p3 = Promise.resolved(p2) 213 var p3 = Promise.resolve(p2)
193 p3.then(function(x) { return x + 1 }, assertUnreachable).chain( 214 p3.then(function(x) { return x + 1 }, assertUnreachable).chain(
194 function(x) { assertAsync(x === 6, "resolved/then/chain") }, 215 function(x) { assertAsync(x === 6, "resolved/then/chain") },
195 assertUnreachable 216 assertUnreachable
196 ) 217 )
197 assertAsyncRan() 218 assertAsyncRan()
198 })(); 219 })();
199 220
200 (function() { 221 (function() {
201 var p1 = Promise.resolved(5) 222 var p1 = Promise.resolve(5)
202 var p2 = Promise.resolved(p1) 223 var p2 = Promise.resolve(p1)
203 var p3 = Promise.resolved(p2) 224 var p3 = Promise.resolve(p2)
204 p3.then(function(x) { return x + 1 }, assertUnreachable).then( 225 p3.then(function(x) { return x + 1 }, assertUnreachable).then(
205 function(x) { assertAsync(x === 6, "resolved/then/then") }, 226 function(x) { assertAsync(x === 6, "resolved/then/then") },
206 assertUnreachable 227 assertUnreachable
207 ) 228 )
208 assertAsyncRan() 229 assertAsyncRan()
209 })(); 230 })();
210 231
211 (function() { 232 (function() {
212 var p1 = Promise.resolved(5) 233 var p1 = Promise.resolve(5)
213 var p2 = Promise.resolved(p1) 234 var p2 = Promise.resolve(p1)
214 var p3 = Promise.resolved(p2) 235 var p3 = Promise.resolve(p2)
215 p3.then(function(x){ return Promise.resolved(x+1) }, assertUnreachable).chain( 236 p3.then(function(x){ return Promise.resolve(x+1) }, assertUnreachable).chain(
216 function(x) { assertAsync(x === 6, "resolved/then/chain2") }, 237 function(x) { assertAsync(x === 6, "resolved/then/chain2") },
217 assertUnreachable 238 assertUnreachable
218 ) 239 )
219 assertAsyncRan() 240 assertAsyncRan()
220 })(); 241 })();
221 242
222 (function() { 243 (function() {
223 var p1 = Promise.resolved(5) 244 var p1 = Promise.resolve(5)
224 var p2 = Promise.resolved(p1) 245 var p2 = Promise.resolve(p1)
225 var p3 = Promise.resolved(p2) 246 var p3 = Promise.resolve(p2)
226 p3.then(function(x) { return Promise.resolved(x+1) }, assertUnreachable).then( 247 p3.then(function(x) { return Promise.resolve(x+1) }, assertUnreachable).then(
227 function(x) { assertAsync(x === 6, "resolved/then/then2") }, 248 function(x) { assertAsync(x === 6, "resolved/then/then2") },
228 assertUnreachable 249 assertUnreachable
229 ) 250 )
230 assertAsyncRan() 251 assertAsyncRan()
231 })(); 252 })();
232 253
233 (function() { 254 (function() {
234 var p1 = Promise.resolved(5) 255 var p1 = Promise.resolve(5)
235 var p2 = Promise.resolved(p1) 256 var p2 = Promise.resolve(p1)
236 var p3 = Promise.resolved(p2) 257 var p3 = Promise.resolve(p2)
237 p3.chain(function(x) { throw 6 }, assertUnreachable).chain( 258 p3.chain(function(x) { throw 6 }, assertUnreachable).chain(
238 assertUnreachable, 259 assertUnreachable,
239 function(x) { assertAsync(x === 6, "resolved/chain-throw/chain") } 260 function(x) { assertAsync(x === 6, "resolved/chain-throw/chain") }
240 ) 261 )
241 assertAsyncRan() 262 assertAsyncRan()
242 })(); 263 })();
243 264
244 (function() { 265 (function() {
245 var p1 = Promise.resolved(5) 266 var p1 = Promise.resolve(5)
246 var p2 = Promise.resolved(p1) 267 var p2 = Promise.resolve(p1)
247 var p3 = Promise.resolved(p2) 268 var p3 = Promise.resolve(p2)
248 p3.chain(function(x) { throw 6 }, assertUnreachable).then( 269 p3.chain(function(x) { throw 6 }, assertUnreachable).then(
249 assertUnreachable, 270 assertUnreachable,
250 function(x) { assertAsync(x === 6, "resolved/chain-throw/then") } 271 function(x) { assertAsync(x === 6, "resolved/chain-throw/then") }
251 ) 272 )
252 assertAsyncRan() 273 assertAsyncRan()
253 })(); 274 })();
254 275
255 (function() { 276 (function() {
256 var p1 = Promise.resolved(5) 277 var p1 = Promise.resolve(5)
257 var p2 = Promise.resolved(p1) 278 var p2 = Promise.resolve(p1)
258 var p3 = Promise.resolved(p2) 279 var p3 = Promise.resolve(p2)
259 p3.then(function(x) { throw 6 }, assertUnreachable).chain( 280 p3.then(function(x) { throw 6 }, assertUnreachable).chain(
260 assertUnreachable, 281 assertUnreachable,
261 function(x) { assertAsync(x === 6, "resolved/then-throw/chain") } 282 function(x) { assertAsync(x === 6, "resolved/then-throw/chain") }
262 ) 283 )
263 assertAsyncRan() 284 assertAsyncRan()
264 })(); 285 })();
265 286
266 (function() { 287 (function() {
267 var p1 = Promise.resolved(5) 288 var p1 = Promise.resolve(5)
268 var p2 = Promise.resolved(p1) 289 var p2 = Promise.resolve(p1)
269 var p3 = Promise.resolved(p2) 290 var p3 = Promise.resolve(p2)
270 p3.then(function(x) { throw 6 }, assertUnreachable).then( 291 p3.then(function(x) { throw 6 }, assertUnreachable).then(
271 assertUnreachable, 292 assertUnreachable,
272 function(x) { assertAsync(x === 6, "resolved/then-throw/then") } 293 function(x) { assertAsync(x === 6, "resolved/then-throw/then") }
273 ) 294 )
274 assertAsyncRan() 295 assertAsyncRan()
275 })(); 296 })();
276 297
277 (function() { 298 (function() {
278 var p1 = Promise.resolved(5) 299 var p1 = Promise.resolve(5)
279 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 300 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
280 var p3 = Promise.resolved(p2) 301 var p3 = Promise.resolve(p2)
281 p3.chain( 302 p3.chain(
282 function(x) { assertAsync(x === p2, "resolved/thenable/chain") }, 303 function(x) { assertAsync(x === p2, "resolved/thenable/chain") },
283 assertUnreachable 304 assertUnreachable
284 ) 305 )
285 assertAsyncRan() 306 assertAsyncRan()
286 })(); 307 })();
287 308
288 (function() { 309 (function() {
289 var p1 = Promise.resolved(5) 310 var p1 = Promise.resolve(5)
290 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 311 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
291 var p3 = Promise.resolved(p2) 312 var p3 = Promise.resolve(p2)
292 p3.then( 313 p3.then(
293 function(x) { assertAsync(x === 5, "resolved/thenable/then") }, 314 function(x) { assertAsync(x === 5, "resolved/thenable/then") },
294 assertUnreachable 315 assertUnreachable
295 ) 316 )
296 assertAsyncRan() 317 assertAsyncRan()
297 })(); 318 })();
298 319
299 (function() { 320 (function() {
300 var p1 = Promise.rejected(5) 321 var p1 = Promise.reject(5)
301 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 322 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
302 var p3 = Promise.resolved(p2) 323 var p3 = Promise.resolve(p2)
303 p3.chain( 324 p3.chain(
304 function(x) { assertAsync(x === p2, "rejected/thenable/chain") }, 325 function(x) { assertAsync(x === p2, "rejected/thenable/chain") },
305 assertUnreachable 326 assertUnreachable
306 ) 327 )
307 assertAsyncRan() 328 assertAsyncRan()
308 })(); 329 })();
309 330
310 (function() { 331 (function() {
311 var p1 = Promise.rejected(5) 332 var p1 = Promise.reject(5)
312 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 333 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
313 var p3 = Promise.resolved(p2) 334 var p3 = Promise.resolve(p2)
314 p3.then( 335 p3.then(
315 assertUnreachable, 336 assertUnreachable,
316 function(x) { assertAsync(x === 5, "rejected/thenable/then") } 337 function(x) { assertAsync(x === 5, "rejected/thenable/then") }
317 ) 338 )
318 assertAsyncRan() 339 assertAsyncRan()
319 })(); 340 })();
320 341
321 (function() { 342 (function() {
322 var deferred = Promise.deferred() 343 var deferred = Promise.defer()
Dmitry Lomov (no reviews) 2013/12/04 09:24:43 Non necessary to fix in this CL, but I think it wo
323 var p1 = deferred.promise 344 var p1 = deferred.promise
324 var p2 = Promise.resolved(p1) 345 var p2 = Promise.resolve(p1)
325 var p3 = Promise.resolved(p2) 346 var p3 = Promise.resolve(p2)
326 p3.chain( 347 p3.chain(
327 function(x) { assertAsync(x === p2, "chain/resolve") }, 348 function(x) { assertAsync(x === p2, "chain/resolve") },
328 assertUnreachable 349 assertUnreachable
329 ) 350 )
330 deferred.resolve(5) 351 deferred.resolve(5)
331 assertAsyncRan() 352 assertAsyncRan()
332 })(); 353 })();
333 354
334 (function() { 355 (function() {
335 var deferred = Promise.deferred() 356 var deferred = Promise.defer()
336 var p1 = deferred.promise 357 var p1 = deferred.promise
337 var p2 = Promise.resolved(p1) 358 var p2 = Promise.resolve(p1)
338 var p3 = Promise.resolved(p2) 359 var p3 = Promise.resolve(p2)
339 p3.then( 360 p3.then(
340 function(x) { assertAsync(x === 5, "then/resolve") }, 361 function(x) { assertAsync(x === 5, "then/resolve") },
341 assertUnreachable 362 assertUnreachable
342 ) 363 )
343 deferred.resolve(5) 364 deferred.resolve(5)
344 assertAsyncRan() 365 assertAsyncRan()
345 })(); 366 })();
346 367
347 (function() { 368 (function() {
348 var deferred = Promise.deferred() 369 var deferred = Promise.defer()
349 var p1 = deferred.promise 370 var p1 = deferred.promise
350 var p2 = Promise.resolved(p1) 371 var p2 = Promise.resolve(p1)
351 var p3 = Promise.resolved(p2) 372 var p3 = Promise.resolve(p2)
352 p3.chain( 373 p3.chain(
353 function(x) { assertAsync(x === p2, "chain/reject") }, 374 function(x) { assertAsync(x === p2, "chain/reject") },
354 assertUnreachable 375 assertUnreachable
355 ) 376 )
356 deferred.reject(5) 377 deferred.reject(5)
357 assertAsyncRan() 378 assertAsyncRan()
358 })(); 379 })();
359 380
360 (function() { 381 (function() {
361 var deferred = Promise.deferred() 382 var deferred = Promise.defer()
362 var p1 = deferred.promise 383 var p1 = deferred.promise
363 var p2 = Promise.resolved(p1) 384 var p2 = Promise.resolve(p1)
364 var p3 = Promise.resolved(p2) 385 var p3 = Promise.resolve(p2)
365 p3.then( 386 p3.then(
366 assertUnreachable, 387 assertUnreachable,
367 function(x) { assertAsync(x === 5, "then/reject") } 388 function(x) { assertAsync(x === 5, "then/reject") }
368 ) 389 )
369 deferred.reject(5) 390 deferred.reject(5)
370 assertAsyncRan() 391 assertAsyncRan()
371 })(); 392 })();
372 393
373 (function() { 394 (function() {
374 var deferred = Promise.deferred() 395 var deferred = Promise.defer()
375 var p1 = deferred.promise 396 var p1 = deferred.promise
376 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 397 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
377 var p3 = Promise.resolved(p2) 398 var p3 = Promise.resolve(p2)
378 p3.chain( 399 p3.chain(
379 function(x) { assertAsync(x === p2, "chain/resolve/thenable") }, 400 function(x) { assertAsync(x === p2, "chain/resolve/thenable") },
380 assertUnreachable 401 assertUnreachable
381 ) 402 )
382 deferred.resolve(5) 403 deferred.resolve(5)
383 assertAsyncRan() 404 assertAsyncRan()
384 })(); 405 })();
385 406
386 (function() { 407 (function() {
387 var deferred = Promise.deferred() 408 var deferred = Promise.defer()
388 var p1 = deferred.promise 409 var p1 = deferred.promise
389 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 410 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
390 var p3 = Promise.resolved(p2) 411 var p3 = Promise.resolve(p2)
391 p3.then( 412 p3.then(
392 function(x) { assertAsync(x === 5, "then/resolve/thenable") }, 413 function(x) { assertAsync(x === 5, "then/resolve/thenable") },
393 assertUnreachable 414 assertUnreachable
394 ) 415 )
395 deferred.resolve(5) 416 deferred.resolve(5)
396 assertAsyncRan() 417 assertAsyncRan()
397 })(); 418 })();
398 419
399 (function() { 420 (function() {
400 var deferred = Promise.deferred() 421 var deferred = Promise.defer()
401 var p1 = deferred.promise 422 var p1 = deferred.promise
402 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 423 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
403 var p3 = Promise.resolved(p2) 424 var p3 = Promise.resolve(p2)
404 p3.chain( 425 p3.chain(
405 function(x) { assertAsync(x === p2, "chain/reject/thenable") }, 426 function(x) { assertAsync(x === p2, "chain/reject/thenable") },
406 assertUnreachable 427 assertUnreachable
407 ) 428 )
408 deferred.reject(5) 429 deferred.reject(5)
409 assertAsyncRan() 430 assertAsyncRan()
410 })(); 431 })();
411 432
412 (function() { 433 (function() {
413 var deferred = Promise.deferred() 434 var deferred = Promise.defer()
414 var p1 = deferred.promise 435 var p1 = deferred.promise
415 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 436 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
416 var p3 = Promise.resolved(p2) 437 var p3 = Promise.resolve(p2)
417 p3.then( 438 p3.then(
418 assertUnreachable, 439 assertUnreachable,
419 function(x) { assertAsync(x === 5, "then/reject/thenable") } 440 function(x) { assertAsync(x === 5, "then/reject/thenable") }
420 ) 441 )
421 deferred.reject(5) 442 deferred.reject(5)
422 assertAsyncRan() 443 assertAsyncRan()
423 })(); 444 })();
424 445
425 (function() { 446 (function() {
426 var p1 = Promise.resolved(5) 447 var p1 = Promise.resolve(5)
427 var p2 = Promise.resolved(p1) 448 var p2 = Promise.resolve(p1)
428 var deferred = Promise.deferred() 449 var deferred = Promise.defer()
429 var p3 = deferred.promise 450 var p3 = deferred.promise
430 p3.chain( 451 p3.chain(
431 function(x) { assertAsync(x === p2, "chain/resolve2") }, 452 function(x) { assertAsync(x === p2, "chain/resolve2") },
432 assertUnreachable 453 assertUnreachable
433 ) 454 )
434 deferred.resolve(p2) 455 deferred.resolve(p2)
435 assertAsyncRan() 456 assertAsyncRan()
436 })(); 457 })();
437 458
438 (function() { 459 (function() {
439 var p1 = Promise.resolved(5) 460 var p1 = Promise.resolve(5)
440 var p2 = Promise.resolved(p1) 461 var p2 = Promise.resolve(p1)
441 var deferred = Promise.deferred() 462 var deferred = Promise.defer()
442 var p3 = deferred.promise 463 var p3 = deferred.promise
443 p3.then( 464 p3.then(
444 function(x) { assertAsync(x === 5, "then/resolve2") }, 465 function(x) { assertAsync(x === 5, "then/resolve2") },
445 assertUnreachable 466 assertUnreachable
446 ) 467 )
447 deferred.resolve(p2) 468 deferred.resolve(p2)
448 assertAsyncRan() 469 assertAsyncRan()
449 })(); 470 })();
450 471
451 (function() { 472 (function() {
452 var p1 = Promise.resolved(5) 473 var p1 = Promise.resolve(5)
453 var p2 = Promise.resolved(p1) 474 var p2 = Promise.resolve(p1)
454 var deferred = Promise.deferred() 475 var deferred = Promise.defer()
455 var p3 = deferred.promise 476 var p3 = deferred.promise
456 p3.chain( 477 p3.chain(
457 assertUnreachable, 478 assertUnreachable,
458 function(x) { assertAsync(x === 5, "chain/reject2") } 479 function(x) { assertAsync(x === 5, "chain/reject2") }
459 ) 480 )
460 deferred.reject(5) 481 deferred.reject(5)
461 assertAsyncRan() 482 assertAsyncRan()
462 })(); 483 })();
463 484
464 (function() { 485 (function() {
465 var p1 = Promise.resolved(5) 486 var p1 = Promise.resolve(5)
466 var p2 = Promise.resolved(p1) 487 var p2 = Promise.resolve(p1)
467 var deferred = Promise.deferred() 488 var deferred = Promise.defer()
468 var p3 = deferred.promise 489 var p3 = deferred.promise
469 p3.then( 490 p3.then(
470 assertUnreachable, 491 assertUnreachable,
471 function(x) { assertAsync(x === 5, "then/reject2") } 492 function(x) { assertAsync(x === 5, "then/reject2") }
472 ) 493 )
473 deferred.reject(5) 494 deferred.reject(5)
474 assertAsyncRan() 495 assertAsyncRan()
475 })(); 496 })();
476 497
477 (function() { 498 (function() {
478 var p1 = Promise.resolved(5) 499 var p1 = Promise.resolve(5)
479 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 500 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
480 var deferred = Promise.deferred() 501 var deferred = Promise.defer()
481 var p3 = deferred.promise 502 var p3 = deferred.promise
482 p3.chain( 503 p3.chain(
483 function(x) { assertAsync(x === p2, "chain/resolve/thenable2") }, 504 function(x) { assertAsync(x === p2, "chain/resolve/thenable2") },
484 assertUnreachable 505 assertUnreachable
485 ) 506 )
486 deferred.resolve(p2) 507 deferred.resolve(p2)
487 assertAsyncRan() 508 assertAsyncRan()
488 })(); 509 })();
489 510
490 (function() { 511 (function() {
491 var p1 = Promise.resolved(5) 512 var p1 = Promise.resolve(5)
492 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }} 513 var p2 = {then: function(onResolve, onReject) { onResolve(p1) }}
493 var deferred = Promise.deferred() 514 var deferred = Promise.defer()
494 var p3 = deferred.promise 515 var p3 = deferred.promise
495 p3.then( 516 p3.then(
496 function(x) { assertAsync(x === 5, "then/resolve/thenable2") }, 517 function(x) { assertAsync(x === 5, "then/resolve/thenable2") },
497 assertUnreachable 518 assertUnreachable
498 ) 519 )
499 deferred.resolve(p2) 520 deferred.resolve(p2)
500 assertAsyncRan() 521 assertAsyncRan()
501 })(); 522 })();
502 523
503 (function() { 524 (function() {
504 var p1 = Promise.resolved(0) 525 var p1 = Promise.resolve(0)
505 var p2 = p1.chain(function(x) { return p2 }, assertUnreachable) 526 var p2 = p1.chain(function(x) { return p2 }, assertUnreachable)
506 p2.chain( 527 p2.chain(
507 assertUnreachable, 528 assertUnreachable,
508 function(r) { assertAsync(r instanceof TypeError, "cyclic/chain") } 529 function(r) { assertAsync(r instanceof TypeError, "cyclic/chain") }
509 ) 530 )
510 assertAsyncRan() 531 assertAsyncRan()
511 })(); 532 })();
512 533
513 (function() { 534 (function() {
514 var p1 = Promise.resolved(0) 535 var p1 = Promise.resolve(0)
515 var p2 = p1.then(function(x) { return p2 }, assertUnreachable) 536 var p2 = p1.then(function(x) { return p2 }, assertUnreachable)
516 p2.chain( 537 p2.chain(
517 assertUnreachable, 538 assertUnreachable,
518 function(r) { assertAsync(r instanceof TypeError, "cyclic/then") } 539 function(r) { assertAsync(r instanceof TypeError, "cyclic/then") }
519 ) 540 )
520 assertAsyncRan() 541 assertAsyncRan()
521 })(); 542 })();
522 543
523 (function() { 544 (function() {
524 var deferred = Promise.deferred() 545 var deferred = Promise.defer()
525 var p = deferred.promise 546 var p = deferred.promise
526 deferred.resolve(p) 547 deferred.resolve(p)
527 p.chain( 548 p.chain(
528 function(x) { assertAsync(x === p, "cyclic/deferred/chain") }, 549 function(x) { assertAsync(x === p, "cyclic/deferred/chain") },
529 assertUnreachable 550 assertUnreachable
530 ) 551 )
531 assertAsyncRan() 552 assertAsyncRan()
532 })(); 553 })();
533 554
534 (function() { 555 (function() {
535 var deferred = Promise.deferred() 556 var deferred = Promise.defer()
536 var p = deferred.promise 557 var p = deferred.promise
537 deferred.resolve(p) 558 deferred.resolve(p)
538 p.then( 559 p.then(
539 assertUnreachable, 560 assertUnreachable,
540 function(r) { assertAsync(r instanceof TypeError, "cyclic/deferred/then") } 561 function(r) { assertAsync(r instanceof TypeError, "cyclic/deferred/then") }
541 ) 562 )
542 assertAsyncRan() 563 assertAsyncRan()
543 })(); 564 })();
544 565
545 (function() { 566 (function() {
567 Promise.all({get length() { throw 666 }}).chain(
568 assertUnreachable,
569 function(r) { assertAsync(r === 666, "all/no-array") }
570 )
571 assertAsyncRan()
572 })();
573
574 (function() {
546 Promise.all([]).chain( 575 Promise.all([]).chain(
547 function(x) { assertAsync(x.length === 0, "all/resolve/empty") }, 576 function(x) { assertAsync(x.length === 0, "all/resolve/empty") },
548 assertUnreachable 577 assertUnreachable
549 ) 578 )
550 assertAsyncRan() 579 assertAsyncRan()
551 })(); 580 })();
552 581
553 (function() { 582 (function() {
554 var deferred1 = Promise.deferred() 583 var deferred1 = Promise.defer()
555 var p1 = deferred1.promise 584 var p1 = deferred1.promise
556 var deferred2 = Promise.deferred() 585 var deferred2 = Promise.defer()
557 var p2 = deferred2.promise 586 var p2 = deferred2.promise
558 var deferred3 = Promise.deferred() 587 var deferred3 = Promise.defer()
559 var p3 = deferred3.promise 588 var p3 = deferred3.promise
560 Promise.all([p1, p2, p3]).chain( 589 Promise.all([p1, p2, p3]).chain(
561 function(x) { 590 function(x) {
562 assertAsync(x.length === 3, "all/resolve") 591 assertAsync(x.length === 3, "all/resolve")
563 assertAsync(x[0] === 1, "all/resolve/0") 592 assertAsync(x[0] === 1, "all/resolve/0")
564 assertAsync(x[1] === 2, "all/resolve/1") 593 assertAsync(x[1] === 2, "all/resolve/1")
565 assertAsync(x[2] === 3, "all/resolve/2") 594 assertAsync(x[2] === 3, "all/resolve/2")
566 }, 595 },
567 assertUnreachable 596 assertUnreachable
568 ) 597 )
569 deferred1.resolve(1) 598 deferred1.resolve(1)
570 deferred3.resolve(3) 599 deferred3.resolve(3)
571 deferred2.resolve(2) 600 deferred2.resolve(2)
572 assertAsyncRan() 601 assertAsyncRan()
573 assertAsyncRan() 602 assertAsyncRan()
574 assertAsyncRan() 603 assertAsyncRan()
575 assertAsyncRan() 604 assertAsyncRan()
576 })(); 605 })();
577 606
578 (function() { 607 (function() {
579 var deferred = Promise.deferred() 608 var deferred = Promise.defer()
580 var p1 = deferred.promise 609 var p1 = deferred.promise
581 var p2 = Promise.resolved(2) 610 var p2 = Promise.resolve(2)
582 var p3 = Promise.deferred().promise 611 var p3 = Promise.defer().promise
583 Promise.all([p1, p2, p3]).chain( 612 Promise.all([p1, p2, p3]).chain(
584 assertUnreachable, 613 assertUnreachable,
585 assertUnreachable 614 assertUnreachable
586 ) 615 )
587 deferred.resolve(1) 616 deferred.resolve(1)
588 })(); 617 })();
589 618
590 (function() { 619 (function() {
591 var deferred1 = Promise.deferred() 620 var deferred1 = Promise.defer()
592 var p1 = deferred1.promise 621 var p1 = deferred1.promise
593 var deferred2 = Promise.deferred() 622 var deferred2 = Promise.defer()
594 var p2 = deferred2.promise 623 var p2 = deferred2.promise
595 var deferred3 = Promise.deferred() 624 var deferred3 = Promise.defer()
596 var p3 = deferred3.promise 625 var p3 = deferred3.promise
597 Promise.all([p1, p2, p3]).chain( 626 Promise.all([p1, p2, p3]).chain(
598 assertUnreachable, 627 assertUnreachable,
599 function(x) { assertAsync(x === 2, "all/reject") } 628 function(x) { assertAsync(x === 2, "all/reject") }
600 ) 629 )
601 deferred1.resolve(1) 630 deferred1.resolve(1)
602 deferred3.resolve(3) 631 deferred3.resolve(3)
603 deferred2.reject(2) 632 deferred2.reject(2)
604 assertAsyncRan() 633 assertAsyncRan()
605 })(); 634 })();
606 635
607 (function() { 636 (function() {
608 Promise.one([]).chain( 637 Promise.one([]).chain(
609 assertUnreachable, 638 assertUnreachable,
610 assertUnreachable 639 assertUnreachable
611 ) 640 )
612 })(); 641 })();
613 642
614 (function() { 643 (function() {
615 var p1 = Promise.resolved(1) 644 var p1 = Promise.resolve(1)
616 var p2 = Promise.resolved(2) 645 var p2 = Promise.resolve(2)
617 var p3 = Promise.resolved(3) 646 var p3 = Promise.resolve(3)
618 Promise.one([p1, p2, p3]).chain( 647 Promise.one([p1, p2, p3]).chain(
619 function(x) { assertAsync(x === 1, "resolved/all") }, 648 function(x) { assertAsync(x === 1, "resolved/all") },
620 assertUnreachable 649 assertUnreachable
621 ) 650 )
622 assertAsyncRan() 651 assertAsyncRan()
623 })(); 652 })();
624 653
625 (function() { 654 (function() {
626 var p1 = Promise.resolved(1) 655 var p1 = Promise.resolve(1)
627 var p2 = Promise.resolved(2) 656 var p2 = Promise.resolve(2)
628 var p3 = Promise.resolved(3) 657 var p3 = Promise.resolve(3)
629 Promise.one([0, p1, p2, p3]).chain( 658 Promise.one([0, p1, p2, p3]).chain(
630 function(x) { assertAsync(x === 0, "resolved-const/all") }, 659 function(x) { assertAsync(x === 0, "resolved-const/all") },
631 assertUnreachable 660 assertUnreachable
632 ) 661 )
633 assertAsyncRan() 662 assertAsyncRan()
634 })(); 663 })();
635 664
636 (function() { 665 (function() {
637 var deferred1 = Promise.deferred() 666 Promise.one({get length() { throw 666 }}).chain(
667 assertUnreachable,
668 function(r) { assertAsync(r === 666, "one/no-array") }
669 )
670 assertAsyncRan()
671 })();
672
673 (function() {
674 var deferred1 = Promise.defer()
638 var p1 = deferred1.promise 675 var p1 = deferred1.promise
639 var deferred2 = Promise.deferred() 676 var deferred2 = Promise.defer()
640 var p2 = deferred2.promise 677 var p2 = deferred2.promise
641 var deferred3 = Promise.deferred() 678 var deferred3 = Promise.defer()
642 var p3 = deferred3.promise 679 var p3 = deferred3.promise
643 Promise.one([p1, p2, p3]).chain( 680 Promise.one([p1, p2, p3]).chain(
644 function(x) { assertAsync(x === 3, "one/resolve") }, 681 function(x) { assertAsync(x === 3, "one/resolve") },
645 assertUnreachable 682 assertUnreachable
646 ) 683 )
647 deferred3.resolve(3) 684 deferred3.resolve(3)
648 deferred1.resolve(1) 685 deferred1.resolve(1)
649 assertAsyncRan() 686 assertAsyncRan()
650 })(); 687 })();
651 688
652 (function() { 689 (function() {
653 var deferred = Promise.deferred() 690 var deferred = Promise.defer()
654 var p1 = deferred.promise 691 var p1 = deferred.promise
655 var p2 = Promise.resolved(2) 692 var p2 = Promise.resolve(2)
656 var p3 = Promise.deferred().promise 693 var p3 = Promise.defer().promise
657 Promise.one([p1, p2, p3]).chain( 694 Promise.one([p1, p2, p3]).chain(
658 function(x) { assertAsync(x === 2, "resolved/one") }, 695 function(x) { assertAsync(x === 2, "resolved/one") },
659 assertUnreachable 696 assertUnreachable
660 ) 697 )
661 deferred.resolve(1) 698 deferred.resolve(1)
662 assertAsyncRan() 699 assertAsyncRan()
663 })(); 700 })();
664 701
665 (function() { 702 (function() {
666 var deferred1 = Promise.deferred() 703 var deferred1 = Promise.defer()
667 var p1 = deferred1.promise 704 var p1 = deferred1.promise
668 var deferred2 = Promise.deferred() 705 var deferred2 = Promise.defer()
669 var p2 = deferred2.promise 706 var p2 = deferred2.promise
670 var deferred3 = Promise.deferred() 707 var deferred3 = Promise.defer()
671 var p3 = deferred3.promise 708 var p3 = deferred3.promise
672 Promise.one([p1, p2, p3]).chain( 709 Promise.one([p1, p2, p3]).chain(
673 function(x) { assertAsync(x === 3, "one/resolve/reject") }, 710 function(x) { assertAsync(x === 3, "one/resolve/reject") },
674 assertUnreachable 711 assertUnreachable
675 ) 712 )
676 deferred3.resolve(3) 713 deferred3.resolve(3)
677 deferred1.reject(1) 714 deferred1.reject(1)
678 assertAsyncRan() 715 assertAsyncRan()
679 })(); 716 })();
680 717
681 (function() { 718 (function() {
682 var deferred1 = Promise.deferred() 719 var deferred1 = Promise.defer()
683 var p1 = deferred1.promise 720 var p1 = deferred1.promise
684 var deferred2 = Promise.deferred() 721 var deferred2 = Promise.defer()
685 var p2 = deferred2.promise 722 var p2 = deferred2.promise
686 var deferred3 = Promise.deferred() 723 var deferred3 = Promise.defer()
687 var p3 = deferred3.promise 724 var p3 = deferred3.promise
688 Promise.one([p1, p2, p3]).chain( 725 Promise.one([p1, p2, p3]).chain(
689 assertUnreachable, 726 assertUnreachable,
690 function(x) { assertAsync(x === 3, "one/reject/resolve") } 727 function(x) { assertAsync(x === 3, "one/reject/resolve") }
691 ) 728 )
692 deferred3.reject(3) 729 deferred3.reject(3)
693 deferred1.resolve(1) 730 deferred1.resolve(1)
694 assertAsyncRan() 731 assertAsyncRan()
695 })(); 732 })();
696 733
697 (function() { 734 (function() {
698 var log 735 var log
699 function MyPromise(resolver) { 736 function MyPromise(resolver) {
700 log += "n" 737 log += "n"
701 Promise.call(this, 738 var promise = new Promise(function(resolve, reject) {
702 function(resolve, reject) { 739 resolver(
703 resolver( 740 function(x) { log += "x" + x; resolve(x) },
704 function(x) { log += "x" + x; resolve(x) }, 741 function(r) { log += "r" + r; reject(r) }
705 function(r) { log += "r" + r; reject(r) } 742 )
706 ) 743 })
707 } 744 promise.__proto__ = MyPromise.prototype
708 ) 745 return promise
709 } 746 }
710 747
711 MyPromise.__proto__ = Promise 748 MyPromise.__proto__ = Promise
712 MyPromise.deferred = function() { 749 MyPromise.defer = function() {
713 log += "d" 750 log += "d"
714 return this.__proto__.deferred.call(this) 751 return this.__proto__.defer.call(this)
715 } 752 }
716 753
717 MyPromise.prototype.__proto__ = Promise.prototype 754 MyPromise.prototype.__proto__ = Promise.prototype
718 MyPromise.prototype.chain = function(resolve, reject) { 755 MyPromise.prototype.chain = function(resolve, reject) {
719 log += "w" 756 log += "c"
720 return this.__proto__.__proto__.chain.call(this, resolve, reject) 757 return this.__proto__.__proto__.chain.call(this, resolve, reject)
721 } 758 }
722 759
723 log = "" 760 log = ""
724 var p1 = new MyPromise(function(resolve, reject) { resolve(1) }) 761 var p1 = new MyPromise(function(resolve, reject) { resolve(1) })
725 var p2 = new MyPromise(function(resolve, reject) { reject(2) }) 762 var p2 = new MyPromise(function(resolve, reject) { reject(2) })
726 var d3 = MyPromise.deferred() 763 var d3 = MyPromise.defer()
727 assertTrue(d3.promise instanceof MyPromise, "subclass/instance3") 764 assertTrue(d3.promise instanceof Promise, "subclass/instance")
765 assertTrue(d3.promise instanceof MyPromise, "subclass/instance-my3")
728 assertTrue(log === "nx1nr2dn", "subclass/create") 766 assertTrue(log === "nx1nr2dn", "subclass/create")
729 767
730 log = "" 768 log = ""
731 var p4 = MyPromise.resolved(4) 769 var p4 = MyPromise.resolve(4)
732 var p5 = MyPromise.rejected(5) 770 var p5 = MyPromise.reject(5)
733 assertTrue(p4 instanceof MyPromise, "subclass/instance4") 771 assertTrue(p4 instanceof Promise, "subclass/instance4")
734 assertTrue(p5 instanceof MyPromise, "subclass/instance5") 772 assertTrue(p4 instanceof MyPromise, "subclass/instance-my4")
773 assertTrue(p5 instanceof Promise, "subclass/instance5")
774 assertTrue(p5 instanceof MyPromise, "subclass/instance-my5")
735 d3.resolve(3) 775 d3.resolve(3)
736 assertTrue(log === "nx4nr5x3", "subclass/resolve") 776 assertTrue(log === "nx4nr5x3", "subclass/resolve")
737 777
738 log = "" 778 log = ""
739 var d6 = MyPromise.deferred() 779 var d6 = MyPromise.defer()
740 d6.promise.chain(function(x) { return new Promise(x) }).chain(function() {}) 780 d6.promise.chain(function(x) {
781 return new Promise(function(resolve) { resolve(x) })
782 }).chain(function() {})
741 d6.resolve(6) 783 d6.resolve(6)
742 assertTrue(log === "dnwnwnx6", "subclass/chain") 784 assertTrue(log === "dncncnx6", "subclass/chain")
743 785
744 log = "" 786 log = ""
745 Promise.all([11, Promise.resolved(12), 13, MyPromise.resolved(14), 15, 16]) 787 Promise.all([11, Promise.resolve(12), 13, MyPromise.resolve(14), 15, 16])
746 assertTrue(log === "nx14wn", "subclass/all/arg") 788 assertTrue(log === "nx14cn", "subclass/all/arg")
747 789
748 log = "" 790 log = ""
749 MyPromise.all([21, Promise.resolved(22), 23, MyPromise.resolved(24), 25, 26]) 791 MyPromise.all([21, Promise.resolve(22), 23, MyPromise.resolve(24), 25, 26])
750 assertTrue(log === "nx24dnnx21wnnx23wnwnnx25wnnx26wn", "subclass/all/self") 792 assertTrue(log === "nx24nnx21cnnx23cncnnx25cnnx26cn", "subclass/all/self")
751 })(); 793 })();
752 794
753 795
754 assertAsyncDone() 796 assertAsyncDone()
OLDNEW
« src/promise.js ('K') | « src/runtime.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698