ES6 class syntax should allow static setters and getters
[WebKit-https.git] / LayoutTests / js / script-tests / class-syntax-declaration.js
index 0289819ab9f0380fbc678d05852bd0e728efa7a6..769688c4eea28509a2d5f86ef3e8bad0502b29d4 100644 (file)
@@ -9,6 +9,8 @@ var setterValue = undefined;
 class A {
     constructor() { constructorCallCount++; }
     static someStaticMethod() { return staticMethodValue; }
+    static get someStaticGetter() { return getterValue; }
+    static set someStaticSetter(value) { setterValue = value; }
     someInstanceMethod() { return instanceMethodValue; }
     get someGetter() { return getterValue; }
     set someSetter(value) { setterValue = value; }
@@ -16,26 +18,36 @@ class A {
 
 shouldBe("constructorCallCount", "0");
 shouldBe("A.someStaticMethod()", "staticMethodValue");
+shouldBe("A.someStaticGetter", "getterValue");
+shouldBe("setterValue = undefined; A.someStaticSetter = 123; setterValue", "123");
 shouldBe("(new A).someInstanceMethod()", "instanceMethodValue");
 shouldBe("constructorCallCount", "1");
 shouldBe("(new A).someGetter", "getterValue");
 shouldBe("constructorCallCount", "2");
 shouldBe("(new A).someGetter", "getterValue");
-shouldBe("setterValue", "undefined");
-shouldNotThrow("(new A).someSetter = 789");
-shouldBe("setterValue", "789");
+shouldBe("setterValue = undefined; (new A).someSetter = 789; setterValue", "789");
 shouldBe("(new A).__proto__", "A.prototype");
 shouldBe("A.prototype.constructor", "A");
 
 shouldThrow("class", "'SyntaxError: Unexpected end of script'");
+shouldThrow("class [", "'SyntaxError: Unexpected token \\'[\\''");
+shouldThrow("class {", "'SyntaxError: Class statements must have a name.'");
 shouldThrow("class X {", "'SyntaxError: Unexpected end of script'");
 shouldThrow("class X { ( }", "'SyntaxError: Unexpected token \\'(\\'. Expected an identifier.'");
 shouldNotThrow("class X {}");
 shouldThrow("class X { constructor() {} constructor() {} }", "'SyntaxError: Cannot declare multiple constructors in a single class.'");
 shouldNotThrow("class X { constructor() {} static constructor() { return staticMethodValue; } }");
-shouldBe("X.constructor()", "staticMethodValue");
+shouldBe("class X { constructor() {} static constructor() { return staticMethodValue; } }; X.constructor()", "staticMethodValue");
 shouldThrow("class X { constructor() {} static prototype() {} }", "'SyntaxError: Cannot declare a static method named \\'prototype\\'.'");
 shouldNotThrow("class X { constructor() {} prototype() { return instanceMethodValue; } }");
-shouldBe("(new X).prototype()", "instanceMethodValue");
+shouldBe("class X { constructor() {} prototype() { return instanceMethodValue; } }; (new X).prototype()", "instanceMethodValue");
+
+shouldNotThrow("class X { constructor() {} set foo(a) {} }");
+shouldNotThrow("class X { constructor() {} set foo({x, y}) {} }");
+shouldThrow("class X { constructor() {} set foo() {} }");
+shouldThrow("class X { constructor() {} set foo(a, b) {} }");
+shouldNotThrow("class X { constructor() {} get foo() {} }");
+shouldThrow("class X { constructor() {} get foo(x) {} }");
+shouldThrow("class X { constructor() {} get foo({x, y}) {} }");
 
 var successfullyParsed = true;