summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/realms/ccw-errors.js
blob: 380c81d17ca9314cdb2ead2e08a8857e6451c3e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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();