From f8c4f381df24d53eac331b8efc8cdedfe265d564 Mon Sep 17 00:00:00 2001
From: Valerie R Young <valerie@bocoup.com>
Date: Wed, 25 Oct 2017 12:56:00 -0400
Subject: [PATCH] classfields: add tests for early error delete private field

---
 .../call-expression-privatename.case          | 18 ++++++++++
 .../cls-decl-field-delete-covered.template    | 29 ++++++++++++++++
 ...s-decl-field-delete-twice-covered.template | 30 +++++++++++++++++
 .../cls-decl-field-delete.template            | 27 +++++++++++++++
 .../cls-decl-method-delete-covered.template   | 33 +++++++++++++++++++
 ...-decl-method-delete-twice-covered.template | 33 +++++++++++++++++++
 .../cls-decl-method-delete.template           | 31 +++++++++++++++++
 .../cls-expr-field-delete-covered.template    | 30 +++++++++++++++++
 ...s-expr-field-delete-twice-covered.template | 30 +++++++++++++++++
 .../cls-expr-field-delete.template            | 28 ++++++++++++++++
 .../cls-expr-method-delete-covered.template   | 33 +++++++++++++++++++
 ...-expr-method-delete-twice-covered.template | 33 +++++++++++++++++++
 .../cls-expr-method-delete.template           | 31 +++++++++++++++++
 .../member-expression-privatename.case        | 10 ++++++
 14 files changed, 396 insertions(+)
 create mode 100644 src/class-fields/call-expression-privatename.case
 create mode 100644 src/class-fields/delete-error/cls-decl-field-delete-covered.template
 create mode 100644 src/class-fields/delete-error/cls-decl-field-delete-twice-covered.template
 create mode 100644 src/class-fields/delete-error/cls-decl-field-delete.template
 create mode 100644 src/class-fields/delete-error/cls-decl-method-delete-covered.template
 create mode 100644 src/class-fields/delete-error/cls-decl-method-delete-twice-covered.template
 create mode 100644 src/class-fields/delete-error/cls-decl-method-delete.template
 create mode 100644 src/class-fields/delete-error/cls-expr-field-delete-covered.template
 create mode 100644 src/class-fields/delete-error/cls-expr-field-delete-twice-covered.template
 create mode 100644 src/class-fields/delete-error/cls-expr-field-delete.template
 create mode 100644 src/class-fields/delete-error/cls-expr-method-delete-covered.template
 create mode 100644 src/class-fields/delete-error/cls-expr-method-delete-twice-covered.template
 create mode 100644 src/class-fields/delete-error/cls-expr-method-delete.template
 create mode 100644 src/class-fields/member-expression-privatename.case

