diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/tests/non262/PrivateName/lexical-presence.js | |
parent | Initial commit. (diff) | |
download | firefox-esr-upstream.tar.xz firefox-esr-upstream.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/non262/PrivateName/lexical-presence.js')
-rw-r--r-- | js/src/tests/non262/PrivateName/lexical-presence.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/js/src/tests/non262/PrivateName/lexical-presence.js b/js/src/tests/non262/PrivateName/lexical-presence.js new file mode 100644 index 0000000000..ce8588a0f1 --- /dev/null +++ b/js/src/tests/non262/PrivateName/lexical-presence.js @@ -0,0 +1,55 @@ +// |reftest| + +// Verify that private fields are enabled. +class A { + #x; +}; + +function assertThrowsSyntaxError(str) { + assertThrowsInstanceOf(() => eval(str), SyntaxError); // Direct Eval + assertThrowsInstanceOf(() => (1, eval)(str), SyntaxError); // Indirect Eval + assertThrowsInstanceOf(() => Function(str), SyntaxError); // Function +} + +assertThrowsSyntaxError(` + class B { + g() { + return this.#x; + } + }; +`); + +assertThrowsSyntaxError(` +with (new class A { #x; }) { + class B { + #y; + constructor() { return this.#x; } + } + } +`); + +// Make sure we don't create a generic binding for #x. +with (new class { + #x = 12; +}) { + assertEq('#x' in this, false); +} + +// Try to fetch a non-existing field using different +// compilation contexts +function assertNonExisting(fetchCode) { + source = `var X = class { + b() { + ${fetchCode} + } + } + var a = new X; + a.b()` + assertThrowsInstanceOf(() => eval(source), SyntaxError); +} + +assertNonExisting(`return eval("this.#x")"`); +assertNonExisting(`return (1,eval)("this.#x")`); +assertNonExisting(`var f = Function("this.#x"); return f();`); + +if (typeof reportCompare === 'function') reportCompare(0, 0);
\ No newline at end of file |