iterables-iteration-enumerable.js (1900B)
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.zipkeyed 6 description: > 7 Non-enumerable properties are skipped in "iterables" iteration. 8 info: | 9 Iterator.zipKeyed ( iterables [ , options ] ) 10 ... 11 10. Let allKeys be ? iterables.[[OwnPropertyKeys]](). 12 11. Let keys be a new empty List. 13 12. For each element key of allKeys, do 14 a. Let desc be Completion(iterables.[[GetOwnProperty]](key)). 15 ... 16 c. If desc is not undefined and desc.[[Enumerable]] is true, then 17 ... 18 includes: [compareArray.js] 19 features: [joint-iteration] 20 ---*/ 21 22 var log = []; 23 24 var iterables = Object.create(null, { 25 a: { 26 enumerable: false, 27 get() { 28 throw new Test262Error("unexpected get a"); 29 } 30 }, 31 b: { 32 enumerable: true, 33 get() { 34 log.push("get b"); 35 36 // Change enumerable of property "c". 37 Object.defineProperty(iterables, "c", { 38 enumerable: false, 39 }); 40 41 return ['value for b']; 42 } 43 }, 44 c: { 45 enumerable: true, 46 configurable: true, 47 get() { 48 throw new Test262Error("unexpected get c"); 49 } 50 }, 51 d: { 52 enumerable: true, 53 get() { 54 log.push("get d"); 55 56 // Change enumerable of property "e". 57 Object.defineProperty(iterables, "e", { 58 enumerable: true, 59 }); 60 61 return ['value for d']; 62 } 63 }, 64 e: { 65 enumerable: false, 66 configurable: true, 67 get() { 68 log.push("get e"); 69 return ['value for e']; 70 } 71 }, 72 }); 73 74 var result = Array.from(Iterator.zipKeyed(iterables)); 75 76 assert.compareArray(log, [ 77 "get b", 78 "get d", 79 "get e", 80 ]); 81 82 assert.sameValue(result.length, 1); 83 assert.compareArray(Object.keys(result[0]), ["b", "d", "e"]); 84 assert.compareArray(Object.values(result[0]), ["value for b", "value for d", "value for e"]); 85 86 reportCompare(0, 0);