Update iteration tests with respect to spec changes (#1248)

https://github.com/tc39/ecma262/pull/988 changes the iteration protocol
such that the "next" method is only loaded from the iterator object once
during the prologue of iteration, rather than during each step.
This commit is contained in:
⭐caitp⭐ 2017-09-27 17:59:41 -04:00 committed by Leo Balter
parent d41eb5d913
commit f3b5a1e4c0
1 changed files with 22 additions and 22 deletions

View File

@ -1,41 +1,41 @@
// Copyright (C) 2013 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.
/*---
es6id: 13.6.4.13 S5.c
esid: sec-getiterator
description: >
The iterator's `next` method should be accessed with each iteration as per
the `IteratorStep` abstract operation (7.4.5).
features: [Symbol.iterator]
The iterator's `next` method should be accessed only once with each
iteration as per the `GetIterator` abstract operation (7.4.1).
features: [Symbol.iterator, for-of]
---*/
var iterable = {};
var iterator = {};
var firstIterResult = { done: false };
var iterationCount, invocationCount;
var iterationCount = 0;
var loadNextCount = 0;
iterable[Symbol.iterator] = function() {
return iterator;
};
iterator.next = function() { return { value: 45, done: false }; };
iterationCount = 0;
invocationCount = 0;
function next() {
if (iterationCount) return { done: true };
return { value: 45, done: false };
}
Object.defineProperty(iterator, 'next', {
get() { loadNextCount++; return next; },
configurable: true
});
for (var x of iterable) {
assert.sameValue(x, 45);
iterator.next = function() {
invocationCount++;
Object.defineProperty(iterator, 'next', {
get: function() {
$ERROR('Should not access the `next` method after iteration ' +
'is complete.');
throw new Test262Error(
'Should not access the `next` method after the iteration prologue.');
}
});
return { value: null, done: true };
};
iterationCount++;
}
assert.sameValue(iterationCount, 1);
assert.sameValue(invocationCount, 1);
assert.sameValue(loadNextCount, 1);