Backed out changeset 713114c0331a (bug 1938707) by developer request CLOSED TREE
[gecko.git] / js / xpconnect / tests / unit / test_bug267645.js
blob6196a2165c65aa36dd601b95dc11e927cc29e086
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 function run_test() {
6   let sb = new Cu.Sandbox("https://example.com",
7                           { wantGlobalProperties: ["DOMException"] });
8   Cu.exportFunction(function() {
9     undefined.foo();
10   }, sb, { defineAs: "func" });
11   // By default, the stacks of things running in a sandbox will contain the
12   // actual evalInSandbox() call location.  To override that, we have to pass an
13   // explicit filename.
14   let threw = Cu.evalInSandbox("var threw; try { func(); threw = false; } catch (e) { globalThis.exn = e; threw = true } threw",
15                                 sb, "", "FakeFile");
16   Assert.ok(threw);
18   // Check what the sandbox could see from this exception.
19   Assert.ok(!Cu.evalInSandbox("exn.filename", sb).includes("/unit/"));
20   Assert.equal(Cu.evalInSandbox("exn.fileName", sb), undefined);
21   Assert.ok(!Cu.evalInSandbox("exn.stack", sb).includes("/unit/"));
22   Assert.equal(Cu.evalInSandbox("exn.message", sb), "An exception was thrown");
23   Assert.equal(Cu.evalInSandbox("exn.name", sb), "InvalidStateError");
25   Cu.exportFunction(function() {
26     throw new Error("Hello");
27   }, sb, { defineAs: "func2" });
28   threw = Cu.evalInSandbox("var threw; try { func2(); threw = false; } catch (e) { globalThis.exn = e; threw = true } threw",
29                                 sb, "", "FakeFile");
30   Assert.ok(threw);
31   Assert.ok(!Cu.evalInSandbox("exn.filename", sb).includes("/unit/"));
32   Assert.equal(Cu.evalInSandbox("exn.fileName", sb), undefined);
33   Assert.ok(!Cu.evalInSandbox("exn.stack", sb).includes("/unit/"));
34   Assert.equal(Cu.evalInSandbox("exn.message", sb), "An exception was thrown");
35   Assert.equal(Cu.evalInSandbox("exn.name", sb), "InvalidStateError");
37   let ctor = Cu.evalInSandbox("TypeError", sb);
38   Cu.exportFunction(function() {
39     throw new ctor("Hello");
40   }, sb, { defineAs: "func3" });
41   threw = Cu.evalInSandbox("var threw; try { func3(); threw = false; } catch (e) { globalThis.exn = e; threw = true } threw",
42                                 sb, "", "FakeFile");
43   Assert.ok(threw);
44   Assert.ok(!Cu.evalInSandbox("exn.fileName", sb).includes("/unit/"));
45   Assert.equal(Cu.evalInSandbox("exn.filename", sb), undefined);
46   Assert.ok(!Cu.evalInSandbox("exn.stack", sb).includes("/unit/"));
47   Assert.equal(Cu.evalInSandbox("exn.message", sb), "Hello");
48   Assert.equal(Cu.evalInSandbox("exn.name", sb), "TypeError");
50   ctor = Cu.evalInSandbox("DOMException", sb);
51   Cu.exportFunction(function() {
52     throw new ctor("Goodbye", "InvalidAccessError");
53   }, sb, { defineAs: "func4" });
54   threw = Cu.evalInSandbox("var threw; try { func4(); threw = false; } catch (e) { globalThis.exn = e; threw = true } threw",
55                                 sb, "", "FakeFile");
56   Assert.ok(threw);
57   Assert.ok(!Cu.evalInSandbox("exn.filename", sb).includes("/unit/"));
58   Assert.equal(Cu.evalInSandbox("exn.fileName", sb), undefined);
59   Assert.ok(!Cu.evalInSandbox("exn.stack", sb).includes("/unit/"));
60   Assert.equal(Cu.evalInSandbox("exn.message", sb), "Goodbye");
61   Assert.equal(Cu.evalInSandbox("exn.name", sb), "InvalidAccessError");