[ES6] "super" and "this" should be lexically bound inside an arrow function and shoul...
[WebKit-https.git] / LayoutTests / js / script-tests / arrowfunction-tdz.js
1 description('Tests for ES6 arrow function test tdz');
2
3 var A = class A {
4   constructor() {
5     this.id = 'a';
6   }
7 };
8
9 var B = class B extends A {
10   constructor(accessThisBeforeSuper) {
11     var f = () => this;
12     if (accessThisBeforeSuper) {
13       f();
14       super();
15     } else {
16       super();
17       f();
18     }
19   }
20 };
21
22 var isReferenceError = false;
23 try {
24      new B(true);
25 } catch (e) {
26     isReferenceError = e instanceof ReferenceError;
27 }
28
29 shouldBe('isReferenceError', 'true');
30
31 var a = new B(false);
32
33 var D = class D extends A {
34   constructor(accessThisBeforeSuper, returnThis) {
35     var f = () => returnThis ? this : {};
36     if (accessThisBeforeSuper) {
37       let val = f();
38       super();
39     } else {
40       super();
41       let val = f();
42     }
43   }
44 };
45
46 isReferenceError = false;
47 try {
48       new D(true, true);
49 } catch (e) {
50       isReferenceError = e instanceof ReferenceError;
51 }
52
53 shouldBe('isReferenceError', 'true');
54
55 var d = new D(false, true);
56 shouldBe('d.id', "'a'");
57 var e = new D(false, false);
58 shouldBe('e.id', "'a'");
59 var f = new D(true, false);
60 shouldBe('f.id', "'a'");
61
62 var G = class G extends A {
63   constructor(accessThisBeforeSuper, returnThis) {
64     var f = () => returnThis ? (() => this ) : (()=>{});
65     let af = f();
66     if (accessThisBeforeSuper) {
67       let result = af();
68       super();
69     } else {
70       super();
71       let result = af();
72     }
73   }
74 };
75
76 try {
77       new G(true, true);
78 } catch (e) {
79     exception = e;
80     isReferenceError = e instanceof ReferenceError;
81 }
82
83 shouldBe('isReferenceError', 'true');
84
85 var g = new G(false, true);
86 shouldBe('g.id', "'a'");
87 var h = new G(false, false);
88 shouldBe('h.id', "'a'");
89 var i = new G(true, false);
90 shouldBe('i.id', "'a'");
91
92 var successfullyParsed = true;