ToT WebKit crashes while loading ES6 compatibility table
[WebKit-https.git] / LayoutTests / js / script-tests / class-syntax-string-and-numeric-names.js
1 description('Tests for string and numeric method names for ES6 class syntax');
2
3 shouldBe("constructorCallCount = 0; new (class { \"constructor\"() { constructorCallCount++; } }); constructorCallCount", "1");
4 shouldBe("class A { 'constructor'() { constructorCallCount++; } }; new A; constructorCallCount", "2");
5 shouldThrow("new (class { constructor() {} \"constructor\"() {} });", "'SyntaxError: Cannot declare multiple constructors in a single class.'");
6 shouldThrow("new (class { constructor() {} static \"prototype\"() {} });", "'SyntaxError: Cannot declare a static method named \\'prototype\\'.'");
7
8 shouldBe("class A { 'foo'() { return 3; } }; (new A).foo()", "3");
9
10 shouldBe("class A { get 'foo'() { return 4; } }; (new A).foo", "4");
11 shouldBe("class A { get 'foo'() { return 4; } }; A.foo", "undefined");
12 shouldBe("class A { static get 'foo'() { return 5; } }; A.foo", "5");
13 shouldBe("class A { static get 'foo'() { return 5; } }; (new A).foo", "undefined");
14
15 shouldBe("fooValue = 0; X = class { set 'foo'(value) { fooValue = value; } }; (new X).foo = 6; fooValue", "6");
16 shouldBe("X.foo = 7; fooValue", "6");
17 shouldBe("fooValue = 0; X = class { static set 'foo'(value) { fooValue = value; } }; X.foo = 8; fooValue", "8");
18 shouldBe("(new X).foo = 7; fooValue", "8");
19
20 shouldBe("X = class { get 'foo'() { return 9 } set 'foo'(x) { } }; x = new X; x.foo", "9");
21 shouldBe("X.foo", "undefined");
22 shouldBe("fooValue = 0; X = class { get 'foo'() { } set 'foo'(x) { fooValue = x } }; (new X).foo = 9; fooValue", "9");
23 shouldBe("X.foo = 10; fooValue", "9");
24
25 shouldBe("X = class { static set 'foo'(x) { } static get 'foo'() { return 10 } }; X.foo", "10");
26 shouldBe("(new X).foo", "undefined");
27 shouldBe("fooValue = 0; X = class { static set 'foo'(x) { fooValue = x } static get 'foo'() { } }; X.foo = 11; fooValue", "11");
28 shouldBe("(new X).foo = 12; fooValue", "11");
29
30
31 shouldBe("class A { get 0() { return 20; } }; (new A)[0]", "20");
32 shouldBe("class A { get 0() { return 20; } }; A[0]", "undefined");
33 shouldBe("class A { static get 1() { return 21; } }; A[1]", "21");
34 shouldBe("class A { static get 1() { return 21; } }; (new A)[1]", "undefined");
35
36 // FIXME: This test case fails due to webkit.org/b/144252.
37 shouldBe("setterValue = 0; X = class { set 2(x) { setterValue = x; } }; (new X)[2] = 22; setterValue", "22");
38 shouldBe("X[2] = 23; setterValue", "22");
39
40 shouldBe("setterValue = 0; X = class { static set 3(x) { setterValue = x; } }; X[3] = 23; setterValue", "23");
41 shouldBe("(new X)[3] = 23; setterValue", "23");
42
43 shouldBe("X = class { get 4() { return 24 } set 4(x) { } }; x = new X; x[4]", "24");
44 shouldBe("X[4]", "undefined");
45
46 // FIXME: This test case fails due to webkit.org/b/144252.
47 shouldBe("setterValue = 0; X = class { get 5() { } set 5(x) { setterValue = x; } }; (new X)[5] = 25; setterValue", "25");
48 shouldBe("X[5] = 26; setterValue", "25");
49
50 shouldBe("X = class { static set 6(x) { } static get 6() { return 26 } }; X[6]", "26");
51 shouldBe("(new X)[6]", "undefined");
52 shouldBe("setterValue = 0; X = class { static set 7(x) { setterValue = x } static get 7() { } }; X[7] = 27; setterValue", "27");
53 shouldBe("(new X)[7] = 28; setterValue", "27");
54
55 shouldBe("function x() { return class { 'foo bar'() { return 29; } } }; (new (x()))['foo bar']()", "29");
56 shouldBe("function x() { return class { 30() { return 30; } } }; (new (x()))[30]()", "30");