From 025b44f38cad299f5473a1230b54f6e2925ae948 Mon Sep 17 00:00:00 2001
From: Mike Pennisi <mike@mikepennisi.com>
Date: Sun, 10 Dec 2017 15:49:50 -0500
Subject: [PATCH] Refactor AssignmentExpression tests for parsers

A number of tests for the parsing of the AssignmentExpression production
were expressed using `eval`. This made the tests more complex than
necessary, and also prevented the tests from providing value to
ECMAScript parsers.

Remove the use of `eval` in the relevant tests and instead express the
expectations with literal source text. Remove superfluous "onlyStrict"
restriction from tests by declaring the probe binding prior to
assignment.
---
 .../expressions/assignment/11.13.1-4-28-s.js  | 24 -------
 .../expressions/assignment/11.13.1-4-29-s.js  | 24 -------
 .../expressions/assignment/11.13.1-4-30-s.js  | 17 -----
 .../expressions/assignment/11.13.1-4-31-s.js  | 24 -------
 .../expressions/assignment/S11.13.1_A1.js     | 62 -------------------
 .../assignment/id-arguments-strict.js         | 16 +++++
 .../expressions/assignment/id-eval-strict.js  | 16 +++++
 .../expressions/assignment/line-terminator.js | 18 ++++++
 .../expressions/assignment/white-space.js     | 55 ++++++++++++++++
 .../variable/id-arguments-strict.js           | 16 +++++
 .../statements/variable/id-eval-strict.js     | 16 +++++
 11 files changed, 137 insertions(+), 151 deletions(-)
 delete mode 100644 test/language/expressions/assignment/11.13.1-4-28-s.js
 delete mode 100644 test/language/expressions/assignment/11.13.1-4-29-s.js
 delete mode 100644 test/language/expressions/assignment/11.13.1-4-30-s.js
 delete mode 100644 test/language/expressions/assignment/11.13.1-4-31-s.js
 delete mode 100644 test/language/expressions/assignment/S11.13.1_A1.js
 create mode 100644 test/language/expressions/assignment/id-arguments-strict.js
 create mode 100644 test/language/expressions/assignment/id-eval-strict.js
 create mode 100644 test/language/expressions/assignment/line-terminator.js
 create mode 100644 test/language/expressions/assignment/white-space.js
 create mode 100644 test/language/statements/variable/id-arguments-strict.js
 create mode 100644 test/language/statements/variable/id-eval-strict.js

