1
0
mirror of https://github.com/gryf/pentadactyl-pm.git synced 2026-02-05 12:45:45 +01:00

Fix reported file/line in failed assertions.

This commit is contained in:
Kris Maglione
2010-12-25 06:53:51 -05:00
parent b24781c685
commit 273796d321
3 changed files with 24 additions and 13 deletions

View File

@@ -8,11 +8,7 @@
/** @scope modules */
let ValueError = Class("ValueError", Error, {
init: function (message) {
update(this, Error(message));
}
});
let ValueError = Class("ValueError", ErrorBase);
// do NOT create instances of this class yourself, use the helper method
// options.add() instead

View File

@@ -176,7 +176,7 @@ function require(obj, name, from) {
defineModule("base", {
// sed -n 's/^(const|function) ([a-zA-Z0-9_]+).*/ "\2",/p' base.jsm | sort | fmt
exports: [
"Cc", "Ci", "Class", "Cr", "Cu", "Module", "Object", "Runnable",
"ErrorBase", "Cc", "Ci", "Class", "Cr", "Cu", "Module", "Object", "Runnable",
"Struct", "StructBase", "Timer", "UTF8", "XPCOM", "XPCOMUtils", "array",
"call", "callable", "ctypes", "curry", "debuggerProperties", "defineModule",
"deprecated", "endModule", "forEach", "isArray", "isGenerator",
@@ -857,6 +857,26 @@ function XPCOM(interfaces, superClass) {
return res;
}
/**
* An abstract base class for classes that wish to inherit from Error.
*/
const ErrorBase = Class("ErrorBase", Error, {
level: 2,
init: function (message, level) {
level = level || 0;
update(this, Error(message))
this.message = message;
let frame = Components.stack;
for (let i = 0; i < this.level + level; i++) {
frame = frame.caller;
this.stack = this.stack.replace(/^.*\n/, "");
}
this.fileName = frame.filename;
this.lineNumber = frame.lineNumber;
}
});
/**
* Constructs a new Module class and instantiates an instance into the current
* module global object.

View File

@@ -28,12 +28,7 @@ memoize(this, "Commands", function () {
return obj.Commands;
});
const FailedAssertion = Class("FailedAssertion", Error, {
init: function (message) {
update(this, Error(message))
this.message = message;
}
});
const FailedAssertion = Class("FailedAssertion", ErrorBase);
function wrapCallback(fn)
fn.wrapper = function wrappedCallback () {
@@ -125,7 +120,7 @@ const Util = Module("Util", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReference])
*/
assert: function (condition, message) {
if (!condition)
throw FailedAssertion(message);
throw FailedAssertion(message, 1);
},
get chromePackages() {