1 // This test checks the behavior of custom iterable objects.
3 var returnCalled
= false;
8 done: this.__key
=== 42,
12 [Symbol
.iterator
]: function () {
20 for (var value
of iter
) {
21 if (value
!== expected
++)
22 throw "Error: bad value: " + value
;
25 throw "Error: return is called.";
29 var returnCalled
= false;
34 done: this.__key
=== 42,
38 [Symbol
.iterator
]: function () {
51 for (var value
of iter
) {
52 throw "Error: Terminate iteration.";
55 if (String(e
) !== "Error: Terminate iteration.")
56 throw "Error: bad error thrown: " + e
;
59 throw "Error: return is not called.";
63 var returnCalled
= false;
68 done: this.__key
=== 42,
72 [Symbol
.iterator
]: function () {
84 for (var value
of iter
) {
88 throw "Error: return is not called.";
92 var returnCalled
= false;
96 throw "Error: looking up next.";
98 [Symbol
.iterator
]: function () {
101 return: function () {
106 for (var value
of iter
) {
107 throw "Error: Iteration should not occur.";
110 if (String(e
) !== "Error: looking up next.")
111 throw "Error: bad error thrown: " + e
;
114 throw "Error: return is called.";
122 done: this.__key
=== 42,
126 [Symbol
.iterator
]: function () {
130 throw "Error: looking up return."
134 for (var value
of iter
) {
135 throw "Error: Terminate iteration.";
138 if (String(e
) !== "Error: looking up return.")
139 throw "Error: bad error thrown: " + e
;
144 var returnCalled
= false;
148 throw "Error: next is called."
150 [Symbol
.iterator
]: function () {
153 return: function () {
163 for (var value
of iter
) {
164 throw "Error: Terminate iteration.";
167 if (String(e
) !== "Error: next is called.")
168 throw "Error: bad error thrown: " + e
;
171 throw "Error: return is called.";
175 var returnCalled
= false;
179 return { done: false, value: 42 };
181 [Symbol
.iterator
]: function () {
184 return: function () {
186 throw "Error: return is called.";
191 for (var value
of iter
) {
192 throw "Error: Terminate iteration.";
195 if (String(e
) !== "Error: Terminate iteration.")
196 throw "Error: bad error thrown: " + e
;
199 throw "Error: return is not called.";
202 var returnCalled
= false;
206 return { done: false, value: 42 };
208 [Symbol
.iterator
]: function () {
211 return: function () {
213 throw "Error: return is called.";
217 for (var value
of iter
) {
221 if (String(e
) !== "Error: return is called.")
222 throw "Error: bad error thrown: " + e
;
225 throw "Error: return is not called.";
237 function iteratorInterfaceErrorTest(notIteratorResult
) {
238 var returnCalled
= false;
242 return notIteratorResult
;
244 [Symbol
.iterator
]: function () {
247 return: function () {
253 for (var value
of iter
) {
254 throw "Error: Iteration should not occur.";
257 if (String(e
) !== "TypeError: Iterator result interface is not an object.")
258 throw "Error: bad error thrown: " + e
;
261 throw "Error: return is called.";
264 function iteratorInterfaceErrorTestReturn(notIteratorResult
) {
265 var returnCalled
= false;
269 return { done: false, value: 42 };
271 [Symbol
.iterator
]: function () {
274 return: function () {
276 return notIteratorResult
;
280 for (var value
of iter
) {
281 throw "Error: Terminate iteration.";
284 if (String(e
) !== "Error: Terminate iteration.")
285 throw "Error: bad error thrown: " + e
;
288 throw "Error: return is not called.";
291 primitives
.forEach(iteratorInterfaceErrorTest
);
292 primitives
.forEach(iteratorInterfaceErrorTestReturn
);
295 function iteratorInterfaceBreakTestReturn(notIteratorResult
) {
296 var returnCalled
= false;
300 return { done: false, value: 42 };
302 [Symbol
.iterator
]: function () {
305 return: function () {
307 return notIteratorResult
;
311 for (var value
of iter
) {
315 if (String(e
) !== "TypeError: Iterator result interface is not an object.")
316 throw "Error: bad error thrown: " + e
;
319 throw "Error: return is not called.";
322 primitives
.forEach(iteratorInterfaceBreakTestReturn
);