From baa5d94bc502db0c9caf8e6d39bba24773160b58 Mon Sep 17 00:00:00 2001
From: Mike Pennisi <mike@mikepennisi.com>
Date: Sat, 20 Jan 2018 23:56:35 -0500
Subject: [PATCH] Refactor object initializer tests for parsers

A number of tests for the parsing of object initializers 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.
---
 .../expressions/object/11.1.5-4-4-a-1-s.js    | 10 --------
 ...-2-2-s.js => getter-body-strict-inside.js} | 21 ++++++++---------
 ...2-1-s.js => getter-body-strict-outside.js} | 20 ++++++++--------
 ...1.1.5_4-4-a-2.js => prop-dup-data-data.js} |  5 +++-
 ...11.1.5_4-4-b-2.js => prop-dup-data-set.js} |  5 +++-
 ...11.1.5_4-4-c-1.js => prop-dup-get-data.js} |  5 +++-
 ...{11.1.5_4-4-d-1.js => prop-dup-get-get.js} |  5 +++-
 ...1.5_4-4-d-3.js => prop-dup-get-set-get.js} |  6 ++++-
 ...11.1.5_4-4-c-2.js => prop-dup-set-data.js} |  5 +++-
 ...1.5_4-4-d-4.js => prop-dup-set-get-set.js} |  6 ++++-
 ...{11.1.5_4-4-d-2.js => prop-dup-set-set.js} |  5 +++-
 ...-2-2-s.js => setter-body-strict-inside.js} | 23 +++++++++----------
 ...2-1-s.js => setter-body-strict-outside.js} | 20 ++++++++--------
 ...> setter-param-arguments-strict-inside.js} | 13 +++++++----
 ... setter-param-arguments-strict-outside.js} | 11 +++++----
 ....js => setter-param-eval-strict-inside.js} | 13 +++++++----
 ...js => setter-param-eval-strict-outside.js} | 11 +++++----
 17 files changed, 105 insertions(+), 79 deletions(-)
 delete mode 100644 test/language/expressions/object/11.1.5-4-4-a-1-s.js
 rename test/language/expressions/object/{11.1.5_6-2-2-s.js => getter-body-strict-inside.js} (55%)
 rename test/language/expressions/object/{11.1.5_6-2-1-s.js => getter-body-strict-outside.js} (55%)
 rename test/language/expressions/object/{11.1.5_4-4-a-2.js => prop-dup-data-data.js} (95%)
 rename test/language/expressions/object/{11.1.5_4-4-b-2.js => prop-dup-data-set.js} (89%)
 rename test/language/expressions/object/{11.1.5_4-4-c-1.js => prop-dup-get-data.js} (89%)
 rename test/language/expressions/object/{11.1.5_4-4-d-1.js => prop-dup-get-get.js} (86%)
 rename test/language/expressions/object/{11.1.5_4-4-d-3.js => prop-dup-get-set-get.js} (81%)
 rename test/language/expressions/object/{11.1.5_4-4-c-2.js => prop-dup-set-data.js} (89%)
 rename test/language/expressions/object/{11.1.5_4-4-d-4.js => prop-dup-set-get-set.js} (80%)
 rename test/language/expressions/object/{11.1.5_4-4-d-2.js => prop-dup-set-set.js} (84%)
 rename test/language/expressions/object/{11.1.5_7-2-2-s.js => setter-body-strict-inside.js} (51%)
 rename test/language/expressions/object/{11.1.5_7-2-1-s.js => setter-body-strict-outside.js} (51%)
 rename test/language/expressions/object/{11.1.5-4-s.js => setter-param-arguments-strict-inside.js} (70%)
 rename test/language/expressions/object/{11.1.5-2-s.js => setter-param-arguments-strict-outside.js} (73%)
 rename test/language/expressions/object/{11.1.5-3-s.js => setter-param-eval-strict-inside.js} (71%)
 rename test/language/expressions/object/{11.1.5-1-s.js => setter-param-eval-strict-outside.js} (74%)

