iterables-iteration-after-reading-options.js (1394B)
1 // Copyright (C) 2025 André Bargull. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 esid: sec-iterator.zip 6 description: > 7 Perform iteration of the "iterables" argument after reading all properties. 8 info: | 9 Iterator.zip ( iterables [ , options ] ) 10 ... 11 3. Let mode be ? Get(options, "mode"). 12 ... 13 7. If mode is "longest", then 14 a. Set paddingOption to ? Get(options, "padding"). 15 ... 16 10. Let inputIter be ? GetIterator(iterables, sync). 17 ... 18 includes: [compareArray.js] 19 features: [joint-iteration] 20 ---*/ 21 22 var log = []; 23 24 var iterables = { 25 [Symbol.iterator]() { 26 log.push("get iterator"); 27 return this; 28 }, 29 next() { 30 return {done: true}; 31 } 32 }; 33 34 var options = { 35 get mode() { 36 log.push("get mode"); 37 return "longest"; 38 }, 39 get padding() { 40 log.push("get padding"); 41 return []; 42 } 43 }; 44 45 Iterator.zip(iterables, options); 46 47 assert.compareArray(log, [ 48 "get mode", 49 "get padding", 50 "get iterator", 51 ]); 52 53 for (var mode of [undefined, "shortest", "strict"]) { 54 log.length = 0; 55 56 options = { 57 get mode() { 58 log.push("get mode"); 59 return mode; 60 }, 61 get padding() { 62 log.push("unexpected get padding"); 63 return []; 64 } 65 }; 66 67 Iterator.zip(iterables, options); 68 69 assert.compareArray(log, [ 70 "get mode", 71 "get iterator", 72 ]); 73 } 74 75 reportCompare(0, 0);