Object-setProperty-03.js (2738B)
1 // tests calling script functions via Debugger.Object.prototype.setProperty 2 // with different receiver objects. 3 "use strict"; 4 load(libdir + "/asserts.js"); 5 6 var global = newGlobal({newCompartment: true}); 7 var dbg = new Debugger(); 8 var globalDO = dbg.addDebuggee(global); 9 var windowProxyDO = globalDO.makeDebuggeeValue(global); 10 dbg.onDebuggerStatement = onDebuggerStatement; 11 12 global.eval(` 13 let receiver; 14 function check(value, thisVal) { 15 receiver = thisVal; 16 if (value !== "value") throw "Unexpected value"; 17 } 18 const sloppy = { 19 set setter(value) { check(value, this); }, 20 }; 21 const strict = { 22 set setter(value) { "use strict"; check(value, this); }, 23 }; 24 debugger; 25 `); 26 27 function onDebuggerStatement(frame) { 28 const { environment } = frame; 29 const sloppy = environment.getVariable("sloppy"); 30 const strict = environment.getVariable("strict"); 31 const receiver = () => environment.getVariable("receiver"); 32 const value = "value"; 33 34 assertEq(sloppy.setProperty("setter", value).return, true); 35 assertEq(receiver(), sloppy); 36 assertEq(sloppy.setProperty("setter", value, sloppy).return, true); 37 assertEq(receiver(), sloppy); 38 assertEq(sloppy.setProperty("setter", value, strict).return, true); 39 assertEq(receiver(), strict); 40 assertEq(sloppy.setProperty("setter", value, 1).return, true); 41 assertEq(receiver().class, "Number"); 42 assertEq(sloppy.setProperty("setter", value, true).return, true); 43 assertEq(receiver().class, "Boolean"); 44 assertEq(sloppy.setProperty("setter", value, null).return, true); 45 assertEq(receiver(), windowProxyDO); 46 assertEq(sloppy.setProperty("setter", value, undefined).return, true); 47 assertEq(receiver(), windowProxyDO); 48 assertErrorMessage(() => sloppy.setProperty("setter", value, {}), TypeError, 49 "Debugger: expected Debugger.Object, got Object"); 50 51 assertEq(strict.setProperty("setter", value).return, true); 52 assertEq(receiver(), strict); 53 assertEq(strict.setProperty("setter", value, sloppy).return, true); 54 assertEq(receiver(), sloppy); 55 assertEq(strict.setProperty("setter", value, strict).return, true); 56 assertEq(receiver(), strict); 57 assertEq(strict.setProperty("setter", value, 1).return, true); 58 assertEq(receiver(), 1); 59 assertEq(strict.setProperty("setter", value, true).return, true); 60 assertEq(receiver(), true); 61 assertEq(strict.setProperty("setter", value, null).return, true); 62 assertEq(receiver(), null); 63 assertEq(strict.setProperty("setter", value, undefined).return, true); 64 assertEq(receiver(), undefined); 65 assertErrorMessage(() => strict.setProperty("setter", value, {}), TypeError, 66 "Debugger: expected Debugger.Object, got Object"); 67 };