diff options
Diffstat (limited to 'js/src/jit-test/tests/debug/Object-getProperty-01.js')
-rw-r--r-- | js/src/jit-test/tests/debug/Object-getProperty-01.js | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Object-getProperty-01.js b/js/src/jit-test/tests/debug/Object-getProperty-01.js new file mode 100644 index 0000000000..378611b7e2 --- /dev/null +++ b/js/src/jit-test/tests/debug/Object-getProperty-01.js @@ -0,0 +1,122 @@ +// tests calling script functions via Debugger.Object.prototype.getProperty +"use strict"; + +var global = newGlobal({newCompartment: true}); +var dbg = new Debugger(global); +dbg.onDebuggerStatement = onDebuggerStatement; + +global.eval(` +const normalObj = { }; +const abruptObj = { }; +const sym = Symbol("a symbol key"); + +const arr = [1, 2, 3]; +const obj = { + get stringNormal(){ + return "a value"; + }, + get stringAbrupt() { + throw "a value"; + }, + get objectNormal() { + return normalObj; + }, + get objectAbrupt() { + throw abruptObj; + }, + get context() { + return this; + }, + + 1234: "number key", + [sym]: "symbol key", + stringProp: "a value", + objectProp: {}, + method() { + return "a value"; + }, + undefined: "undefined value", +}; +const propObj = obj.objectProp; +const methodObj = obj.method; + +const objChild = Object.create(obj); + +const proxyChild = new Proxy(obj, {}); + +debugger; +`); + +function onDebuggerStatement(frame) { + const { environment } = frame; + const arr = environment.getVariable("arr"); + const obj = environment.getVariable("obj"); + const objChild = environment.getVariable("objChild"); + const proxyChild = environment.getVariable("proxyChild"); + + const sym = environment.getVariable("sym"); + const normalObj = environment.getVariable("normalObj"); + const abruptObj = environment.getVariable("abruptObj"); + const propObj = environment.getVariable("propObj"); + const methodObj = environment.getVariable("methodObj"); + + assertEq(arr.getProperty(1).return, 2); + assertEq(arr.getProperty("1").return, 2); + + assertEq(obj.getProperty().return, "undefined value"); + + assertEq(obj.getProperty("missing").return, undefined); + + assertEq(obj.getProperty("stringNormal").return, "a value"); + assertEq(obj.getProperty("stringAbrupt").throw, "a value"); + + assertEq(obj.getProperty("objectNormal").return, normalObj); + assertEq(obj.getProperty("objectAbrupt").throw, abruptObj); + + assertEq(obj.getProperty("context").return, obj); + + assertEq(obj.getProperty(1234).return, "number key"); + assertEq(obj.getProperty(sym).return, "symbol key"); + assertEq(obj.getProperty("stringProp").return, "a value"); + assertEq(obj.getProperty("objectProp").return, propObj); + + assertEq(obj.getProperty("method").return, methodObj); + + assertEq(objChild.getProperty().return, "undefined value"); + + assertEq(objChild.getProperty("missing").return, undefined); + + assertEq(objChild.getProperty("stringNormal").return, "a value"); + assertEq(objChild.getProperty("stringAbrupt").throw, "a value"); + + assertEq(objChild.getProperty("objectNormal").return, normalObj); + assertEq(objChild.getProperty("objectAbrupt").throw, abruptObj); + + assertEq(objChild.getProperty("context").return, objChild); + + assertEq(objChild.getProperty(1234).return, "number key"); + assertEq(objChild.getProperty(sym).return, "symbol key"); + assertEq(objChild.getProperty("stringProp").return, "a value"); + assertEq(objChild.getProperty("objectProp").return, propObj); + + assertEq(objChild.getProperty("method").return, methodObj); + + assertEq(proxyChild.getProperty().return, "undefined value"); + + assertEq(proxyChild.getProperty("missing").return, undefined); + + assertEq(proxyChild.getProperty("stringNormal").return, "a value"); + assertEq(proxyChild.getProperty("stringAbrupt").throw, "a value"); + + assertEq(proxyChild.getProperty("objectNormal").return, normalObj); + assertEq(proxyChild.getProperty("objectAbrupt").throw, abruptObj); + + assertEq(proxyChild.getProperty("context").return, proxyChild); + + assertEq(proxyChild.getProperty(1234).return, "number key"); + assertEq(proxyChild.getProperty(sym).return, "symbol key"); + assertEq(proxyChild.getProperty("stringProp").return, "a value"); + assertEq(proxyChild.getProperty("objectProp").return, propObj); + + assertEq(proxyChild.getProperty("method").return, methodObj); +}; |