From 86da17166310709aa0bd5d23ba2cb2cff13e87a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Bargull?= Date: Sat, 16 Sep 2017 17:00:54 +0200 Subject: Change case-files for destructuring-with-yield to not rely on destructuring target evaluation order --- .../array-elem-iter-rtrn-close-null.case | 19 ++++++++++++------- .../array-elem-iter-rtrn-close-null.case | 20 ++++++++++++++++---- src/dstr-assignment/array-elem-iter-rtrn-close.case | 19 ++++++++++++++----- .../array-elem-trlg-iter-list-rtrn-close-err.case | 17 ++++++++++++----- .../array-elem-trlg-iter-list-rtrn-close-null.case | 18 ++++++++++++++---- .../array-elem-trlg-iter-list-rtrn-close.case | 12 +++++++++++- 6 files changed, 79 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/dstr-assignment-for-await/array-elem-iter-rtrn-close-null.case b/src/dstr-assignment-for-await/array-elem-iter-rtrn-close-null.case index 93d4c0402..10d18a136 100644 --- a/src/dstr-assignment-for-await/array-elem-iter-rtrn-close-null.case +++ b/src/dstr-assignment-for-await/array-elem-iter-rtrn-close-null.case @@ -4,12 +4,6 @@ desc: > IteratorClose throws a TypeError when `return` returns a non-Object value info: | - AssignmentElement : DestructuringAssignmentTarget Initializer - 1. If DestructuringAssignmentTarget is neither an ObjectLiteral nor an ArrayLiteral, then - a. Let lref be the result of evaluating DestructuringAssignmentTarget. - b. ReturnIfAbrupt(lref). - [...] - ArrayAssignmentPattern : [ AssignmentElementList ] [...] @@ -32,8 +26,15 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation //- setup let unreachable = 0; +let nextCount = 0; +let returnCount = 0; let iterator = { + next() { + nextCount += 1; + return {done: false, value: undefined}; + }, return() { + returnCount += 1; return null; } }; @@ -43,17 +44,21 @@ let iterable = { } }; //- elems -[ {}[yield] ] +[ {} = yield ] //- vals iterable //- body unreachable += 1; //- teardown iter.next().then(result => { + assert.sameValue(nextCount, 1); + assert.sameValue(returnCount, 0); assert.sameValue(result.value, undefined); assert.sameValue(result.done, false); iter.return().then(() => $DONE('Promise incorrectly fulfilled.'), ({ constructor }) => { + assert.sameValue(nextCount, 1); + assert.sameValue(returnCount, 1); assert.sameValue(unreachable, 0); assert.sameValue(constructor, TypeError); }).then($DONE, $DONE); diff --git a/src/dstr-assignment/array-elem-iter-rtrn-close-null.case b/src/dstr-assignment/array-elem-iter-rtrn-close-null.case index 817ca7b6b..c524b3706 100644 --- a/src/dstr-assignment/array-elem-iter-rtrn-close-null.case +++ b/src/dstr-assignment/array-elem-iter-rtrn-close-null.case @@ -26,19 +26,26 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ //- setup -var iterable = {}; +var nextCount = 0; +var returnCount = 0; +var unreachable = 0; var iterator = { + next: function() { + nextCount += 1; + return {done: false, value: undefined}; + }, return: function() { + returnCount += 1; return null; } }; -var iter; +var iterable = {}; iterable[Symbol.iterator] = function() { return iterator; }; function* g() { //- elems -[ {}[yield] ] +[ {} = yield ] //- vals iterable //- body @@ -46,9 +53,14 @@ iterable //- teardown } -iter = g(); +var iter = g(); iter.next(); +assert.sameValue(nextCount, 1); +assert.sameValue(returnCount, 0); assert.throws(TypeError, function() { iter.return(); }); +assert.sameValue(nextCount, 1); +assert.sameValue(returnCount, 1); +assert.sameValue(unreachable, 0, 'Unreachable statement was not executed'); diff --git a/src/dstr-assignment/array-elem-iter-rtrn-close.case b/src/dstr-assignment/array-elem-iter-rtrn-close.case index 7f1c482fe..1726266e2 100644 --- a/src/dstr-assignment/array-elem-iter-rtrn-close.case +++ b/src/dstr-assignment/array-elem-iter-rtrn-close.case @@ -25,12 +25,16 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ //- setup +var nextCount = 0; var returnCount = 0; var unreachable = 0; var thisValue = null; var args = null; -var iterable = {}; var iterator = { + next: function() { + nextCount += 1; + return {done: false, value: undefined}; + }, return: function() { returnCount += 1; thisValue = this; @@ -38,24 +42,29 @@ var iterator = { return {}; } }; -var iter, result; +var iterable = {}; iterable[Symbol.iterator] = function() { return iterator; }; function* g() { //- elems -[ {}[yield] ] +[ {} = yield ] //- vals iterable //- body unreachable += 1; //- teardown } -iter = g(); +var iter = g(); iter.next(); -result = iter.return(777); +assert.sameValue(nextCount, 1); +assert.sameValue(returnCount, 0); + +var result = iter.return(777); + +assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); assert.sameValue(unreachable, 0, 'Unreachable statement was not executed'); assert.sameValue(result.value, 777); diff --git a/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-err.case b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-err.case index 628e827e4..1c47fafd5 100644 --- a/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-err.case +++ b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-err.case @@ -30,24 +30,28 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ //- setup +var nextCount = 0; var returnCount = 0; var unreachable = 0; -var iterable = {}; var iterator = { + next: function() { + nextCount += 1; + return {done: false, value: undefined}; + }, return: function() { returnCount += 1; throw new Test262Error(); } }; -var iter; +var iterable = {}; iterable[Symbol.iterator] = function() { return iterator; }; function* g() { //- elems -[ {}[yield] , ] +[ {} = yield , ] //- vals iterable //- body @@ -55,11 +59,14 @@ unreachable += 1; //- teardown } -iter = g(); +var iter = g(); iter.next(); + +assert.sameValue(nextCount, 1); +assert.sameValue(returnCount, 0); assert.throws(Test262Error, function() { iter.return(); }); - +assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); assert.sameValue(unreachable, 0, 'Unreachable statement was not executed'); diff --git a/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-null.case b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-null.case index 8a807a315..73ac19352 100644 --- a/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-null.case +++ b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close-null.case @@ -32,28 +32,38 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ //- setup -var iterable = {}; +var nextCount = 0; +var returnCount = 0; var iterator = { + next: function() { + nextCount += 1; + return {done: false, value: undefined}; + }, return: function() { + returnCount += 1; return null; } }; -var iter; +var iterable = {}; iterable[Symbol.iterator] = function() { return iterator; }; function* g() { //- elems - [ {}[yield] , ] + [ {} = yield , ] //- vals iterable //- teardown } -iter = g(); +var iter = g(); iter.next(); +assert.sameValue(nextCount, 1); +assert.sameValue(returnCount, 0); assert.throws(TypeError, function() { iter.return(); }); +assert.sameValue(nextCount, 1); +assert.sameValue(returnCount, 1); diff --git a/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close.case b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close.case index c7c10a93c..5e1ab2f44 100644 --- a/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close.case +++ b/src/dstr-assignment/array-elem-trlg-iter-list-rtrn-close.case @@ -31,12 +31,17 @@ esid: sec-runtime-semantics-destructuringassignmentevaluation ---*/ //- setup +var nextCount = 0; var returnCount = 0; var unreachable = 0; var thisValue = null; var args = null; var iterable = {}; var iterator = { + next: function() { + nextCount += 1; + return {done: false, value: undefined}; + }, return: function() { returnCount += 1; thisValue = this; @@ -52,7 +57,7 @@ iterable[Symbol.iterator] = function() { function* g() { //- elems -[ {}[yield] , ] +[ {} = yield , ] //- vals iterable //- body @@ -62,8 +67,13 @@ iterable iter = g(); iter.next(); + +assert.sameValue(nextCount, 1); +assert.sameValue(returnCount, 0); + result = iter.return(888); +assert.sameValue(nextCount, 1); assert.sameValue(returnCount, 1); assert.sameValue(unreachable, 0, 'Unreachable statement was not executed'); assert.sameValue(result.value, 888); -- cgit v1.2.1