diff --git a/src/class-fields/call-expression-privatename.case b/src/class-fields/call-expression-privatename.case
new file mode 100644
index 0000000000..a00e9616c9
--- /dev/null
+++ b/src/class-fields/call-expression-privatename.case
@@ -0,0 +1,18 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Syntax error if you call delete on call expressions . privatename
+template: delete-error
+---*/
+
+//- infieldsetup
+g = this.f;
+//- infunctionsetup
+var g = this.f;
+//- expression
+g().#x
+//- functiondeclaration
+  f() {
+  return this;
+}
diff --git a/src/class-fields/delete-error/cls-decl-field-delete-covered.template b/src/class-fields/delete-error/cls-decl-field-delete-covered.template
new file mode 100644
index 0000000000..0d5bec7303
--- /dev/null
+++ b/src/class-fields/delete-error/cls-decl-field-delete-covered.template
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/statements/class/err-field-delete-covered-
+name: in field, covered
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+
+    It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+class C {
+  #x;
+  /*{ infieldsetup }*/
+  x = delete (/*{ expression }*/);
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-decl-field-delete-twice-covered.template b/src/class-fields/delete-error/cls-decl-field-delete-twice-covered.template
new file mode 100644
index 0000000000..917cd411a7
--- /dev/null
+++ b/src/class-fields/delete-error/cls-decl-field-delete-twice-covered.template
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/statements/class/err-field-delete-twice-covered-
+name: in field, recursively covered
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+
+    It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+class C {
+  #x;
+  /*{ infieldsetup }*/
+  x = delete ((/*{ expression }*/));
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-decl-field-delete.template b/src/class-fields/delete-error/cls-decl-field-delete.template
new file mode 100644
index 0000000000..68cf7615bd
--- /dev/null
+++ b/src/class-fields/delete-error/cls-decl-field-delete.template
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/statements/class/err-field-delete-
+name: in field
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+class C {
+  #x;
+  /*{ infieldsetup }*/
+  x = delete /*{ expression }*/;
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-decl-method-delete-covered.template b/src/class-fields/delete-error/cls-decl-method-delete-covered.template
new file mode 100644
index 0000000000..2b0200d2c6
--- /dev/null
+++ b/src/class-fields/delete-error/cls-decl-method-delete-covered.template
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/statements/class/err-method-delete-covered-
+name: in method, covered
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+
+    It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+class C {
+  #x;
+
+  x() {
+    /*{ infunctionsetup }*/
+    delete (/*{ expression }*/);
+  }
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-decl-method-delete-twice-covered.template b/src/class-fields/delete-error/cls-decl-method-delete-twice-covered.template
new file mode 100644
index 0000000000..f39de82a41
--- /dev/null
+++ b/src/class-fields/delete-error/cls-decl-method-delete-twice-covered.template
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/statements/class/err-method-delete-twice-covered-
+name: in method, recursively covered
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+
+    It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+class C {
+  #x;
+
+  x() {
+    /*{ infunctionsetup }*/
+    delete ((/*{ expression }*/));
+  }
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-decl-method-delete.template b/src/class-fields/delete-error/cls-decl-method-delete.template
new file mode 100644
index 0000000000..1f267683f7
--- /dev/null
+++ b/src/class-fields/delete-error/cls-decl-method-delete.template
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/statements/class/err-method-delete-
+name: in method
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+class C {
+  #x;
+
+  x() {
+    /*{ infunctionsetup }*/
+    delete /*{ expression }*/;
+  }
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-expr-field-delete-covered.template b/src/class-fields/delete-error/cls-expr-field-delete-covered.template
new file mode 100644
index 0000000000..bf3af2a6cb
--- /dev/null
+++ b/src/class-fields/delete-error/cls-expr-field-delete-covered.template
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/expressions/class/err-field-delete-covered-
+name: in field, covered
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+
+    It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  #x;
+  /*{ infieldsetup }*/
+  x = delete (/*{ expression }*/);
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-expr-field-delete-twice-covered.template b/src/class-fields/delete-error/cls-expr-field-delete-twice-covered.template
new file mode 100644
index 0000000000..595b706dcb
--- /dev/null
+++ b/src/class-fields/delete-error/cls-expr-field-delete-twice-covered.template
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/expressions/class/err-field-delete-twice-covered-
+name: in field, recursively covered
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+
+    It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  #x;
+  /*{ infieldsetup }*/
+  x = delete ((/*{ expression }*/));
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-expr-field-delete.template b/src/class-fields/delete-error/cls-expr-field-delete.template
new file mode 100644
index 0000000000..29eea4fcf3
--- /dev/null
+++ b/src/class-fields/delete-error/cls-expr-field-delete.template
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/expressions/class/err-field-delete-
+name: in field
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  #x;
+  /*{ infieldsetup }*/
+  x = delete /*{ expression }*/;
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-expr-method-delete-covered.template b/src/class-fields/delete-error/cls-expr-method-delete-covered.template
new file mode 100644
index 0000000000..41ebc0e3bb
--- /dev/null
+++ b/src/class-fields/delete-error/cls-expr-method-delete-covered.template
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/expressions/class/err-method-delete-covered-
+name: in method, covered
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+
+    It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  #x;
+
+  x() {
+    /*{ infunctionsetup }*/
+    delete (/*{ expression }*/);
+  }
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-expr-method-delete-twice-covered.template b/src/class-fields/delete-error/cls-expr-method-delete-twice-covered.template
new file mode 100644
index 0000000000..f456e7c7ca
--- /dev/null
+++ b/src/class-fields/delete-error/cls-expr-method-delete-twice-covered.template
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/expressions/class/err-method-delete-twice-covered-
+name: in method, recursively covered
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+
+    It is a Syntax Error if the derived UnaryExpression is PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList and CoverParenthesizedExpressionAndArrowParameterList ultimately derives a phrase that, if used in place of UnaryExpression, would produce a Syntax Error according to these rules. This rule is recursively applied.
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  #x;
+
+  x() {
+    /*{ infunctionsetup }*/
+    delete ((/*{ expression }*/));
+  }
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/delete-error/cls-expr-method-delete.template b/src/class-fields/delete-error/cls-expr-method-delete.template
new file mode 100644
index 0000000000..c80c0faa00
--- /dev/null
+++ b/src/class-fields/delete-error/cls-expr-method-delete.template
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-class-definitions-static-semantics-early-errors
+path: language/expressions/class/err-method-delete-
+name: in method
+info: |
+  Static Semantics: Early Errors
+
+    UnaryExpression : delete UnaryExpression
+
+    It is a Syntax Error if the UnaryExpression is contained in strict mode code and the derived UnaryExpression is PrimaryExpression : IdentifierReference , MemberExpression : MemberExpression.PrivateName , or CallExpression : CallExpression.PrivateName .
+features: [class-fields]
+negative:
+  type: SyntaxError
+  phase: early
+---*/
+
+throw "Test262: This statement should not be evaluated.";
+
+var C = class {
+  #x;
+
+  x() {
+    /*{ infunctionsetup }*/
+    delete /*{ expression }*/;
+  }
+
+  /*{ functiondeclaration }*/
+}
diff --git a/src/class-fields/member-expression-privatename.case b/src/class-fields/member-expression-privatename.case
new file mode 100644
index 0000000000..595cdcea75
--- /dev/null
+++ b/src/class-fields/member-expression-privatename.case
@@ -0,0 +1,10 @@
+// Copyright (C) 2017 Valerie Young. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Syntax error if you call delete on member expressions . privatename
+template: delete-error
+---*/
+
+//- expression
+this.#x
-- 
GitLab