diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /js/src/jit-test/tests/debug/Object-setProperty-03.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/jit-test/tests/debug/Object-setProperty-03.js')
-rw-r--r-- | js/src/jit-test/tests/debug/Object-setProperty-03.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Object-setProperty-03.js b/js/src/jit-test/tests/debug/Object-setProperty-03.js new file mode 100644 index 0000000000..002553c477 --- /dev/null +++ b/js/src/jit-test/tests/debug/Object-setProperty-03.js @@ -0,0 +1,67 @@ +// tests calling script functions via Debugger.Object.prototype.setProperty +// with different receiver objects. +"use strict"; +load(libdir + "/asserts.js"); + +var global = newGlobal({newCompartment: true}); +var dbg = new Debugger(); +var globalDO = dbg.addDebuggee(global); +var windowProxyDO = globalDO.makeDebuggeeValue(global); +dbg.onDebuggerStatement = onDebuggerStatement; + +global.eval(` +let receiver; +function check(value, thisVal) { + receiver = thisVal; + if (value !== "value") throw "Unexpected value"; +} +const sloppy = { + set setter(value) { check(value, this); }, +}; +const strict = { + set setter(value) { "use strict"; check(value, this); }, +}; +debugger; +`); + +function onDebuggerStatement(frame) { + const { environment } = frame; + const sloppy = environment.getVariable("sloppy"); + const strict = environment.getVariable("strict"); + const receiver = () => environment.getVariable("receiver"); + const value = "value"; + + assertEq(sloppy.setProperty("setter", value).return, true); + assertEq(receiver(), sloppy); + assertEq(sloppy.setProperty("setter", value, sloppy).return, true); + assertEq(receiver(), sloppy); + assertEq(sloppy.setProperty("setter", value, strict).return, true); + assertEq(receiver(), strict); + assertEq(sloppy.setProperty("setter", value, 1).return, true); + assertEq(receiver().class, "Number"); + assertEq(sloppy.setProperty("setter", value, true).return, true); + assertEq(receiver().class, "Boolean"); + assertEq(sloppy.setProperty("setter", value, null).return, true); + assertEq(receiver(), windowProxyDO); + assertEq(sloppy.setProperty("setter", value, undefined).return, true); + assertEq(receiver(), windowProxyDO); + assertErrorMessage(() => sloppy.setProperty("setter", value, {}), TypeError, + "Debugger: expected Debugger.Object, got Object"); + + assertEq(strict.setProperty("setter", value).return, true); + assertEq(receiver(), strict); + assertEq(strict.setProperty("setter", value, sloppy).return, true); + assertEq(receiver(), sloppy); + assertEq(strict.setProperty("setter", value, strict).return, true); + assertEq(receiver(), strict); + assertEq(strict.setProperty("setter", value, 1).return, true); + assertEq(receiver(), 1); + assertEq(strict.setProperty("setter", value, true).return, true); + assertEq(receiver(), true); + assertEq(strict.setProperty("setter", value, null).return, true); + assertEq(receiver(), null); + assertEq(strict.setProperty("setter", value, undefined).return, true); + assertEq(receiver(), undefined); + assertErrorMessage(() => strict.setProperty("setter", value, {}), TypeError, + "Debugger: expected Debugger.Object, got Object"); +}; |