// |reftest| async // Copyright 2014 Cubane Canada, Inc. All rights reserved. // See LICENSE for details. /*--- info: | Promise.resolve es6id: S25.4.4.5_A3.1_T1 author: Sam Mikes description: Promise.resolve delegates to foreign thenable includes: [promiseHelper.js] flags: [async] ---*/ var sequence = []; var thenable = { then: function(onResolve, onReject) { sequence.push(3); assert.sameValue(sequence.length, 3); checkSequence(sequence, "thenable.then called"); assert.sameValue(this, thenable); onResolve('resolved'); sequence.push(4); assert.sameValue(sequence.length, 4); checkSequence(sequence, "after resolved"); throw new Error('interrupt flow'); sequence.push(4); assert.sameValue(sequence.length, 4); checkSequence(sequence, "duplicate sequence point not pushed"); } }; sequence.push(1); assert.sameValue(sequence.length, 1); checkSequence(sequence, "no async calls yet"); var p1 = Promise.resolve(thenable); sequence.push(2); assert.sameValue(sequence.length, 2); checkSequence(sequence, "thenable.then queued but not yet called"); p1.then(function(q) { sequence.push(5); assert.sameValue(sequence.length, 5); checkSequence(sequence, "all done"); assert.sameValue(q, 'resolved'); }).then($DONE, $DONE);