b581111231000765626b22c1d463b9cfacd75396
[WebKit-https.git] / LayoutTests / js / script-tests / class-syntax-expression.js
1
2 description('Tests for ES6 class syntax expressions');
3
4 var constructorCallCount = 0;
5 const staticMethodValue = [1];
6 const instanceMethodValue = [2];
7 const getterValue = [3];
8 var setterValue = undefined;
9 var A = class {
10     constructor() { constructorCallCount++; }
11     static someStaticMethod() { return staticMethodValue; }
12     someInstanceMethod() { return instanceMethodValue; }
13     get someGetter() { return getterValue; }
14     set someSetter(value) { setterValue = value; }
15 };
16
17 shouldBe("constructorCallCount", "0");
18 shouldBe("A.someStaticMethod()", "staticMethodValue");
19 shouldBe("(new A).someInstanceMethod()", "instanceMethodValue");
20 shouldBe("constructorCallCount", "1");
21 shouldBe("(new A).someGetter", "getterValue");
22 shouldBe("constructorCallCount", "2");
23 shouldBe("(new A).someGetter", "getterValue");
24 shouldBe("setterValue", "undefined");
25 shouldNotThrow("(new A).someSetter = 789");
26 shouldBe("setterValue", "789");
27 shouldBe("(new A).__proto__", "A.prototype");
28 shouldBe("A.prototype.constructor", "A");
29
30 shouldThrow("x = class", "'SyntaxError: Unexpected end of script'");
31 shouldThrow("x = class {", "'SyntaxError: Unexpected end of script'");
32 shouldThrow("x = class { ( }", "'SyntaxError: Unexpected token \\'(\\'. Expected an identifier.'");
33 shouldNotThrow("x = class {}");
34 shouldThrow("x = class { constructor() {} constructor() {} }", "'SyntaxError: Cannot declare multiple constructors in a single class.'");
35 shouldNotThrow("x = class { constructor() {} static constructor() { return staticMethodValue; } }");
36 shouldBe("x.constructor()", "staticMethodValue");
37 shouldThrow("x = class { constructor() {} static prototype() {} }", "'SyntaxError: Cannot declare a static method named \\'prototype\\'.'");
38 shouldNotThrow("x = class { constructor() {} prototype() { return instanceMethodValue; } }");
39 shouldBe("(new x).prototype()", "instanceMethodValue");
40
41 var successfullyParsed = true;