summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/realms/ccw-errors.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/realms/ccw-errors.js')
-rw-r--r--js/src/jit-test/tests/realms/ccw-errors.js28
1 files changed, 28 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/realms/ccw-errors.js b/js/src/jit-test/tests/realms/ccw-errors.js
new file mode 100644
index 0000000000..380c81d17c
--- /dev/null
+++ b/js/src/jit-test/tests/realms/ccw-errors.js
@@ -0,0 +1,28 @@
+function test() {
+ "use strict";
+
+ const g = newGlobal({newCompartment: true});
+ Error.prototype.whence = "main global";
+ g.eval("Error.prototype.whence = 'other global'");
+
+ const obj = g.eval("[]");
+ Object.freeze(obj);
+ try {
+ obj.foo = 7;
+ assertEq("reached", "no", "This line should not be reached; the previous line should have thrown");
+ } catch(e) {
+ assertEq("" + e, `TypeError: can't define property "foo": Array is not extensible`);
+ assertEq(e.whence, "main global"); // setting operation happens in this global
+ }
+
+ const obj2 = g.eval(`obj2 = { get x() { throw new Error("go away"); } };`);
+ try {
+ obj2.x;
+ assertEq("reached", "no", "This line should not be reached; the previous line should have thrown");
+ } catch(e) {
+ assertEq("" + e, `Error: go away`);
+ assertEq(e.whence, "other global"); // Error created in other global
+ }
+}
+
+test();