S25.4.4.5_A3.1_T1.js (1295B)
1 // |reftest| async 2 // Copyright 2014 Cubane Canada, Inc. All rights reserved. 3 // See LICENSE for details. 4 5 /*--- 6 info: | 7 Promise.resolve 8 es6id: S25.4.4.5_A3.1_T1 9 author: Sam Mikes 10 description: Promise.resolve delegates to foreign thenable 11 includes: [promiseHelper.js] 12 flags: [async] 13 ---*/ 14 15 var sequence = []; 16 17 var thenable = { 18 then: function(onResolve, onReject) { 19 sequence.push(3); 20 assert.sameValue(sequence.length, 3); 21 checkSequence(sequence, "thenable.then called"); 22 23 assert.sameValue(this, thenable); 24 25 onResolve('resolved'); 26 27 sequence.push(4); 28 assert.sameValue(sequence.length, 4); 29 checkSequence(sequence, "after resolved"); 30 31 throw new Error('interrupt flow'); 32 33 sequence.push(4); 34 assert.sameValue(sequence.length, 4); 35 checkSequence(sequence, "duplicate sequence point not pushed"); 36 } 37 }; 38 39 sequence.push(1); 40 assert.sameValue(sequence.length, 1); 41 checkSequence(sequence, "no async calls yet"); 42 43 var p1 = Promise.resolve(thenable); 44 45 sequence.push(2); 46 assert.sameValue(sequence.length, 2); 47 checkSequence(sequence, "thenable.then queued but not yet called"); 48 49 p1.then(function(q) { 50 sequence.push(5); 51 assert.sameValue(sequence.length, 5); 52 checkSequence(sequence, "all done"); 53 54 assert.sameValue(q, 'resolved'); 55 56 }).then($DONE, $DONE);