15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright 2014 the V8 project authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flags: --allow-natives-syntax 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestSetIterator() { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var s = new Set; 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = s.values(); 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals('Set Iterator', %_ClassOf(iter)); 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var SetIteratorPrototype = iter.__proto__; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertFalse(SetIteratorPrototype.hasOwnProperty('constructor')); 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(SetIteratorPrototype.__proto__, Object.prototype); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var propertyNames = Object.getOwnPropertyNames(SetIteratorPrototype); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertArrayEquals(['next'], propertyNames); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(new Set().values().__proto__, SetIteratorPrototype); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(new Set().entries().__proto__, SetIteratorPrototype); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestSetIteratorValues() { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var s = new Set; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(1); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(2); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(3); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = s.values(); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 1, done: false}, iter.next()); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 2, done: false}, iter.next()); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 3, done: false}, iter.next()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestSetIteratorKeys() { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(Set.prototype.keys, Set.prototype.values); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestSetIteratorEntries() { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var s = new Set; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(1); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(2); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(3); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = s.entries(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: [1, 1], done: false}, iter.next()); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: [2, 2], done: false}, iter.next()); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: [3, 3], done: false}, iter.next()); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestSetIteratorMutations() { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var s = new Set; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(1); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = s.values(); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 1, done: false}, iter.next()); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(2); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(3); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(4); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(5); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 2, done: false}, iter.next()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.delete(3); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 4, done: false}, iter.next()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.delete(5); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) s.add(4); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestSetInvalidReceiver() { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertThrows(function() { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Set.prototype.values.call({}); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, TypeError); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertThrows(function() { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Set.prototype.entries.call({}); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, TypeError); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestSetIteratorInvalidReceiver() { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = new Set().values(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertThrows(function() { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter.next.call({}); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestSetIteratorSymbol() { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(Set.prototype[Symbol.iterator], Set.prototype.values); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertTrue(Set.prototype.hasOwnProperty(Symbol.iterator)); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertFalse(Set.prototype.propertyIsEnumerable(Symbol.iterator)); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = new Set().values(); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(iter, iter[Symbol.iterator]()); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(iter[Symbol.iterator].name, '[Symbol.iterator]'); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestMapIterator() { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var m = new Map; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = m.values(); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals('Map Iterator', %_ClassOf(iter)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var MapIteratorPrototype = iter.__proto__; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertFalse(MapIteratorPrototype.hasOwnProperty('constructor')); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(MapIteratorPrototype.__proto__, Object.prototype); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var propertyNames = Object.getOwnPropertyNames(MapIteratorPrototype); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertArrayEquals(['next'], propertyNames); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertEquals(new Map().values().__proto__, MapIteratorPrototype); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(new Map().keys().__proto__, MapIteratorPrototype); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(new Map().entries().__proto__, MapIteratorPrototype); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)(function TestMapIteratorValues() { 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) var m = new Map; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(1, 11); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(2, 22); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(3, 33); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = m.values(); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 11, done: false}, iter.next()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 22, done: false}, iter.next()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 33, done: false}, iter.next()); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestMapIteratorKeys() { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var m = new Map; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(1, 11); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(2, 22); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(3, 33); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = m.keys(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 1, done: false}, iter.next()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 2, done: false}, iter.next()); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: 3, done: false}, iter.next()); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestMapIteratorEntries() { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var m = new Map; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(1, 11); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(2, 22); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) m.set(3, 33); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = m.entries(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: [1, 11], done: false}, iter.next()); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: [2, 22], done: false}, iter.next()); 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertEquals({value: [3, 33], done: false}, iter.next()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals({value: undefined, done: true}, iter.next()); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)(function TestMapInvalidReceiver() { 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertThrows(function() { 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Map.prototype.values.call({}); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, TypeError); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertThrows(function() { 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Map.prototype.keys.call({}); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, TypeError); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertThrows(function() { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Map.prototype.entries.call({}); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, TypeError); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestMapIteratorInvalidReceiver() { 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = new Map().values(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertThrows(function() { 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter.next.call({}); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, TypeError); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)(function TestMapIteratorSymbol() { 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(Map.prototype[Symbol.iterator], Map.prototype.entries); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertTrue(Map.prototype.hasOwnProperty(Symbol.iterator)); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertFalse(Map.prototype.propertyIsEnumerable(Symbol.iterator)); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var iter = new Map().values(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(iter, iter[Symbol.iterator]()); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertEquals(iter[Symbol.iterator].name, '[Symbol.iterator]'); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)