From 35e3f82504bc1e304e0ea778ba50f723a4ff60b1 Mon Sep 17 00:00:00 2001
From: Leo Balter <leonardo.balter@gmail.com>
Date: Wed, 5 Sep 2018 18:31:17 -0400
Subject: [PATCH] Add valid cases for static ctor methods

---
 ...ammar-static-ctor-accessor-meth-valid.case | 25 +++++++++++++++++++
 ...mmar-static-ctor-async-gen-meth-valid.case | 25 +++++++++++++++++++
 .../grammar-static-ctor-async-meth-valid.case | 25 +++++++++++++++++++
 .../grammar-static-ctor-gen-meth-valid.case   | 25 +++++++++++++++++++
 .../grammar-static-ctor-meth-valid.case       | 24 ++++++++++++++++++
 ...rammar-static-private-ctor-meth-valid.case | 16 ++++++++++++
 6 files changed, 140 insertions(+)
 create mode 100644 src/class-elements/grammar-static-ctor-accessor-meth-valid.case
 create mode 100644 src/class-elements/grammar-static-ctor-async-gen-meth-valid.case
 create mode 100644 src/class-elements/grammar-static-ctor-async-meth-valid.case
 create mode 100644 src/class-elements/grammar-static-ctor-gen-meth-valid.case
 create mode 100644 src/class-elements/grammar-static-ctor-meth-valid.case
 create mode 100644 src/class-elements/grammar-static-private-ctor-meth-valid.case

diff --git a/src/class-elements/grammar-static-ctor-accessor-meth-valid.case b/src/class-elements/grammar-static-ctor-accessor-meth-valid.case
new file mode 100644
index 0000000000..d161900eb1
--- /dev/null
+++ b/src/class-elements/grammar-static-ctor-accessor-meth-valid.case
@@ -0,0 +1,25 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Static Accessor Methods can be named constructor
+info: |
+    Class Definitions / Static Semantics: Early Errors
+
+    ClassElement : MethodDefinition
+        It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "constructor" and SpecialMethod of MethodDefinition is true.
+    ClassElement : static MethodDefinition
+        It is a Syntax Error if HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "prototype".
+template: syntax/valid
+---*/
+
+//- elements
+static get constructor() {}
+static set constructor() {}
+constructor() {} // stacks with a valid constructor
+//- teardown
+assert(C.hasOwnProperty('constructor'));
+assert(C.prototype.hasOwnProperty('constructor'));
+assert.notSameValue(C.prototype.constructor, C.constructor);
diff --git a/src/class-elements/grammar-static-ctor-async-gen-meth-valid.case b/src/class-elements/grammar-static-ctor-async-gen-meth-valid.case
new file mode 100644
index 0000000000..78ce1c6952
--- /dev/null
+++ b/src/class-elements/grammar-static-ctor-async-gen-meth-valid.case
@@ -0,0 +1,25 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Static Async Generator Methods can be named constructor
+info: |
+    Class Definitions / Static Semantics: Early Errors
+
+    ClassElement : MethodDefinition
+        It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "constructor" and SpecialMethod of MethodDefinition is true.
+    ClassElement : static MethodDefinition
+        It is a Syntax Error if HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "prototype".
+template: syntax/valid
+features: [async-iteration]
+---*/
+
+//- elements
+static async * constructor() {}
+constructor() {} // stacks with a valid constructor
+//- teardown
+assert(C.hasOwnProperty('constructor'));
+assert(C.prototype.hasOwnProperty('constructor'));
+assert.notSameValue(C.prototype.constructor, C.constructor);
diff --git a/src/class-elements/grammar-static-ctor-async-meth-valid.case b/src/class-elements/grammar-static-ctor-async-meth-valid.case
new file mode 100644
index 0000000000..aafd327455
--- /dev/null
+++ b/src/class-elements/grammar-static-ctor-async-meth-valid.case
@@ -0,0 +1,25 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Static Methods can be named constructor
+info: |
+    Class Definitions / Static Semantics: Early Errors
+
+    ClassElement : MethodDefinition
+        It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "constructor" and SpecialMethod of MethodDefinition is true.
+    ClassElement : static MethodDefinition
+        It is a Syntax Error if HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "prototype".
+template: syntax/valid
+features: [async-functions]
+---*/
+
+//- elements
+static async constructor() {}
+constructor() {} // stacks with a valid constructor
+//- teardown
+assert(C.hasOwnProperty('constructor'));
+assert(C.prototype.hasOwnProperty('constructor'));
+assert.notSameValue(C.prototype.constructor, C.constructor);
diff --git a/src/class-elements/grammar-static-ctor-gen-meth-valid.case b/src/class-elements/grammar-static-ctor-gen-meth-valid.case
new file mode 100644
index 0000000000..33700f8cb8
--- /dev/null
+++ b/src/class-elements/grammar-static-ctor-gen-meth-valid.case
@@ -0,0 +1,25 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Static Generator Methods can be named constructor
+info: |
+    Class Definitions / Static Semantics: Early Errors
+
+    ClassElement : MethodDefinition
+        It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "constructor" and SpecialMethod of MethodDefinition is true.
+    ClassElement : static MethodDefinition
+        It is a Syntax Error if HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "prototype".
+template: syntax/valid
+features: [generators]
+---*/
+
+//- elements
+static * constructor() {}
+constructor() {} // stacks with a valid constructor
+//- teardown
+assert(C.hasOwnProperty('constructor'));
+assert(C.prototype.hasOwnProperty('constructor'));
+assert.notSameValue(C.prototype.constructor, C.constructor);
diff --git a/src/class-elements/grammar-static-ctor-meth-valid.case b/src/class-elements/grammar-static-ctor-meth-valid.case
new file mode 100644
index 0000000000..cbd3f023b9
--- /dev/null
+++ b/src/class-elements/grammar-static-ctor-meth-valid.case
@@ -0,0 +1,24 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Static Methods can be named constructor
+info: |
+    Class Definitions / Static Semantics: Early Errors
+
+    ClassElement : MethodDefinition
+        It is a Syntax Error if PropName of MethodDefinition is not "constructor" and HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "constructor" and SpecialMethod of MethodDefinition is true.
+    ClassElement : static MethodDefinition
+        It is a Syntax Error if HasDirectSuper of MethodDefinition is true.
+        It is a Syntax Error if PropName of MethodDefinition is "prototype".
+template: syntax/valid
+---*/
+
+//- elements
+static constructor() {}
+constructor() {} // stacks with a valid constructor
+//- teardown
+assert(C.hasOwnProperty('constructor'));
+assert(C.prototype.hasOwnProperty('constructor'));
+assert.notSameValue(C.prototype.constructor, C.constructor);
diff --git a/src/class-elements/grammar-static-private-ctor-meth-valid.case b/src/class-elements/grammar-static-private-ctor-meth-valid.case
new file mode 100644
index 0000000000..f4db2766d0
--- /dev/null
+++ b/src/class-elements/grammar-static-private-ctor-meth-valid.case
@@ -0,0 +1,16 @@
+// Copyright (C) 2018 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+desc: Static Methods can be named constructor
+info: |
+    Class Definitions / Static Semantics: Early Errors
+
+    ClassElement : static MethodDefinition
+        It is a Syntax Error if PropName of MethodDefinition is "prototype"
+template: syntax/invalid
+---*/
+
+//- elements
+static constructor() {}
+constructor() {} // stacks with a valid constructor
-- 
GitLab