Skip to content
Snippets Groups Projects
Commit f3b5a1e4 authored by ⭐caitp⭐'s avatar ⭐caitp⭐ Committed by Leo Balter
Browse files

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.
parent d41eb5d9
No related branches found
No related tags found
No related merge requests found
// Copyright (C) 2013 the V8 project authors. All rights reserved. // Copyright (C) 2013 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file. // This code is governed by the BSD license found in the LICENSE file.
/*--- /*---
es6id: 13.6.4.13 S5.c esid: sec-getiterator
description: > description: >
The iterator's `next` method should be accessed with each iteration as per The iterator's `next` method should be accessed only once with each
the `IteratorStep` abstract operation (7.4.5). iteration as per the `GetIterator` abstract operation (7.4.1).
features: [Symbol.iterator] features: [Symbol.iterator, for-of]
---*/ ---*/
var iterable = {}; var iterable = {};
var iterator = {}; var iterator = {};
var firstIterResult = { done: false }; var iterationCount = 0;
var iterationCount, invocationCount; var loadNextCount = 0;
iterable[Symbol.iterator] = function() { iterable[Symbol.iterator] = function() {
return iterator; return iterator;
}; };
iterator.next = function() { return { value: 45, done: false }; }; function next() {
iterationCount = 0; if (iterationCount) return { done: true };
invocationCount = 0; return { value: 45, done: false };
}
Object.defineProperty(iterator, 'next', {
get() { loadNextCount++; return next; },
configurable: true
});
for (var x of iterable) { for (var x of iterable) {
assert.sameValue(x, 45); assert.sameValue(x, 45);
iterator.next = function() { Object.defineProperty(iterator, 'next', {
invocationCount++; get: function() {
throw new Test262Error(
Object.defineProperty(iterator, 'next', { 'Should not access the `next` method after the iteration prologue.');
get: function() { }
$ERROR('Should not access the `next` method after iteration ' + });
'is complete.');
}
});
return { value: null, done: true };
};
iterationCount++; iterationCount++;
} }
assert.sameValue(iterationCount, 1); assert.sameValue(iterationCount, 1);
assert.sameValue(invocationCount, 1); assert.sameValue(loadNextCount, 1);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment