Object-getProperty-01.js (4000B)
1 // tests calling script functions via Debugger.Object.prototype.getProperty 2 "use strict"; 3 4 var global = newGlobal({newCompartment: true}); 5 var dbg = new Debugger(global); 6 dbg.onDebuggerStatement = onDebuggerStatement; 7 8 global.eval(` 9 const normalObj = { }; 10 const abruptObj = { }; 11 const sym = Symbol("a symbol key"); 12 13 const arr = [1, 2, 3]; 14 const obj = { 15 get stringNormal(){ 16 return "a value"; 17 }, 18 get stringAbrupt() { 19 throw "a value"; 20 }, 21 get objectNormal() { 22 return normalObj; 23 }, 24 get objectAbrupt() { 25 throw abruptObj; 26 }, 27 get context() { 28 return this; 29 }, 30 31 1234: "number key", 32 [sym]: "symbol key", 33 stringProp: "a value", 34 objectProp: {}, 35 method() { 36 return "a value"; 37 }, 38 undefined: "undefined value", 39 }; 40 const propObj = obj.objectProp; 41 const methodObj = obj.method; 42 43 const objChild = Object.create(obj); 44 45 const proxyChild = new Proxy(obj, {}); 46 47 debugger; 48 `); 49 50 function onDebuggerStatement(frame) { 51 const { environment } = frame; 52 const arr = environment.getVariable("arr"); 53 const obj = environment.getVariable("obj"); 54 const objChild = environment.getVariable("objChild"); 55 const proxyChild = environment.getVariable("proxyChild"); 56 57 const sym = environment.getVariable("sym"); 58 const normalObj = environment.getVariable("normalObj"); 59 const abruptObj = environment.getVariable("abruptObj"); 60 const propObj = environment.getVariable("propObj"); 61 const methodObj = environment.getVariable("methodObj"); 62 63 assertEq(arr.getProperty(1).return, 2); 64 assertEq(arr.getProperty("1").return, 2); 65 66 assertEq(obj.getProperty().return, "undefined value"); 67 68 assertEq(obj.getProperty("missing").return, undefined); 69 70 assertEq(obj.getProperty("stringNormal").return, "a value"); 71 assertEq(obj.getProperty("stringAbrupt").throw, "a value"); 72 73 assertEq(obj.getProperty("objectNormal").return, normalObj); 74 assertEq(obj.getProperty("objectAbrupt").throw, abruptObj); 75 76 assertEq(obj.getProperty("context").return, obj); 77 78 assertEq(obj.getProperty(1234).return, "number key"); 79 assertEq(obj.getProperty(sym).return, "symbol key"); 80 assertEq(obj.getProperty("stringProp").return, "a value"); 81 assertEq(obj.getProperty("objectProp").return, propObj); 82 83 assertEq(obj.getProperty("method").return, methodObj); 84 85 assertEq(objChild.getProperty().return, "undefined value"); 86 87 assertEq(objChild.getProperty("missing").return, undefined); 88 89 assertEq(objChild.getProperty("stringNormal").return, "a value"); 90 assertEq(objChild.getProperty("stringAbrupt").throw, "a value"); 91 92 assertEq(objChild.getProperty("objectNormal").return, normalObj); 93 assertEq(objChild.getProperty("objectAbrupt").throw, abruptObj); 94 95 assertEq(objChild.getProperty("context").return, objChild); 96 97 assertEq(objChild.getProperty(1234).return, "number key"); 98 assertEq(objChild.getProperty(sym).return, "symbol key"); 99 assertEq(objChild.getProperty("stringProp").return, "a value"); 100 assertEq(objChild.getProperty("objectProp").return, propObj); 101 102 assertEq(objChild.getProperty("method").return, methodObj); 103 104 assertEq(proxyChild.getProperty().return, "undefined value"); 105 106 assertEq(proxyChild.getProperty("missing").return, undefined); 107 108 assertEq(proxyChild.getProperty("stringNormal").return, "a value"); 109 assertEq(proxyChild.getProperty("stringAbrupt").throw, "a value"); 110 111 assertEq(proxyChild.getProperty("objectNormal").return, normalObj); 112 assertEq(proxyChild.getProperty("objectAbrupt").throw, abruptObj); 113 114 assertEq(proxyChild.getProperty("context").return, proxyChild); 115 116 assertEq(proxyChild.getProperty(1234).return, "number key"); 117 assertEq(proxyChild.getProperty(sym).return, "symbol key"); 118 assertEq(proxyChild.getProperty("stringProp").return, "a value"); 119 assertEq(proxyChild.getProperty("objectProp").return, propObj); 120 121 assertEq(proxyChild.getProperty("method").return, methodObj); 122 };