diff --git a/test/language/expressions/object/11.1.5-4-4-a-1-s.js b/test/language/expressions/object/11.1.5-4-4-a-1-s.js
deleted file mode 100644
index 6d3c6b353d..0000000000
--- a/test/language/expressions/object/11.1.5-4-4-a-1-s.js
+++ /dev/null
@@ -1,10 +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.1.5-4-4-a-1-s
-description: >
-    Object literal - No SyntaxError for duplicate data property names
----*/
-
-  eval("({foo:0,foo:1});");
diff --git a/test/language/expressions/object/11.1.5_6-2-2-s.js b/test/language/expressions/object/getter-body-strict-inside.js
similarity index 55%
rename from test/language/expressions/object/11.1.5_6-2-2-s.js
rename to test/language/expressions/object/getter-body-strict-inside.js
index 9ae348ff54..279175dfd9 100644
--- a/test/language/expressions/object/11.1.5_6-2-2-s.js
+++ b/test/language/expressions/object/getter-body-strict-inside.js
@@ -1,23 +1,22 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
 es5id: 11.1.5_6-2-2-s
 description: >
     Strict Mode - SyntaxError is thrown when an assignment to a
     reserved word or a future reserved word is made inside a strict
     mode FunctionBody of a PropertyAssignment
+negative:
+  type: SyntaxError
+  phase: parse
 flags: [noStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
 
-assert.throws(SyntaxError, function() {
-            eval("var obj = {\
-                get _11_1_5_6_2_2() {\
-                   \"use strict\";\
-                   public = 42;\
-                   return public;\
-                }\
-            };\
-            var _11_1_5_6_2_2 = obj._11_1_5_6_2_2;");
-});
+void {
+  get x() {
+    "use strict";
+    public = 42;
+  }
+};
diff --git a/test/language/expressions/object/11.1.5_6-2-1-s.js b/test/language/expressions/object/getter-body-strict-outside.js
similarity index 55%
rename from test/language/expressions/object/11.1.5_6-2-1-s.js
rename to test/language/expressions/object/getter-body-strict-outside.js
index 65035c0eac..aaf13120c0 100644
--- a/test/language/expressions/object/11.1.5_6-2-1-s.js
+++ b/test/language/expressions/object/getter-body-strict-outside.js
@@ -1,22 +1,20 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
 es5id: 11.1.5_6-2-1-s
 description: >
     Strict Mode - SyntaxError is thrown when an assignment to a
     reserved word or a future reserved word is contained in strict code
+negative:
+  type: SyntaxError
+  phase: parse
 flags: [onlyStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
 
-assert.throws(SyntaxError, function() {
-            eval("var obj = {\
-                get _11_1_5_6_2_1() {\
-                   public = 42;\
-                   return public;\
-                }\
-            };");
-
-            var _11_1_5_6_2_1 = obj._11_1_5_6_2_1;
-});
+void {
+  get x() {
+    public = 42;
+  }
+};
diff --git a/test/language/expressions/object/11.1.5_4-4-a-2.js b/test/language/expressions/object/prop-dup-data-data.js
similarity index 95%
rename from test/language/expressions/object/11.1.5_4-4-a-2.js
rename to test/language/expressions/object/prop-dup-data-data.js
index 743b075e31..58ed692524 100644
--- a/test/language/expressions/object/11.1.5_4-4-a-2.js
+++ b/test/language/expressions/object/prop-dup-data-data.js
@@ -14,4 +14,7 @@ description: >
     strict mode
 ---*/
 
-  eval("({foo:0,foo:1});");
+void {
+  foo: 0,
+  foo: 1
+};
diff --git a/test/language/expressions/object/11.1.5_4-4-b-2.js b/test/language/expressions/object/prop-dup-data-set.js
similarity index 89%
rename from test/language/expressions/object/11.1.5_4-4-b-2.js
rename to test/language/expressions/object/prop-dup-data-set.js
index 03b0c3a556..5022d4a822 100644
--- a/test/language/expressions/object/11.1.5_4-4-b-2.js
+++ b/test/language/expressions/object/prop-dup-data-set.js
@@ -8,4 +8,7 @@ description: >
     followed by set accessor definition with the same name
 ---*/
 
-  eval("({foo : 1, set foo(x){}});");
+void {
+  foo: 1,
+  set foo(x) {}
+};
diff --git a/test/language/expressions/object/11.1.5_4-4-c-1.js b/test/language/expressions/object/prop-dup-get-data.js
similarity index 89%
rename from test/language/expressions/object/11.1.5_4-4-c-1.js
rename to test/language/expressions/object/prop-dup-get-data.js
index 4923c9411c..6f073c6047 100644
--- a/test/language/expressions/object/11.1.5_4-4-c-1.js
+++ b/test/language/expressions/object/prop-dup-get-data.js
@@ -8,4 +8,7 @@ description: >
     is followed by a data property definition with the same name
 ---*/
 
-  eval("({get foo(){}, foo : 1});");
+void {
+  get foo() {},
+  foo: 1
+};
diff --git a/test/language/expressions/object/11.1.5_4-4-d-1.js b/test/language/expressions/object/prop-dup-get-get.js
similarity index 86%
rename from test/language/expressions/object/11.1.5_4-4-d-1.js
rename to test/language/expressions/object/prop-dup-get-get.js
index c9d0f2d25f..a31c65557d 100644
--- a/test/language/expressions/object/11.1.5_4-4-d-1.js
+++ b/test/language/expressions/object/prop-dup-get-get.js
@@ -6,4 +6,7 @@ es5id: 11.1.5_4-4-d-1
 description: Object literal - No SyntaxError for duplicate property name (get,get)
 ---*/
 
-  eval("({get foo(){}, get foo(){}});");
+void {
+  get foo() {},
+  get foo() {}
+};
diff --git a/test/language/expressions/object/11.1.5_4-4-d-3.js b/test/language/expressions/object/prop-dup-get-set-get.js
similarity index 81%
rename from test/language/expressions/object/11.1.5_4-4-d-3.js
rename to test/language/expressions/object/prop-dup-get-set-get.js
index 306ceeb5bb..3987448c63 100644
--- a/test/language/expressions/object/11.1.5_4-4-d-3.js
+++ b/test/language/expressions/object/prop-dup-get-set-get.js
@@ -8,4 +8,8 @@ description: >
     (get,set,get)
 ---*/
 
-  eval("({get foo(){}, set foo(arg){}, get foo(){}});");
+void {
+  get foo() {},
+  set foo(arg) {},
+  get foo() {}
+};
diff --git a/test/language/expressions/object/11.1.5_4-4-c-2.js b/test/language/expressions/object/prop-dup-set-data.js
similarity index 89%
rename from test/language/expressions/object/11.1.5_4-4-c-2.js
rename to test/language/expressions/object/prop-dup-set-data.js
index 45c121821d..c4fe786efe 100644
--- a/test/language/expressions/object/11.1.5_4-4-c-2.js
+++ b/test/language/expressions/object/prop-dup-set-data.js
@@ -8,4 +8,7 @@ description: >
     is followed by a data property definition with the same name
 ---*/
 
-  eval("({set foo(x){}, foo : 1});");
+void {
+  set foo(x) {},
+  foo: 1
+};
diff --git a/test/language/expressions/object/11.1.5_4-4-d-4.js b/test/language/expressions/object/prop-dup-set-get-set.js
similarity index 80%
rename from test/language/expressions/object/11.1.5_4-4-d-4.js
rename to test/language/expressions/object/prop-dup-set-get-set.js
index 83c9645b88..d5ebc514bc 100644
--- a/test/language/expressions/object/11.1.5_4-4-d-4.js
+++ b/test/language/expressions/object/prop-dup-set-get-set.js
@@ -8,4 +8,8 @@ description: >
     (set,get,set)
 ---*/
 
-  eval("({set foo(arg){}, get foo(){}, set foo(arg1){}});");
+void {
+  set foo(arg) {},
+  get foo() {},
+  set foo(arg1) {}
+};
diff --git a/test/language/expressions/object/11.1.5_4-4-d-2.js b/test/language/expressions/object/prop-dup-set-set.js
similarity index 84%
rename from test/language/expressions/object/11.1.5_4-4-d-2.js
rename to test/language/expressions/object/prop-dup-set-set.js
index 14e52d0dcd..6962147373 100644
--- a/test/language/expressions/object/11.1.5_4-4-d-2.js
+++ b/test/language/expressions/object/prop-dup-set-set.js
@@ -6,4 +6,7 @@ es5id: 11.1.5_4-4-d-2
 description: Object literal - No SyntaxError for duplicate property name (set,set)
 ---*/
 
-  eval("({set foo(arg){}, set foo(arg1){}});");
+void {
+  set foo(arg) {},
+  set foo(arg1) {}
+};
diff --git a/test/language/expressions/object/11.1.5_7-2-2-s.js b/test/language/expressions/object/setter-body-strict-inside.js
similarity index 51%
rename from test/language/expressions/object/11.1.5_7-2-2-s.js
rename to test/language/expressions/object/setter-body-strict-inside.js
index 08cfe79dfc..56e776a04f 100644
--- a/test/language/expressions/object/11.1.5_7-2-2-s.js
+++ b/test/language/expressions/object/setter-body-strict-inside.js
@@ -1,23 +1,22 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
 es5id: 11.1.5_7-2-2-s
 description: >
     Strict Mode - SyntaxError is thrown when an assignment to a
     reserved word is made in  a strict FunctionBody of a
     PropertyAssignment
-flags: [onlyStrict]
+negative:
+  type: SyntaxError
+  phase: parse
+flags: [noStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
 
-assert.throws(SyntaxError, function() {
-            eval("var data = \"data\";\
-            var obj = {\
-                set _11_1_5_7_2_2(value) {\
-                    public = 42;\
-                    data = value;\
-                }\
-            };\
-            obj._11_1_5_7_2_2 = 1;");
-});
+void {
+  set x(value) {
+    "use strict";
+    public = 42;
+  }
+};
diff --git a/test/language/expressions/object/11.1.5_7-2-1-s.js b/test/language/expressions/object/setter-body-strict-outside.js
similarity index 51%
rename from test/language/expressions/object/11.1.5_7-2-1-s.js
rename to test/language/expressions/object/setter-body-strict-outside.js
index f716977416..3587afb53c 100644
--- a/test/language/expressions/object/11.1.5_7-2-1-s.js
+++ b/test/language/expressions/object/setter-body-strict-outside.js
@@ -1,22 +1,20 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
 es5id: 11.1.5_7-2-1-s
 description: >
     Strict Mode - SyntaxError is thrown when an assignment to a
     reserved word is contained in strict code
+negative:
+  type: SyntaxError
+  phase: parse
 flags: [onlyStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
 
-assert.throws(SyntaxError, function() {
-            eval("var data = \"data\";\
-            var obj = {\
-                set _11_1_5_7_2_1(value) {\
-                    public = 42;\
-                    data = value;\
-                }\
-            };\
-            obj._11_1_5_7_2_1 = 1;");
-});
+void {
+  set x(value) {
+    public = 42;
+  }
+};
diff --git a/test/language/expressions/object/11.1.5-4-s.js b/test/language/expressions/object/setter-param-arguments-strict-inside.js
similarity index 70%
rename from test/language/expressions/object/11.1.5-4-s.js
rename to test/language/expressions/object/setter-param-arguments-strict-inside.js
index dc16139062..d5a19e5c77 100644
--- a/test/language/expressions/object/11.1.5-4-s.js
+++ b/test/language/expressions/object/setter-param-arguments-strict-inside.js
@@ -1,16 +1,21 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
 es5id: 11.1.5-4-s
 description: >
     Strict Mode - SyntaxError is thrown when 'arguments'  occurs as
     the Identifier in a PropertySetParameterList of a
     PropertyAssignment  if its FunctionBody is strict code
+negative:
+  type: SyntaxError
+  phase: parse
 flags: [noStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
 
-assert.throws(SyntaxError, function() {
-            eval("var obj = {set _11_1_5_4_fun(arguments) {\"use strict\";}};");
-});
+void {
+  set x(arguments) {
+    "use strict";
+  }
+};
diff --git a/test/language/expressions/object/11.1.5-2-s.js b/test/language/expressions/object/setter-param-arguments-strict-outside.js
similarity index 73%
rename from test/language/expressions/object/11.1.5-2-s.js
rename to test/language/expressions/object/setter-param-arguments-strict-outside.js
index 7a4c054df9..1cf1d58c3b 100644
--- a/test/language/expressions/object/11.1.5-2-s.js
+++ b/test/language/expressions/object/setter-param-arguments-strict-outside.js
@@ -1,16 +1,19 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
 es5id: 11.1.5-2-s
 description: >
     Strict Mode - SyntaxError is thrown when 'arguments' occurs as the
     Identifier in a PropertySetParameterList of a PropertyAssignment
     that is contained in strict code
+negative:
+  type: SyntaxError
+  phase: parse
 flags: [onlyStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
 
-assert.throws(SyntaxError, function() {
-            eval("var obj = {set _11_1_5_2_fun(arguments) {} };");
-});
+void {
+  set x(arguments) {}
+};
diff --git a/test/language/expressions/object/11.1.5-3-s.js b/test/language/expressions/object/setter-param-eval-strict-inside.js
similarity index 71%
rename from test/language/expressions/object/11.1.5-3-s.js
rename to test/language/expressions/object/setter-param-eval-strict-inside.js
index 831a801944..f666963945 100644
--- a/test/language/expressions/object/11.1.5-3-s.js
+++ b/test/language/expressions/object/setter-param-eval-strict-inside.js
@@ -1,16 +1,21 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
 es5id: 11.1.5-3-s
 description: >
     Strict Mode - SyntaxError is thrown when  'evals'  occurs as the
     Identifier in a PropertySetParameterList of a PropertyAssignment
     if its FunctionBody is strict code
+negative:
+  type: SyntaxError
+  phase: parse
 flags: [noStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
 
-assert.throws(SyntaxError, function() {
-            eval("var obj = {set _11_1_5_3_fun(eval) { \"use strict\"; }};");
-});
+void {
+  set x(eval) {
+    "use strict";
+  }
+};
diff --git a/test/language/expressions/object/11.1.5-1-s.js b/test/language/expressions/object/setter-param-eval-strict-outside.js
similarity index 74%
rename from test/language/expressions/object/11.1.5-1-s.js
rename to test/language/expressions/object/setter-param-eval-strict-outside.js
index abc491dcbe..d2643f55ba 100644
--- a/test/language/expressions/object/11.1.5-1-s.js
+++ b/test/language/expressions/object/setter-param-eval-strict-outside.js
@@ -1,16 +1,19 @@
 // Copyright (c) 2012 Ecma International.  All rights reserved.
 // This code is governed by the BSD license found in the LICENSE file.
-
 /*---
 es5id: 11.1.5-1-s
 description: >
     Strict Mode - SyntaxError is thrown when 'eval' occurs as the
     Identifier in a PropertySetParameterList of a PropertyAssignment
     that is contained in strict code
+negative:
+  type: SyntaxError
+  phase: parse
 flags: [onlyStrict]
 ---*/
 
+throw "Test262: This statement should not be evaluated.";
 
-assert.throws(SyntaxError, function() {
-            eval("var obj = {set _11_1_5_1_fun(eval) {}};");
-});
+void {
+  set x(eval) {}
+};
-- 
GitLab