ES6 class syntax should use block scoping
[WebKit.git] / LayoutTests / js / class-syntax-name-expected.txt
1 Tests for ES6 class name semantics in class statements and expressions
2
3 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
4
5
6 Class statement
7 PASS A:::ReferenceError: Can't find variable: A
8 PASS 'use strict'; A:::ReferenceError: Can't find variable: A
9 PASS class {}:::SyntaxError: Class statements must have a name.
10 PASS 'use strict'; class {}:::SyntaxError: Class statements must have a name.
11 PASS class { constructor() {} }:::SyntaxError: Class statements must have a name.
12 PASS 'use strict'; class { constructor() {} }:::SyntaxError: Class statements must have a name.
13 PASS class A { constructor() {} }
14 PASS 'use strict'; class A { constructor() {} }
15 PASS class A { constructor() {} }; A.toString():::'function A() {}'
16 PASS 'use strict'; class A { constructor() {} }; A.toString():::'function A() {}'
17 PASS class A { constructor() {} }; (new A) instanceof A
18 PASS 'use strict'; class A { constructor() {} }; (new A) instanceof A
19 PASS class A { constructor() { this.base = A; } }; (new A).base.toString():::'function A() { this.base = A; }'
20 PASS 'use strict'; class A { constructor() { this.base = A; } }; (new A).base.toString():::'function A() { this.base = A; }'
21 PASS class A { constructor() {} }; class B extends A {};
22 PASS 'use strict'; class A { constructor() {} }; class B extends A {};
23 PASS class A { constructor() {} }; class B extends A { constructor() {} }; B.toString():::'function B() {}'
24 PASS 'use strict'; class A { constructor() {} }; class B extends A { constructor() {} }; B.toString():::'function B() {}'
25 PASS class A { constructor() {} }; class B extends A {}; (new B) instanceof A
26 PASS 'use strict'; class A { constructor() {} }; class B extends A {}; (new B) instanceof A
27 PASS class A { constructor() {} }; class B extends A {}; (new B) instanceof B
28 PASS 'use strict'; class A { constructor() {} }; class B extends A {}; (new B) instanceof B
29 PASS class A { constructor() {} }; class B extends A { constructor() { super(); this.base = A; this.derived = B; } }; (new B).base.toString():::'function A() {}'
30 PASS 'use strict'; class A { constructor() {} }; class B extends A { constructor() { super(); this.base = A; this.derived = B; } }; (new B).base.toString():::'function A() {}'
31 PASS class A { constructor() {} }; class B extends A { constructor() { super(); this.base = A; this.derived = B; } }; (new B).derived.toString():::'function B() { super(); this.base = A; this.derived = B; }'
32 PASS 'use strict'; class A { constructor() {} }; class B extends A { constructor() { super(); this.base = A; this.derived = B; } }; (new B).derived.toString():::'function B() { super(); this.base = A; this.derived = B; }'
33
34 Class expression
35 PASS A:::ReferenceError: Can't find variable: A
36 PASS 'use strict'; A:::ReferenceError: Can't find variable: A
37 PASS (class {})
38 PASS 'use strict'; (class {})
39 PASS (class { constructor(){} })
40 PASS 'use strict'; (class { constructor(){} })
41 PASS typeof (class {}):::"function"
42 PASS 'use strict'; typeof (class {}):::"function"
43 PASS (class A {})
44 PASS 'use strict'; (class A {})
45 PASS typeof (class A {}):::"function"
46 PASS 'use strict'; typeof (class A {}):::"function"
47 PASS (class A {}); A:::ReferenceError: Can't find variable: A
48 PASS 'use strict'; (class A {}); A:::ReferenceError: Can't find variable: A
49 PASS new (class A {})
50 PASS 'use strict'; new (class A {})
51 PASS typeof (new (class A {})):::"object"
52 PASS 'use strict'; typeof (new (class A {})):::"object"
53 PASS (new (class A { constructor() { this.base = A; } })).base
54 PASS 'use strict'; (new (class A { constructor() { this.base = A; } })).base
55 PASS (new (class A { constructor() { this.base = A; } })).base.toString():::"function A() { this.base = A; }"
56 PASS 'use strict'; (new (class A { constructor() { this.base = A; } })).base.toString():::"function A() { this.base = A; }"
57 PASS class A {}; (class B extends A {})
58 PASS 'use strict'; class A {}; (class B extends A {})
59 PASS class A {}; (class B extends A {}); B:::ReferenceError: Can't find variable: B
60 PASS 'use strict'; class A {}; (class B extends A {}); B:::ReferenceError: Can't find variable: B
61 PASS class A {}; new (class B extends A {})
62 PASS 'use strict'; class A {}; new (class B extends A {})
63 PASS class A {}; new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })
64 PASS 'use strict'; class A {}; new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })
65 PASS class A {}; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })) instanceof A
66 PASS 'use strict'; class A {}; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })) instanceof A
67 PASS class A { constructor() {} }; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })).base.toString():::'function A() {}'
68 PASS 'use strict'; class A { constructor() {} }; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })).base.toString():::'function A() {}'
69 PASS class A { constructor() {} }; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })).derived.toString():::'function B() { super(); this.base = A; this.derived = B; }'
70 PASS 'use strict'; class A { constructor() {} }; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })).derived.toString():::'function B() { super(); this.base = A; this.derived = B; }'
71
72 Class expression assignment to variable
73 PASS A:::ReferenceError: Can't find variable: A
74 PASS 'use strict'; A:::ReferenceError: Can't find variable: A
75 PASS var VarA = class {}
76 PASS 'use strict'; var VarA = class {}
77 PASS var VarA = class { constructor() {} }; VarA.toString():::'function () {}'
78 PASS 'use strict'; var VarA = class { constructor() {} }; VarA.toString():::'function () {}'
79 PASS VarA:::ReferenceError: Can't find variable: VarA
80 PASS 'use strict'; VarA:::ReferenceError: Can't find variable: VarA
81 PASS var VarA = class A { constructor() {} }
82 PASS 'use strict'; var VarA = class A { constructor() {} }
83 PASS var VarA = class A { constructor() {} }; VarA.toString():::'function A() {}'
84 PASS 'use strict'; var VarA = class A { constructor() {} }; VarA.toString():::'function A() {}'
85 PASS var VarA = class A { constructor() {} }; A.toString():::ReferenceError: Can't find variable: A
86 PASS 'use strict'; var VarA = class A { constructor() {} }; A.toString():::ReferenceError: Can't find variable: A
87 PASS var VarA = class A { constructor() {} }; (new VarA) instanceof VarA
88 PASS 'use strict'; var VarA = class A { constructor() {} }; (new VarA) instanceof VarA
89 PASS var VarA = class A { constructor() { this.base = A; } }; (new VarA).base.toString():::'function A() { this.base = A; }'
90 PASS 'use strict'; var VarA = class A { constructor() { this.base = A; } }; (new VarA).base.toString():::'function A() { this.base = A; }'
91 PASS var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} };
92 PASS 'use strict'; var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} };
93 PASS var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} }; B:::ReferenceError: Can't find variable: B
94 PASS 'use strict'; var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} }; B:::ReferenceError: Can't find variable: B
95 PASS var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} }; VarB.toString():::'function B() {}'
96 PASS 'use strict'; var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} }; VarB.toString():::'function B() {}'
97 PASS var VarA = class A { constructor() {} }; var VarB = class B extends VarA { }; (new VarB) instanceof VarA
98 PASS 'use strict'; var VarA = class A { constructor() {} }; var VarB = class B extends VarA { }; (new VarB) instanceof VarA
99 PASS var VarA = class A { constructor() {} }; var VarB = class B extends VarA { }; (new VarB) instanceof VarB
100 PASS 'use strict'; var VarA = class A { constructor() {} }; var VarB = class B extends VarA { }; (new VarB) instanceof VarB
101 PASS var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() { super(); this.base = VarA; this.derived = B; this.derivedVar = VarB; } }; (new VarB).base === VarA
102 PASS 'use strict'; var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() { super(); this.base = VarA; this.derived = B; this.derivedVar = VarB; } }; (new VarB).base === VarA
103 PASS var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() { super(); this.base = VarA; this.derived = B; this.derivedVar = VarB; } }; (new VarB).derived === VarB
104 PASS 'use strict'; var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() { super(); this.base = VarA; this.derived = B; this.derivedVar = VarB; } }; (new VarB).derived === VarB
105 PASS var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() { super(); this.base = VarA; this.derived = B; this.derivedVar = VarB; } }; (new VarB).derivedVar === VarB
106 PASS 'use strict'; var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() { super(); this.base = VarA; this.derived = B; this.derivedVar = VarB; } }; (new VarB).derivedVar === VarB
107
108 Class statement binding in other circumstances
109 PASS var result = A; result:::ReferenceError: Can't find variable: A
110 PASS 'use strict'; var result = A; result:::ReferenceError: Can't find variable: A
111 PASS var result = A; class A {}; result:::ReferenceError: Cannot access uninitialized variable.
112 PASS 'use strict'; var result = A; class A {}; result:::ReferenceError: Cannot access uninitialized variable.
113 PASS class A { constructor() { A = 1; } }; new A:::TypeError: Attempted to assign to readonly property.
114 PASS 'use strict'; class A { constructor() { A = 1; } }; new A:::TypeError: Attempted to assign to readonly property.
115 PASS class A { constructor() { } }; A = 1; A:::1
116 PASS 'use strict'; class A { constructor() { } }; A = 1; A:::1
117 PASS class A {}; var result = A; result
118 PASS 'use strict'; class A {}; var result = A; result
119 PASS eval('var Foo = 10'); Foo:::10
120 PASS 'use strict'; eval('var Foo = 10'); Foo:::ReferenceError: Can't find variable: Foo
121 PASS eval('class Bar { constructor() {} }; Bar.toString()');:::'function Bar() {}'
122 PASS 'use strict'; eval('class Bar { constructor() {} }'); Bar.toString():::ReferenceError: Can't find variable: Bar
123 PASS successfullyParsed
124
125 TEST COMPLETE
126