diff options
Diffstat (limited to 'js/src/jit-test/tests/class/class-static-01.js')
-rw-r--r-- | js/src/jit-test/tests/class/class-static-01.js | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/class/class-static-01.js b/js/src/jit-test/tests/class/class-static-01.js new file mode 100644 index 0000000000..ee41def1fb --- /dev/null +++ b/js/src/jit-test/tests/class/class-static-01.js @@ -0,0 +1,172 @@ +// |jit-test| +load(libdir + "asserts.js"); + +// Parse +class A { + static { } +}; + +// Run +var ran = false; +class B { + static { + ran = true; + } +}; + +assertEq(ran, true); + +// Can access static assigned before. +var res; +class C { + static x = 10; + static { + res = this.x; + } +}; + +assertEq(res, 10); + +// Multiple static blocks +class D { + static { } + static { } +}; + +class D1 { + static { } static { } +}; + +// Blocks run in order. +class E { + static { + res = 10; + } + static { + assertEq(res, 10); + res = 14; + } +} + +assertEq(res, 14); + + +// Can use static to access private state. +let accessor; +class F { + #x = 10 + static { + accessor = (o) => o.#x; + } +} + +let f = new F; +assertEq(accessor(f), 10); + +class G { + static { + this.a = 10; + } +} +assertEq(G.a, 10); + +// Can use the super-keyword to access a static method in super class. +class H { + static a() { return 101; } +} + +class I extends H { + static { + res = super.a(); + } +} + +assertEq(res, 101); + +// Can add a property to a class from within a static +class J { + static { + this.x = 12; + } +} + +assertEq(J.x, 12); + + +function assertThrowsSyntaxError(str) { + assertThrowsInstanceOf(() => eval(str), SyntaxError); // Direct Eval + assertThrowsInstanceOf(() => (1, eval)(str), SyntaxError); // Indirect Eval + assertThrowsInstanceOf(() => Function(str), SyntaxError); // Function +} + +assertThrowsSyntaxError(` +class X { + static { + arguments; + } +} +`) + + +assertThrowsSyntaxError(` +class X extends class {} { + static { + super(); // can't call super in a static block + } +} +`) + +assertThrowsSyntaxError(` +class X { + static { + return 10; // Can't return in a static block + } +} +`) + +assertThrowsSyntaxError(` +class X { + static { + await 10; // Can't await in a static block + } +} +`) + +// Can't await inside a static block, even if we're inside an async function. +// +// The error message here is not good `SyntaxError: await is a reserved identifier`, +// but can be fixed later. s +assertThrowsSyntaxError(` +async function f() { + class X { + static { + await 10; // Can't await in a static block + } + } +} +`) + + +assertThrowsSyntaxError(` +class X { + static { + yield 10; // Can't yield in a static block + } +} +`) + + +assertThrowsSyntaxError(` +function* gen() { + class X { + static { + yield 10; // Can't yield in a static block, even inside a generator + } + } +} +`) + +// Incomplete should throw a sensible error. +assertThrowsSyntaxError(` +class A { static { this.x +`)
\ No newline at end of file |