ES6 class syntax should use block scoping
[WebKit.git] / LayoutTests / js / script-tests / class-syntax-call.js
1 description('Tests for calling the constructors of ES6 classes');
2
3 class A { constructor() {} };
4 class B extends A { constructor() { super() } };
5
6 function shouldThrow(s, message) {
7     var threw = false;
8     try {
9         eval(s);
10     } catch(e) {
11         threw = true;
12         if (e.toString() === eval(message))
13             testPassed(s + ":::" + message);
14         else
15             testFailed(e.toString() + ":::" + message);
16     }
17     if (!threw)
18         testFailed(s);
19 }
20
21 function shouldNotThrow(s) {
22     var threw = false;
23     try {
24         eval(s);
25     } catch(e) {
26         threw = true;
27     }
28     if (threw)
29         testFailed(s);
30     else
31         testPassed(s);
32 }
33
34 shouldNotThrow('new A');
35 shouldThrow('A()', '"TypeError: Cannot call a class constructor"');
36 shouldNotThrow('new B');
37 shouldThrow('B()', '"TypeError: Cannot call a class constructor"');
38 shouldNotThrow('new (class { constructor() {} })()');
39 shouldThrow('(class { constructor() {} })()', '"TypeError: Cannot call a class constructor"');
40 shouldThrow('new (class extends null { constructor() { super() } })()', '"TypeError: undefined is not an object (evaluating \'super()\')"');
41 shouldThrow('(class extends null { constructor() { super() } })()', '"TypeError: Cannot call a class constructor"');
42
43 var successfullyParsed = true;