summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Object-getProperty-01.js
diff options
context:
space:
mode:
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.js122
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);
+};