1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* This Source Code Form is subject to the terms of the Mozilla Public
3
* License, v. 2.0. If a copy of the MPL was not distributed with this
4
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
//-----------------------------------------------------------------------------
7
var BUGNUMBER = "(none)";
8
var summary = "Basic support for accessing iterable objects using Iterator";
11
printBugNumber(BUGNUMBER);
20
function Array_equals(a, b)
22
if (!(a instanceof Array) || !(b instanceof Array))
23
throw new Error("Arguments not both of type Array");
24
if (a.length != b.length)
26
for (var i = 0, sz = a.length; i < sz; i++)
32
var iterable = { persistedProp: 17 };
36
// nothing unusual so far -- verify basic properties
37
for (var i in iterable)
39
if (i != "persistedProp")
40
throw "no persistedProp!";
41
if (iterable[i] != 17)
42
throw "iterable[\"persistedProp\"] == 17";
45
var keys = ["foo", "bar", "baz"];
46
var vals = [6, 5, 14];
48
iterable.__iterator__ =
54
for (var i = 0; i < keys.length; i++)
59
yield [keys[i], vals[i]];
65
/* Test [key, value] Iterator */
67
var lastSeen = "INITIALVALUE";
68
var it = Iterator(iterable);
73
var nextVal = it.next();
74
if (!Array_equals(nextVal, [keys[index], vals[index]]))
75
throw "Iterator(iterable): wrong next result\n" +
76
" expected: " + [keys[index], vals[index]] + "\n" +
77
" actual: " + nextVal;
78
lastSeen = keys[index];
84
if (lastSeen !== keys[keys.length - 1])
85
throw "Iterator(iterable): not everything was iterated!\n" +
86
" last iterated was: " + lastSeen + "\n" +
88
if (e !== StopIteration)
89
throw "Iterator(iterable): missing or invalid StopIteration";
92
if (iterable.persistedProp != 17)
93
throw "iterable.persistedProp not persisted!";
95
/* Test [key, value] Iterator, called with an explicit |false| parameter */
97
lastSeen = "INITIALVALUE";
98
it = Iterator(iterable, false);
103
var nextVal = it.next();
104
if (!Array_equals(nextVal, [keys[index], vals[index]]))
105
throw "Iterator(iterable, false): wrong next result\n" +
106
" expected: " + [keys[index], vals[index]] + "\n" +
107
" actual: " + nextVal;
108
lastSeen = keys[index];
114
if (lastSeen !== keys[keys.length - 1])
115
throw "Iterator(iterable, false): not everything was iterated!\n" +
116
" last iterated was: " + lastSeen + "\n" +
118
if (e !== StopIteration)
119
throw "Iterator(iterable, false): missing or invalid StopIteration";
122
if (iterable.persistedProp != 17)
123
throw "iterable.persistedProp not persisted!";
125
/* Test key-only Iterator */
127
lastSeen = undefined;
128
it = Iterator(iterable, true);
133
var nextVal = it.next();
134
if (nextVal !== keys[index])
135
throw "Iterator(iterable, true): wrong next result\n" +
136
" expected: " + keys[index] + "\n" +
137
" actual: " + nextVal;
138
lastSeen = keys[index];
144
if (lastSeen !== keys[keys.length - 1])
145
throw "Iterator(iterable, true): not everything was iterated!\n" +
146
" last iterated was: " + lastSeen + "\n" +
148
if (e !== StopIteration)
149
throw "Iterator(iterable, true): missing or invalid StopIteration";
152
if (iterable.persistedProp != 17)
153
throw "iterable.persistedProp not persisted!";
165
reportCompare(expect, actual, summary);