iter-step-err-reject.js (1492B)
1 // |reftest| async 2 // Copyright (C) 2016 the V8 project authors. All rights reserved. 3 // This code is governed by the BSD license found in the LICENSE file. 4 5 /*--- 6 esid: sec-promise.all 7 description: > 8 Error when advancing the provided iterable (rejecting promise) 9 info: | 10 11. Let result be PerformPromiseAll(iteratorRecord, C, promiseCapability). 11 12. If result is an abrupt completion, 12 a. If iteratorRecord.[[done]] is false, let result be 13 IteratorClose(iterator, result). 14 b. IfAbruptRejectPromise(result, promiseCapability). 15 16 [...] 17 18 25.4.4.1.1 Runtime Semantics: PerformPromiseAll 19 20 [...] 21 6. Repeat 22 a. Let next be IteratorStep(iteratorRecord.[[iterator]]). 23 b. If next is an abrupt completion, set iteratorRecord.[[done]] to 24 true. 25 c. ReturnIfAbrupt(next). 26 features: [Symbol.iterator] 27 flags: [async] 28 ---*/ 29 30 var iterStepThrows = {}; 31 var poisonedDone = {}; 32 var error = new Test262Error(); 33 Object.defineProperty(poisonedDone, 'done', { 34 get: function() { 35 throw error; 36 } 37 }); 38 Object.defineProperty(poisonedDone, 'value', { 39 get: function() { 40 $DONE('The `value` property should not be accessed.'); 41 } 42 }); 43 44 iterStepThrows[Symbol.iterator] = function() { 45 return { 46 next: function() { 47 return poisonedDone; 48 } 49 }; 50 }; 51 52 Promise.all(iterStepThrows).then(function() { 53 $DONE('The promise should be rejected.'); 54 }, function(reason) { 55 assert.sameValue(reason, error); 56 }).then($DONE, $DONE);