Lines Matching refs:class
26 description('Tests for ES6 class name semantics in class statements and expressions');
48 // Class statement. Class name added to global scope. Class name is available inside class scope and in global scope.
49 debug('Class statement');
51 runTestShouldThrow("class {}");
52 runTestShouldThrow("class { constructor() {} }");
53 runTestShouldNotThrow("class A { constructor() {} }");
54 runTestShouldBe("class A { constructor() {} }; A.toString()", "'class A { constructor() {} }'");
55 runTestShouldBeTrue("class A { constructor() {} }; (new A) instanceof A");
56 runTestShouldBe("class A { constructor() { this.base = A; } }; (new A).base.toString()", "'class A { constructor() { this.base = A; } }'");
57 runTestShouldNotThrow("class A { constructor() {} }; class B extends A {};");
58 runTestShouldBe("class A { constructor() {} }; class B extends A { constructor() {} }; B.toString()", "'class B extends A { constructor() {} }'");
59 runTestShouldBeTrue("class A { constructor() {} }; class B extends A {}; (new B) instanceof A");
60 runTestShouldBeTrue("class A { constructor() {} }; class B extends A {}; (new B) instanceof B");
61 runTestShouldBe("class A { constructor() {} }; class B extends A { constructor() { super(); this.base = A; this.derived = B; } }; (new B).base.toString()", "'class A { constructor() {} }'");
62 runTestShouldBe("class A { constructor() {} }; class B extends A { constructor() { super(); this.base = A; this.derived = B; } }; (new B).derived.toString()", "'class B extends A { constructor() { super(); this.base = A; this.derived = B; } }'");
64 // Class expression. Class name not added to scope. Class name is available inside class scope.
65 debug(''); debug('Class expression');
67 runTestShouldNotThrow("(class {})");
68 runTestShouldNotThrow("(class { constructor(){} })");
69 runTestShouldBe("typeof (class {})", '"function"');
70 runTestShouldNotThrow("(class A {})");
71 runTestShouldBe("typeof (class A {})", '"function"');
72 runTestShouldThrow("(class A {}); A");
73 runTestShouldNotThrow("new (class A {})");
74 runTestShouldBe("typeof (new (class A {}))", '"object"');
75 runTestShouldNotThrow("(new (class A { constructor() { this.base = A; } })).base");
76 runTestShouldBe("(new (class A { constructor() { this.base = A; } })).base.toString()", '"class A { constructor() { this.base = A; } }"');
77 runTestShouldNotThrow("class A {}; (class B extends A {})");
78 runTestShouldThrow("class A {}; (class B extends A {}); B");
79 runTestShouldNotThrow("class A {}; new (class B extends A {})");
80 runTestShouldNotThrow("class A {}; new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })");
81 runTestShouldBeTrue("class A {}; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })) instanceof A");
82 runTestShouldBe("class A { constructor() {} }; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })).base.toString()", "'class A { constructor() {} }'");
83 runTestShouldBe("class A { constructor() {} }; (new (class B extends A { constructor() { super(); this.base = A; this.derived = B; } })).derived.toString()", "'class B extends A { constructor() { super(); this.base = A; this.derived = B; } }'");
85 // Assignment of a class expression to a variable. Variable name available in scope, class name is not. Class name is available inside class scope.
86 debug(''); debug('Class expression assignment to variable');
88 runTestShouldNotThrow("var VarA = class {}");
89 runTestShouldBe("var VarA = class { constructor() {} }; VarA.toString()", "'class { constructor() {} }'");
91 runTestShouldNotThrow("var VarA = class A { constructor() {} }");
92 runTestShouldBe("var VarA = class A { constructor() {} }; VarA.toString()", "'class A { constructor() {} }'");
93 runTestShouldThrow("var VarA = class A { constructor() {} }; A.toString()");
94 runTestShouldBeTrue("var VarA = class A { constructor() {} }; (new VarA) instanceof VarA");
95 runTestShouldBe("var VarA = class A { constructor() { this.base = A; } }; (new VarA).base.toString()", "'class A { constructor() { this.base = A; } }'");
96 runTestShouldNotThrow("var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} };");
97 runTestShouldThrow("var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} }; B");
98 runTestShouldBe("var VarA = class A { constructor() {} }; var VarB = class B extends VarA { constructor() {} }; VarB.toString()", "'class B extends VarA { constructor() {} }'");
99 runTestShouldBeTrue("var VarA = class A { constructor() {} }; var VarB = class B extends VarA { }; (new VarB) instanceof VarA");
100 runTestShouldBeTrue("var VarA = class A { constructor() {} }; var VarB = class B extends VarA { }; (new VarB) instanceof VarB");
101 runTestShouldBeTrue("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 runTestShouldBeTrue("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");
103 runTestShouldBeTrue("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");
105 // FIXME: Class statement binding should be like `let`, not `var`.
106 debug(''); debug('Class statement binding in other circumstances');
108 runTestShouldThrow("var result = A; class A {}; result");
109 runTestShouldThrow("class A { constructor() { A = 1; } }; new A");
110 runTestShouldBe("class A { constructor() { } }; A = 1; A", "1");
111 runTestShouldNotThrow("class A {}; var result = A; result");
114 shouldBe("eval('class Bar { constructor() {} }; Bar.toString()')", "'class Bar { constructor() {} }'");
115 shouldThrow("'use strict'; eval('class Bar { constructor() {} }'); Bar.toString()");