blob: ab7f87d23742db0db3170f2e7a9fb01653fe5299 [file] [log] [blame]
// This test checks the behavior of the %ArrayIteratorPrototype%.next methods with call.
var array = [0, 1, 2, 3, 4];
var arrayIterator = array[Symbol.iterator]();
var arrayIteratorPrototype = arrayIterator.__proto__;
var arrayIteratorPrototypeNext = arrayIteratorPrototype.next;
if (arrayIterator.hasOwnProperty('next'))
throw "next method should exists on %ArrayIteratorPrototype%";
if (!arrayIteratorPrototype.hasOwnProperty('next'))
throw "next method should exists on %ArrayIteratorPrototype%";
var array1 = [42, 43, 41];
var array1Iterator = array1[Symbol.iterator]();
var index = 0;
while (true) {
var result = arrayIteratorPrototypeNext.call(array1Iterator);
var value = result.value;
if (result.done) {
break;
}
if (value !== array1[index++])
throw "Error: bad value: " + value;
}
if (index !== 3)
throw "Error: bad index: " + index;
function increment(iter) {
return arrayIteratorPrototypeNext.call(iter);
}
var array1 = [42, 43, -20];
var array2 = [42, 43, -20];
var array1Iterator = array1[Symbol.iterator]();
var array2Iterator = array2[Symbol.iterator]();
for (var i = 0; i < 3; ++i) {
var value1 = increment(array1Iterator).value;
var value2 = increment(array2Iterator).value;
if (value1 !== value2)
throw "Error: bad value: " + value1 + " " + value2;
}
var array1 = [ 0, 1, 2, 4, 5, 6 ];
var array1Iterator = array1[Symbol.iterator]();
var value = array1Iterator.next().value;
if (value !== 0)
throw "Error: bad value: " + value;
var value = array1Iterator.next().value;
if (value !== 1)
throw "Error: bad value: " + value;
var value = array1Iterator.next().value;
if (value !== 2)
throw "Error: bad value: " + value;
var value = arrayIteratorPrototypeNext.call(array1Iterator).value;
if (value !== 4)
throw "Error: bad value: " + value;
var value = arrayIteratorPrototypeNext.call(array1Iterator).value;
if (value !== 5)
throw "Error: bad value: " + value;
var value = arrayIteratorPrototypeNext.call(array1Iterator).value;
if (value !== 6)
throw "Error: bad value: " + value;
var value = arrayIteratorPrototypeNext.call(array1Iterator).value;
if (value !== undefined)
throw "Error: bad value: " + value;
var primitives = [
"string",
42,
0.03,
false,
true,
Symbol("Cocoa"),
null,
undefined
];
for (var primitive of primitives) {
var didThrow = null;
try {
arrayIteratorPrototypeNext.call(primitive);
} catch (e) {
didThrow = e;
}
if (!didThrow)
throw "Error: no error thrown";
var expectedMessage = 'TypeError: %ArrayIteratorPrototype%.next requires that |this| be an Array Iterator instance';
if (primitive === null)
expectedMessage = 'TypeError: %ArrayIteratorPrototype%.next requires that |this| not be null or undefined';
if (primitive === undefined)
expectedMessage = 'TypeError: %ArrayIteratorPrototype%.next requires that |this| not be null or undefined';
if (String(didThrow) !== expectedMessage)
throw "Error: bad error thrown: " + didThrow;
}
var nonRelatedObjects = [
{},
[],
new Date(),
new Error(),
Object(Symbol()),
new String("Cappuccino"),
new Number(42),
new Boolean(false),
function () { },
];
for (var object of nonRelatedObjects) {
var didThrow = null;
try {
arrayIteratorPrototypeNext.call(object);
} catch (e) {
didThrow = e;
}
if (!didThrow)
throw "Error: no error thrown";
if (String(didThrow) !== 'TypeError: %ArrayIteratorPrototype%.next requires that |this| be an Array Iterator instance')
throw "Error: bad error thrown: " + didThrow;
}