summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Object-getOwnPropertyDescriptor-06.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/Object-getOwnPropertyDescriptor-06.js')
-rw-r--r--js/src/jit-test/tests/debug/Object-getOwnPropertyDescriptor-06.js29
1 files changed, 29 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Object-getOwnPropertyDescriptor-06.js b/js/src/jit-test/tests/debug/Object-getOwnPropertyDescriptor-06.js
new file mode 100644
index 0000000000..b0d9facb7e
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Object-getOwnPropertyDescriptor-06.js
@@ -0,0 +1,29 @@
+// obj.getOwnPropertyDescriptor works when obj is a transparent cross-compartment wrapper.
+
+var g1 = newGlobal({newCompartment: true});
+var g2 = newGlobal({newCompartment: true});
+g1.next = g2;
+
+// This test is a little hard to follow, especially the !== assertions.
+//
+// Bottom line: the value of a property of g1 can only be an object in g1's
+// compartment, so any Debugger.Objects obtained by calling
+// g1obj.getOwnPropertyDescriptor should all have referents in g1's
+// compartment.
+
+var dbg = new Debugger;
+var g1obj = dbg.addDebuggee(g1);
+var g2obj = dbg.addDebuggee(g2);
+var wobj = g1obj.getOwnPropertyDescriptor("next").value;
+assertEq(wobj instanceof Debugger.Object, true);
+assertEq(wobj !== g2obj, true); // referents are in two different compartments
+
+g2.x = "ok";
+assertEq(wobj.getOwnPropertyDescriptor("x").value, "ok");
+
+g1.g2min = g2.min = g2.Math.min;
+g2.eval("Object.defineProperty(this, 'y', {get: min});");
+assertEq(g2.y, Infinity);
+var wmin = wobj.getOwnPropertyDescriptor("y").get;
+assertEq(wmin !== g2obj.getOwnPropertyDescriptor("min").value, true); // as above
+assertEq(wmin, g1obj.getOwnPropertyDescriptor("g2min").value);