// tests calling script functions via Debugger.Object.prototype.setProperty
"use strict" ;
var global = newGlobal({newCompartment: true });
var dbg = new Debugger(global);
dbg.onDebuggerStatement = onDebuggerStatement;
global.eval(`
const sym = Symbol("a symbol key" );
const arr = [];
const obj = {
set stringNormal(value) {
this ._stringNormal = value;
},
set stringAbrupt(value) {
throw value;
},
set objectNormal(value) {
this ._objectNormal = value;
},
set objectAbrupt(value) {
throw value;
},
set context(value) {
this ._context = this ;
},
set 1234(value) {
this ._1234 = value;
},
set [sym](value) {
this ._sym = value;
},
get getterOnly() {},
readOnly: "" ,
stringProp: "" ,
objProp: {},
};
Object.defineProperty(obj, "readOnly" , { writable: false });
const objChild = Object.create(obj);
const proxyChild = new Proxy(obj, {});
const testObj = { };
const testChildObj = { };
const testProxyObj = { };
debugger;
`);
function onDebuggerStatement(frame) {
const { environment } = frame;
const sym = environment.getVariable("sym" );
const arr = environment.getVariable("arr" );
const obj = environment.getVariable("obj" );
const objChild = environment.getVariable("objChild" );
const proxyChild = environment.getVariable("proxyChild" );
assertEq(arr.setProperty(1, "index 1" ).return , true );
assertEq(arr.getProperty(1).return , "index 1" );
assertEq(arr.getProperty("1" ).return , "index 1" );
assertEq(arr.getProperty(0).return , undefined);
assertEq(arr.getProperty("length" ).return , 2);
assertEq(arr.setProperty("2" , "index 2" ).return , true );
assertEq(arr.getProperty(2).return , "index 2" );
assertEq(arr.getProperty("2" ).return , "index 2" );
assertEq(arr.getProperty(0).return , undefined);
assertEq(arr.getProperty("length" ).return , 3);
const testObj = environment.getVariable("testObj" );
assertEq(obj.setProperty("undefined" , 123).return , true );
assertEq(obj.getProperty("undefined" ).return , 123);
assertEq(obj.setProperty().return , true );
assertEq(obj.getProperty("undefined" ).return , undefined);
assertEq(obj.setProperty("missing" , 42).return , true );
assertEq(obj.getProperty("missing" ).return , 42);
assertEq(obj.setProperty("stringNormal" , "a normal value" ).return , true );
assertEq(obj.getProperty("_stringNormal" ).return , "a normal value" );
assertEq(obj.setProperty("stringAbrupt" , "an abrupt value" ).throw , "an abrupt value" );
assertEq(obj.setProperty("objectNormal" , testObj).return , true );
assertEq(obj.getProperty("_objectNormal" ).return , testObj);
assertEq(obj.setProperty("objectAbrupt" , testObj).throw , testObj);
assertEq(obj.setProperty("context" , "a value" ).return , true );
assertEq(obj.getProperty("_context" ).return , obj);
assertEq(obj.setProperty(1234, "number value" ).return , true );
assertEq(obj.getProperty("_1234" ).return , "number value" );
assertEq(obj.setProperty(sym, "symbol value" ).return , true );
assertEq(obj.getProperty("_sym" ).return , "symbol value" );
assertEq(obj.setProperty("getterOnly" , "a value" ).return , false );
assertEq(obj.setProperty("readOnly" , "a value" ).return , false );
assertEq(obj.setProperty("stringProp" , "a normal value" ).return , true );
assertEq(obj.getProperty("stringProp" ).return , "a normal value" );
assertEq(obj.setProperty("objectProp" , testObj).return , true );
assertEq(obj.getProperty("objectProp" ).return , testObj);
const testChildObj = environment.getVariable("testChildObj" );
assertEq(objChild.setProperty("undefined" , 123).return , true );
assertEq(objChild.getProperty("undefined" ).return , 123);
assertEq(objChild.setProperty().return , true );
assertEq(objChild.getProperty("undefined" ).return , undefined);
assertEq(objChild.setProperty("missing" , 42).return , true );
assertEq(objChild.getProperty("missing" ).return , 42);
assertEq(objChild.setProperty("stringNormal" , "a normal child value" ).return , true );
assertEq(objChild.getProperty("_stringNormal" ).return , "a normal child value" );
assertEq(objChild.setProperty("stringAbrupt" , "an abrupt child value" ).throw , "an abrupt child value" );
assertEq(objChild.setProperty("objectNormal" , testChildObj).return , true );
assertEq(objChild.getProperty("_objectNormal" ).return , testChildObj);
assertEq(objChild.setProperty("objectAbrupt" , testChildObj).throw , testChildObj);
assertEq(objChild.setProperty("context" , "a value" ).return , true );
assertEq(objChild.getProperty("_context" ).return , objChild);
assertEq(objChild.setProperty(1234, "number value" ).return , true );
assertEq(objChild.getProperty("_1234" ).return , "number value" );
assertEq(objChild.setProperty(sym, "symbol value" ).return , true );
assertEq(objChild.getProperty("_sym" ).return , "symbol value" );
assertEq(objChild.setProperty("getterOnly" , "a value" ).return , false );
assertEq(objChild.setProperty("readOnly" , "a value" ).return , false );
assertEq(objChild.setProperty("stringProp" , "a normal child value" ).return , true );
assertEq(objChild.getProperty("stringProp" ).return , "a normal child value" );
assertEq(objChild.setProperty("objectProp" , testChildObj).return , true );
assertEq(objChild.getProperty("objectProp" ).return , testChildObj);
const testProxyObj = environment.getVariable("testProxyObj" );
assertEq(proxyChild.setProperty("undefined" , 123).return , true );
assertEq(proxyChild.getProperty("undefined" ).return , 123);
assertEq(proxyChild.setProperty().return , true );
assertEq(proxyChild.getProperty("undefined" ).return , undefined);
assertEq(proxyChild.setProperty("missing" , 42).return , true );
assertEq(proxyChild.getProperty("missing" ).return , 42);
assertEq(proxyChild.setProperty("stringNormal" , "a normal child value" ).return , true );
assertEq(proxyChild.getProperty("_stringNormal" ).return , "a normal child value" );
assertEq(proxyChild.setProperty("stringAbrupt" , "an abrupt child value" ).throw , "an abrupt child value" );
assertEq(proxyChild.setProperty("objectNormal" , testProxyObj).return , true );
assertEq(proxyChild.getProperty("_objectNormal" ).return , testProxyObj);
assertEq(proxyChild.setProperty("objectAbrupt" , testProxyObj).throw , testProxyObj);
assertEq(proxyChild.setProperty("context" , "a value" ).return , true );
assertEq(proxyChild.getProperty("_context" ).return , proxyChild);
assertEq(proxyChild.setProperty(1234, "number value" ).return , true );
assertEq(proxyChild.getProperty("_1234" ).return , "number value" );
assertEq(proxyChild.setProperty(sym, "symbol value" ).return , true );
assertEq(proxyChild.getProperty("_sym" ).return , "symbol value" );
assertEq(proxyChild.setProperty("getterOnly" , "a value" ).return , false );
assertEq(proxyChild.setProperty("readOnly" , "a value" ).return , false );
assertEq(proxyChild.setProperty("stringProp" , "a normal child value" ).return , true );
assertEq(proxyChild.getProperty("stringProp" ).return , "a normal child value" );
assertEq(proxyChild.setProperty("objectProp" , testProxyObj).return , true );
assertEq(proxyChild.getProperty("objectProp" ).return , testProxyObj);
};
Messung V0.5 C=94 H=98 G=95
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet)
¤
*© Formatika GbR, Deutschland