1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Flags: --allow-natives-syntax
8 (function TestSetIterator() {
10 var iter = s.values();
11 assertEquals('Set Iterator', %_ClassOf(iter));
13 var SetIteratorPrototype = iter.__proto__;
14 assertFalse(SetIteratorPrototype.hasOwnProperty('constructor'));
15 assertEquals(SetIteratorPrototype.__proto__, Object.prototype);
17 var propertyNames = Object.getOwnPropertyNames(SetIteratorPrototype);
18 assertArrayEquals(['next'], propertyNames);
20 assertEquals(new Set().values().__proto__, SetIteratorPrototype);
21 assertEquals(new Set().entries().__proto__, SetIteratorPrototype);
25 (function TestSetIteratorValues() {
30 var iter = s.values();
32 assertEquals({value: 1, done: false}, iter.next());
33 assertEquals({value: 2, done: false}, iter.next());
34 assertEquals({value: 3, done: false}, iter.next());
35 assertEquals({value: undefined, done: true}, iter.next());
36 assertEquals({value: undefined, done: true}, iter.next());
40 (function TestSetIteratorKeys() {
41 assertEquals(Set.prototype.keys, Set.prototype.values);
45 (function TestSetIteratorEntries() {
50 var iter = s.entries();
52 assertEquals({value: [1, 1], done: false}, iter.next());
53 assertEquals({value: [2, 2], done: false}, iter.next());
54 assertEquals({value: [3, 3], done: false}, iter.next());
55 assertEquals({value: undefined, done: true}, iter.next());
56 assertEquals({value: undefined, done: true}, iter.next());
60 (function TestSetIteratorMutations() {
63 var iter = s.values();
64 assertEquals({value: 1, done: false}, iter.next());
69 assertEquals({value: 2, done: false}, iter.next());
71 assertEquals({value: 4, done: false}, iter.next());
73 assertEquals({value: undefined, done: true}, iter.next());
75 assertEquals({value: undefined, done: true}, iter.next());
79 (function TestSetInvalidReceiver() {
80 assertThrows(function() {
81 Set.prototype.values.call({});
83 assertThrows(function() {
84 Set.prototype.entries.call({});
89 (function TestSetIteratorInvalidReceiver() {
90 var iter = new Set().values();
91 assertThrows(function() {
97 (function TestSetIteratorSymbol() {
98 assertEquals(Set.prototype[Symbol.iterator], Set.prototype.values);
99 assertTrue(Set.prototype.hasOwnProperty(Symbol.iterator));
100 assertFalse(Set.prototype.propertyIsEnumerable(Symbol.iterator));
102 var iter = new Set().values();
103 assertEquals(iter, iter[Symbol.iterator]());
104 assertEquals(iter[Symbol.iterator].name, '[Symbol.iterator]');
108 (function TestMapIterator() {
110 var iter = m.values();
111 assertEquals('Map Iterator', %_ClassOf(iter));
113 var MapIteratorPrototype = iter.__proto__;
114 assertFalse(MapIteratorPrototype.hasOwnProperty('constructor'));
115 assertEquals(MapIteratorPrototype.__proto__, Object.prototype);
117 var propertyNames = Object.getOwnPropertyNames(MapIteratorPrototype);
118 assertArrayEquals(['next'], propertyNames);
120 assertEquals(new Map().values().__proto__, MapIteratorPrototype);
121 assertEquals(new Map().keys().__proto__, MapIteratorPrototype);
122 assertEquals(new Map().entries().__proto__, MapIteratorPrototype);
126 (function TestMapIteratorValues() {
131 var iter = m.values();
133 assertEquals({value: 11, done: false}, iter.next());
134 assertEquals({value: 22, done: false}, iter.next());
135 assertEquals({value: 33, done: false}, iter.next());
136 assertEquals({value: undefined, done: true}, iter.next());
137 assertEquals({value: undefined, done: true}, iter.next());
141 (function TestMapIteratorKeys() {
148 assertEquals({value: 1, done: false}, iter.next());
149 assertEquals({value: 2, done: false}, iter.next());
150 assertEquals({value: 3, done: false}, iter.next());
151 assertEquals({value: undefined, done: true}, iter.next());
152 assertEquals({value: undefined, done: true}, iter.next());
156 (function TestMapIteratorEntries() {
161 var iter = m.entries();
163 assertEquals({value: [1, 11], done: false}, iter.next());
164 assertEquals({value: [2, 22], done: false}, iter.next());
165 assertEquals({value: [3, 33], done: false}, iter.next());
166 assertEquals({value: undefined, done: true}, iter.next());
167 assertEquals({value: undefined, done: true}, iter.next());
171 (function TestMapInvalidReceiver() {
172 assertThrows(function() {
173 Map.prototype.values.call({});
175 assertThrows(function() {
176 Map.prototype.keys.call({});
178 assertThrows(function() {
179 Map.prototype.entries.call({});
184 (function TestMapIteratorInvalidReceiver() {
185 var iter = new Map().values();
186 assertThrows(function() {
192 (function TestMapIteratorSymbol() {
193 assertEquals(Map.prototype[Symbol.iterator], Map.prototype.entries);
194 assertTrue(Map.prototype.hasOwnProperty(Symbol.iterator));
195 assertFalse(Map.prototype.propertyIsEnumerable(Symbol.iterator));
197 var iter = new Map().values();
198 assertEquals(iter, iter[Symbol.iterator]());
199 assertEquals(iter[Symbol.iterator].name, '[Symbol.iterator]');