diff --git a/test/language/expressions/assignment/11.13.1-4-28-s.js b/test/language/expressions/assignment/11.13.1-4-28-s.js
deleted file mode 100644
index ef1dfed23a..0000000000
--- a/test/language/expressions/assignment/11.13.1-4-28-s.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.13.1-4-28-s
-description: >
-    Strict Mode - SyntaxError is thrown if the identifier 'eval'
-    appears as the LeftHandSideExpression of simple assignment(=)
-    under strict mode
-flags: [onlyStrict]
----*/
-
-function testcase() {
-        var err = null;
-        var blah = eval;
-        try {
-            eval("var eval = 20;");
-        } catch (e) {
-            err = e;
-        }
-        assert(err instanceof SyntaxError, 'err instanceof SyntaxError');
-        assert.sameValue(blah, eval, 'blah');
-    }
-testcase();
diff --git a/test/language/expressions/assignment/11.13.1-4-29-s.js b/test/language/expressions/assignment/11.13.1-4-29-s.js
deleted file mode 100644
index fedd11c6f0..0000000000
--- a/test/language/expressions/assignment/11.13.1-4-29-s.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.13.1-4-29-s
-description: >
-    Strict Mode - SyntaxError is thrown if the identifier 'arguments'
-    appears as the LeftHandSideExpression of simple assignment(=)
-    under strict mode
-flags: [onlyStrict]
----*/
-
-function testcase() {
-        var err = null;
-        var blah = arguments;
-        try {
-            eval("var arguments = 20;");
-        } catch (e) {
-            err = e;
-        }
-        assert(err instanceof SyntaxError, 'err instanceof SyntaxError');
-        assert.sameValue(blah, arguments, 'blah');
-    }
-testcase();
diff --git a/test/language/expressions/assignment/11.13.1-4-30-s.js b/test/language/expressions/assignment/11.13.1-4-30-s.js
deleted file mode 100644
index 70cdcd0af6..0000000000
--- a/test/language/expressions/assignment/11.13.1-4-30-s.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.13.1-4-30-s
-description: >
-    Strict Mode - SyntaxError is thrown if the identifier 'eval'
-    appears as the LeftHandSideExpression (PrimaryExpression) of
-    simple assignment(=) under strict mode
-flags: [onlyStrict]
----*/
-
-        var blah = eval;
-assert.throws(SyntaxError, function() {
-            eval("(eval) = 20;");
-});
-assert.sameValue(blah, eval, 'blah');
diff --git a/test/language/expressions/assignment/11.13.1-4-31-s.js b/test/language/expressions/assignment/11.13.1-4-31-s.js
deleted file mode 100644
index 6fc24f0034..0000000000
--- a/test/language/expressions/assignment/11.13.1-4-31-s.js
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2012 Ecma International.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-es5id: 11.13.1-4-31-s
-description: >
-    Strict Mode - SyntaxError is thrown if the identifier 'arguments'
-    appears as the LeftHandSideExpression (PrimaryExpression) of
-    simple assignment(=) under strict mode
-flags: [onlyStrict]
----*/
-
-function testcase() {
-        var err = null;
-        var blah = arguments;
-        try {
-            eval("(arguments) = 20;");
-        } catch (e) {
-            err = e;
-        }
-        assert(err instanceof SyntaxError, 'err instanceof SyntaxError');
-        assert.sameValue(blah, arguments, 'blah');
-}
-testcase();
diff --git a/test/language/expressions/assignment/S11.13.1_A1.js b/test/language/expressions/assignment/S11.13.1_A1.js
deleted file mode 100644
index 621a501505..0000000000
--- a/test/language/expressions/assignment/S11.13.1_A1.js
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright 2009 the Sputnik authors.  All rights reserved.
-// This code is governed by the BSD license found in the LICENSE file.
-
-/*---
-info: >
-    White Space and Line Terminator between LeftHandSideExpression and "=" or
-    between "=" and AssignmentExpression are allowed
-es5id: 11.13.1_A1
-description: Checking by using eval
-flags: [noStrict]
----*/
-
-//CHECK#1
-if ((eval("x\u0009=\u0009true")) !== true) {
-  $ERROR('#1: (x\\u0009=\\u0009true) === true');
-}
-
-//CHECK#2
-if ((eval("x\u000B=\u000Btrue")) !== true) {
-  $ERROR('#2: (x\\u000B=\\u000Btrue) === true');
-}
-
-//CHECK#3
-if ((eval("x\u000C=\u000Ctrue")) !== true) {
-  $ERROR('#3: (x\\u000C=\\u000Ctrue) === true');
-}
-
-//CHECK#4
-if ((eval("x\u0020=\u0020true")) !== true) {
-  $ERROR('#4: (x\\u0020=\\u0020true) === true');
-}
-
-//CHECK#5
-if ((eval("x\u00A0=\u00A0true")) !== true) {
-  $ERROR('#5: (x\\u00A0=\\u00A0true) === true');
-}
-
-//CHECK#6
-if ((eval("x\u000A=\u000Atrue")) !== true) {
-  $ERROR('#6: (x\\u000A=\\u000Atrue) === true');
-}
-
-//CHECK#7
-if ((eval("x\u000D=\u000Dtrue")) !== true) {
-  $ERROR('#7: (x\\u000D=\\u000Dtrue) === true');
-}
-
-//CHECK#8
-if ((eval("x\u2028=\u2028true")) !== true) {
-  $ERROR('#8: (x\\u2028=\\u2028true) === true');
-}
-
-//CHECK#9
-if ((eval("x\u2029=\u2029true")) !== true) {
-  $ERROR('#9: (x\\u2029=\\u2029true) === true');
-}
-
-
-//CHECK#10
-if ((eval("x\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029=\u0009\u000B\u000C\u0020\u00A0\u000A\u000D\u2028\u2029true")) !== true) {
-  $ERROR('#10: (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000A\\u000D\\u2028\\u2029true) === true');
-}
diff --git a/test/language/expressions/assignment/id-arguments-strict.js b/test/language/expressions/assignment/id-arguments-strict.js
new file mode 100644
index 0000000000..6425c52c30
--- /dev/null
+++ b/test/language/expressions/assignment/id-arguments-strict.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es5id: 11.13.1-4-30-s
+description: >
+  Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears as
+  the LeftHandSideExpression (PrimaryExpression) of simple assignment(=).
+negative:
+  phase: early
+  type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+(arguments) = 20;
diff --git a/test/language/expressions/assignment/id-eval-strict.js b/test/language/expressions/assignment/id-eval-strict.js
new file mode 100644
index 0000000000..b1ddcc19bc
--- /dev/null
+++ b/test/language/expressions/assignment/id-eval-strict.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es5id: 11.13.1-4-30-s
+description: >
+  Strict Mode - SyntaxError is thrown if the identifier 'eval' appears as the
+  LeftHandSideExpression (PrimaryExpression) of simple assignment(=).
+negative:
+  phase: early
+  type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+(eval) = 20;
diff --git a/test/language/expressions/assignment/line-terminator.js b/test/language/expressions/assignment/line-terminator.js
new file mode 100644
index 0000000000..61f29c1ef0
--- /dev/null
+++ b/test/language/expressions/assignment/line-terminator.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: >
+    White Space between LeftHandSideExpression and "=" or between "=" and
+    AssignmentExpression is allowed
+es5id: 11.13.1_A1
+---*/
+
+var x;
+
+x
+=
+true;
+
+if (x !== true) {
+  $ERROR('#6: (x\\u000A=\\u000Atrue) === true');
+}
diff --git a/test/language/expressions/assignment/white-space.js b/test/language/expressions/assignment/white-space.js
new file mode 100644
index 0000000000..a9ecdc6d43
--- /dev/null
+++ b/test/language/expressions/assignment/white-space.js
@@ -0,0 +1,55 @@
+// Copyright 2009 the Sputnik authors.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: >
+    White Space between LeftHandSideExpression and "=" or between "=" and
+    AssignmentExpression is allowed
+es5id: 11.13.1_A1
+---*/
+
+var x;
+
+x	=	'U+0009';
+if (x !== 'U+0009') {
+  $ERROR('#1: (x\\u0009=\\u0009true) === true');
+}
+
+x='U+000B';
+if (x !== 'U+000B') {
+  $ERROR('#2: (x\\u000B=\\u000Btrue) === true');
+}
+
+x='U+000C';
+if (x !== 'U+000C') {
+  $ERROR('#3: (x\\u000C=\\u000Ctrue) === true');
+}
+
+x = 'U+0020';
+if (x !== 'U+0020') {
+  $ERROR('#4: (x\\u0020=\\u0020true) === true');
+}
+
+x = 'U+00A0';
+if (x !== 'U+00A0') {
+  $ERROR('#5: (x\\u00A0=\\u00A0true) === true');
+}
+
+x
=
'U+000D';
+if (x !== 'U+000D') {
+  $ERROR('#7: (x\\u000D=\\u000Dtrue) === true');
+}
+
+x
=
'U+2028';
+if (x !== 'U+2028') {
+  $ERROR('#8: (x\\u2028=\\u2028true) === true');
+}
+
+x
=
'U+2029';
+if (x !== 'U+2029') {
+  $ERROR('#9: (x\\u2029=\\u2029true) === true');
+}
+
+x	  


