From f3b5a1e4c06aea72ddfa9c90d04f3dcb726081df Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E2=AD=90caitp=E2=AD=90?= <caitp@users.noreply.github.com>
Date: Wed, 27 Sep 2017 17:59:41 -0400
Subject: [PATCH] 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.
---
 .../for-of/iterator-next-reference.js         | 44 +++++++++----------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/test/language/statements/for-of/iterator-next-reference.js b/test/language/statements/for-of/iterator-next-reference.js
index 3fd8ebad54..2df5a99d31 100644
--- a/test/language/statements/for-of/iterator-next-reference.js
+++ b/test/language/statements/for-of/iterator-next-reference.js
@@ -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.');
-      }
-    });
-
-    return { value: null, done: true };
-  };
+  Object.defineProperty(iterator, 'next', {
+    get: function() {
+      throw new Test262Error(
+          'Should not access the `next` method after the iteration prologue.');
+    }
+  });
   iterationCount++;
 }
 assert.sameValue(iterationCount, 1);
-assert.sameValue(invocationCount, 1);
+assert.sameValue(loadNextCount, 1);
-- 
GitLab