OLD | NEW |
| (Empty) |
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. | |
4 | |
5 // Flags: --harmony-collections --allow-natives-syntax | |
6 | |
7 | |
8 (function TestSetIterator() { | |
9 var s = new Set; | |
10 var iter = s.values(); | |
11 assertEquals('Set Iterator', %_ClassOf(iter)); | |
12 | |
13 var SetIteratorPrototype = iter.__proto__; | |
14 assertFalse(SetIteratorPrototype.hasOwnProperty('constructor')); | |
15 assertEquals(SetIteratorPrototype.__proto__, Object.prototype); | |
16 | |
17 var propertyNames = Object.getOwnPropertyNames(SetIteratorPrototype); | |
18 assertArrayEquals(['next'], propertyNames); | |
19 | |
20 assertEquals(new Set().values().__proto__, SetIteratorPrototype); | |
21 assertEquals(new Set().entries().__proto__, SetIteratorPrototype); | |
22 })(); | |
23 | |
24 | |
25 (function TestSetIteratorValues() { | |
26 var s = new Set; | |
27 s.add(1); | |
28 s.add(2); | |
29 s.add(3); | |
30 var iter = s.values(); | |
31 | |
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()); | |
37 })(); | |
38 | |
39 | |
40 (function TestSetIteratorKeys() { | |
41 assertEquals(Set.prototype.keys, Set.prototype.values); | |
42 })(); | |
43 | |
44 | |
45 (function TestSetIteratorEntries() { | |
46 var s = new Set; | |
47 s.add(1); | |
48 s.add(2); | |
49 s.add(3); | |
50 var iter = s.entries(); | |
51 | |
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()); | |
57 })(); | |
58 | |
59 | |
60 (function TestSetIteratorMutations() { | |
61 var s = new Set; | |
62 s.add(1); | |
63 var iter = s.values(); | |
64 assertEquals({value: 1, done: false}, iter.next()); | |
65 s.add(2); | |
66 s.add(3); | |
67 s.add(4); | |
68 s.add(5); | |
69 assertEquals({value: 2, done: false}, iter.next()); | |
70 s.delete(3); | |
71 assertEquals({value: 4, done: false}, iter.next()); | |
72 s.delete(5); | |
73 assertEquals({value: undefined, done: true}, iter.next()); | |
74 s.add(4); | |
75 assertEquals({value: undefined, done: true}, iter.next()); | |
76 })(); | |
77 | |
78 | |
79 (function TestSetInvalidReceiver() { | |
80 assertThrows(function() { | |
81 Set.prototype.values.call({}); | |
82 }, TypeError); | |
83 assertThrows(function() { | |
84 Set.prototype.entries.call({}); | |
85 }, TypeError); | |
86 })(); | |
87 | |
88 | |
89 (function TestSetIteratorInvalidReceiver() { | |
90 var iter = new Set().values(); | |
91 assertThrows(function() { | |
92 iter.next.call({}); | |
93 }); | |
94 })(); | |
95 | |
96 | |
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)); | |
101 | |
102 var iter = new Set().values(); | |
103 assertEquals(iter, iter[Symbol.iterator]()); | |
104 assertEquals(iter[Symbol.iterator].name, '[Symbol.iterator]'); | |
105 })(); | |
106 | |
107 | |
108 (function TestMapIterator() { | |
109 var m = new Map; | |
110 var iter = m.values(); | |
111 assertEquals('Map Iterator', %_ClassOf(iter)); | |
112 | |
113 var MapIteratorPrototype = iter.__proto__; | |
114 assertFalse(MapIteratorPrototype.hasOwnProperty('constructor')); | |
115 assertEquals(MapIteratorPrototype.__proto__, Object.prototype); | |
116 | |
117 var propertyNames = Object.getOwnPropertyNames(MapIteratorPrototype); | |
118 assertArrayEquals(['next'], propertyNames); | |
119 | |
120 assertEquals(new Map().values().__proto__, MapIteratorPrototype); | |
121 assertEquals(new Map().keys().__proto__, MapIteratorPrototype); | |
122 assertEquals(new Map().entries().__proto__, MapIteratorPrototype); | |
123 })(); | |
124 | |
125 | |
126 (function TestMapIteratorValues() { | |
127 var m = new Map; | |
128 m.set(1, 11); | |
129 m.set(2, 22); | |
130 m.set(3, 33); | |
131 var iter = m.values(); | |
132 | |
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()); | |
138 })(); | |
139 | |
140 | |
141 (function TestMapIteratorKeys() { | |
142 var m = new Map; | |
143 m.set(1, 11); | |
144 m.set(2, 22); | |
145 m.set(3, 33); | |
146 var iter = m.keys(); | |
147 | |
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()); | |
153 })(); | |
154 | |
155 | |
156 (function TestMapIteratorEntries() { | |
157 var m = new Map; | |
158 m.set(1, 11); | |
159 m.set(2, 22); | |
160 m.set(3, 33); | |
161 var iter = m.entries(); | |
162 | |
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()); | |
168 })(); | |
169 | |
170 | |
171 (function TestMapInvalidReceiver() { | |
172 assertThrows(function() { | |
173 Map.prototype.values.call({}); | |
174 }, TypeError); | |
175 assertThrows(function() { | |
176 Map.prototype.keys.call({}); | |
177 }, TypeError); | |
178 assertThrows(function() { | |
179 Map.prototype.entries.call({}); | |
180 }, TypeError); | |
181 })(); | |
182 | |
183 | |
184 (function TestMapIteratorInvalidReceiver() { | |
185 var iter = new Map().values(); | |
186 assertThrows(function() { | |
187 iter.next.call({}); | |
188 }, TypeError); | |
189 })(); | |
190 | |
191 | |
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)); | |
196 | |
197 var iter = new Map().values(); | |
198 assertEquals(iter, iter[Symbol.iterator]()); | |
199 assertEquals(iter[Symbol.iterator].name, '[Symbol.iterator]'); | |
200 })(); | |
OLD | NEW |