ES6 class syntax should use block scoping
[WebKit.git] / LayoutTests / js / script-tests / class-syntax-default-constructor.js
1
2 description('Tests for ES6 class syntax default constructor');
3
4 function shouldThrow(s, message) {
5     var threw = false;
6     try {
7         eval(s);
8     } catch(e) {
9         threw = true;
10         if (!message || e.toString() === eval(message))
11             testPassed(s + ":::" + e.toString());
12         else
13             testFailed(s);
14     }
15     if (!threw)
16         testFailed(s);
17 }
18
19 function shouldBe(a, b) {
20     var r1 = eval(a);
21     var r2 = eval(b)
22     if (r1 === r2)
23         testPassed(a + ":::" + b);
24     else
25         testFailed(r1 + ":::" + r2);
26 }
27
28 function shouldBeTrue(s) {
29     if (eval(s) === true)
30         testPassed(s);
31     else
32         testFailed(s);
33 }
34
35 function assert(b) {
36     if (!b)
37         testFailed("Failed assert");
38     else
39         testPassed("Passed assert");
40 }
41
42 class A { };
43 class B extends A { };
44
45 shouldBeTrue('new A instanceof A');
46 shouldThrow('A()', '"TypeError: Cannot call a class constructor"');
47 shouldBeTrue('A.prototype.constructor instanceof Function');
48 shouldBe('A.prototype.constructor.name', '"A"');
49 shouldBeTrue('new B instanceof A; new B instanceof A');
50 shouldThrow('B()', '"TypeError: Cannot call a class constructor"');
51 shouldBe('B.prototype.constructor.name', '"B"');
52 shouldBeTrue('A !== B');
53 shouldBeTrue('A.prototype.constructor !== B.prototype.constructor');
54 var result = new (class extends (class { constructor(a, b) { return [a, b]; } }) {})(1, 2);
55 assert(result[0] === 1);
56 assert(result[1] === 2);
57
58
59 var successfullyParsed = true;