=	  


'U+0009U+000BU+000CU+0020U+00A0U+000DU+2028U+2029';
+if (x !== 'U+0009U+000BU+000CU+0020U+00A0U+000DU+2028U+2029') {
+  $ERROR('#10: (x\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000D\\u2028\\u2029=\\u0009\\u000B\\u000C\\u0020\\u00A0\\u000D\\u2028\\u2029true) === true');
+}
diff --git a/test/language/statements/variable/id-arguments-strict.js b/test/language/statements/variable/id-arguments-strict.js
new file mode 100644
index 0000000000..66e099ef08
--- /dev/null
+++ b/test/language/statements/variable/id-arguments-strict.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es5id: 11.13.1-4-28-s
+description: >
+  Strict Mode - SyntaxError is thrown if the identifier 'arguments' appears
+  as the LeftHandSideExpression of simple assignment(=) under strict mode
+negative:
+  phase: early
+  type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+var arguments;
diff --git a/test/language/statements/variable/id-eval-strict.js b/test/language/statements/variable/id-eval-strict.js
new file mode 100644
index 0000000000..a9e6c48250
--- /dev/null
+++ b/test/language/statements/variable/id-eval-strict.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es5id: 11.13.1-4-28-s
+description: >
+  Strict Mode - SyntaxError is thrown if the identifier 'eval' appears as the
+  LeftHandSideExpression of simple assignment(=) under strict mode
+negative:
+  phase: early
+  type: SyntaxError
+flags: [onlyStrict]
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+var eval;
-- 
GitLab