tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);