tor-browser

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

iterator_edge_cases.js (1320B)


      1 // SKIP test262 export
      2 // Pending review.
      3 
      4 // Test that we can't confuse %ArrayIteratorPrototype% for an
      5 // ArrayIterator object.
      6 function TestArrayIteratorPrototypeConfusion() {
      7    var iter = [][Symbol.iterator]();
      8    assertThrowsInstanceOfWithMessage(
      9        () => iter.next.call(Object.getPrototypeOf(iter)),
     10        TypeError,
     11        "next method called on incompatible Array Iterator");
     12 }
     13 TestArrayIteratorPrototypeConfusion();
     14 
     15 // Tests that we can use %ArrayIteratorPrototype%.next on a
     16 // cross-compartment iterator.
     17 function TestArrayIteratorWrappers() {
     18    var iter = [][Symbol.iterator]();
     19    assertDeepEq(iter.next.call(newGlobal().eval('[5][Symbol.iterator]()')),
     20 	 { value: 5, done: false })
     21 }
     22 TestArrayIteratorWrappers();
     23 
     24 // Tests that calling |next| on an array iterator after iteration has finished
     25 // doesn't get the array's |length| property.
     26 function TestIteratorNextGetLength() {
     27  var lengthCalledTimes = 0;
     28  var array = {
     29    __proto__: Array.prototype,
     30    get length() {
     31      lengthCalledTimes += 1;
     32      return {
     33        valueOf() {
     34          return 0;
     35        }
     36      };
     37    }
     38  };
     39  var it = array[Symbol.iterator]();
     40  it.next();
     41  it.next();
     42  assertEq(1, lengthCalledTimes);
     43 }
     44 TestIteratorNextGetLength();
     45 
     46 
     47 if (typeof reportCompare === "function")
     48  reportCompare(true, true);