Bug 1915045 Ensure decode tasks are scheduled on BufferingState::Enter() r=media...
[gecko.git] / js / xpconnect / tests / unit / test_error_to_exception.js
blob1330ecd0aeefb7d8d89941421717c215711b258e
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 add_task(async function() {
6   // Throwing an error inside a JS callback in xpconnect should preserve
7   // the columnNumber.
9   const tests = [
10     // Parser error.
11     {
12       throwError() {
13         eval("a b");
14       },
15       messagePattern: /unexpected token/,
16       lineNumber: 1,
17       columnNumber: 3,
18     },
19     // Runtime error.
20     {
21       throwError() { // line = 21
22         not_found();
23       },
24       messagePattern: /is not defined/,
25       lineNumber: 22,
26       columnNumber: 9,
27     },
28   ];
30   for (const test of tests) {
31     const { promise, resolve } = Promise.withResolvers();
32     const listener = {
33       observe(msg) {
34         if (msg instanceof Ci.nsIScriptError) {
35           resolve(msg);
36         }
37       }
38     };
40     try {
41       Services.console.registerListener(listener);
43       try {
44         const obs = Cc["@mozilla.org/observer-service;1"]
45               .getService(Ci.nsIObserverService);
46         obs.addObserver(test.throwError, "test-obs", false);
47         obs.notifyObservers(null, "test-obs");
48       } catch {}
50       const msg = await promise;
51       Assert.stringMatches(msg.errorMessage, test.messagePattern);
52       Assert.equal(msg.lineNumber, test.lineNumber);
53       Assert.equal(msg.columnNumber, test.columnNumber);
54     } finally {
55       Services.console.unregisterListener(listener);
56     }
57   }
58 });