forked from mirrors/gecko-dev
58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
add_task(async function() {
|
|
// Throwing an error inside a JS callback in xpconnect should preserve
|
|
// the columnNumber.
|
|
|
|
const tests = [
|
|
// Parser error.
|
|
{
|
|
throwError() {
|
|
eval("a b");
|
|
},
|
|
messagePattern: /unexpected token/,
|
|
lineNumber: 1,
|
|
columnNumber: 3,
|
|
},
|
|
// Runtime error.
|
|
{
|
|
throwError() { // line = 21
|
|
not_found();
|
|
},
|
|
messagePattern: /is not defined/,
|
|
lineNumber: 22,
|
|
columnNumber: 9,
|
|
},
|
|
];
|
|
|
|
for (const test of tests) {
|
|
const { promise, resolve } = Promise.withResolvers();
|
|
const listener = {
|
|
observe(msg) {
|
|
if (msg instanceof Ci.nsIScriptError) {
|
|
resolve(msg);
|
|
}
|
|
}
|
|
};
|
|
|
|
try {
|
|
Services.console.registerListener(listener);
|
|
|
|
try {
|
|
const obs = Cc["@mozilla.org/observer-service;1"]
|
|
.getService(Ci.nsIObserverService);
|
|
obs.addObserver(test.throwError, "test-obs", false);
|
|
obs.notifyObservers(null, "test-obs");
|
|
} catch {}
|
|
|
|
const msg = await promise;
|
|
Assert.stringMatches(msg.errorMessage, test.messagePattern);
|
|
Assert.equal(msg.lineNumber, test.lineNumber);
|
|
Assert.equal(msg.columnNumber, test.columnNumber);
|
|
} finally {
|
|
Services.console.unregisterListener(listener);
|
|
}
|
|
}
|
|
});
|