From 30358eaaf96dbb274af7bdd8d8e8536cc38e8010 Mon Sep 17 00:00:00 2001 From: Caitlin Potter Date: Wed, 27 Sep 2017 16:37:02 -0400 Subject: [PATCH] Update iteration tests with respect to spec changes 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. --- .../for-of/iterator-next-reference.js | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/test/language/statements/for-of/iterator-next-reference.js b/test/language/statements/for-of/iterator-next-reference.js index 3fd8ebad54c..3dba09c9a4a 100644 --- a/test/language/statements/for-of/iterator-next-reference.js +++ b/test/language/statements/for-of/iterator-next-reference.js @@ -3,39 +3,33 @@ /*--- es6id: 13.6.4.13 S5.c description: > - The iterator's `next` method should be accessed with each iteration as per - the `IteratorStep` abstract operation (7.4.5). + 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] ---*/ var iterable = {}; var iterator = {}; var firstIterResult = { done: false }; -var iterationCount, invocationCount; +var iterationCount = 0; iterable[Symbol.iterator] = function() { return iterator; }; -iterator.next = function() { return { value: 45, done: false }; }; -iterationCount = 0; -invocationCount = 0; +iterator.next = function() { + if (iterationCount) return { done: true }; + return { value: 45, done: false }; +}; 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.'); - } - }); - - return { value: null, done: true }; - }; + Object.defineProperty(iterator, 'next', { + get: function() { + $ERROR('Should not access the `next` method after the iteration ' + + 'prologue.'); + } + }); iterationCount++; } assert.sameValue(iterationCount, 1); -assert.sameValue(invocationCount, 1);