summaryrefslogtreecommitdiff
path: root/lib/assert.js
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2009-12-29 20:14:58 +0100
committerRyan Dahl <ry@tinyclouds.org>2009-12-29 20:15:05 +0100
commit0accebe58343d60e3f2f9af3971114e685837d5b (patch)
treed96da154cca74054d0633072cb7a42e172bc27cd /lib/assert.js
parentdd35637603ca338c9fcbbeedecf695450fcdc95d (diff)
downloadnode-0accebe58343d60e3f2f9af3971114e685837d5b.tar.gz
Stack trace for asserts shouldn't include assert module
Diffstat (limited to 'lib/assert.js')
-rw-r--r--lib/assert.js46
1 files changed, 22 insertions, 24 deletions
diff --git a/lib/assert.js b/lib/assert.js
index 4704d9a60..70eda84ff 100644
--- a/lib/assert.js
+++ b/lib/assert.js
@@ -35,26 +35,16 @@ var assert = exports;
// 2. The AssertionError is defined in assert.
// new assert.AssertionError({message: message, actual: actual, expected: expected})
-assert.AssertionError = function AssertionError(options) {
+assert.AssertionError = function AssertionError (options) {
this.name = "AssertionError";
this.message = options.message;
this.actual = options.actual;
this.expected = options.expected;
this.operator = options.operator;
+ var stackStartFunction = options.stackStartFunction || fail;
- //v8 specific
if (Error.captureStackTrace) {
- Error.captureStackTrace(this, fail);
- //node specific, removes the node machinery stack frames
- if (typeof(__filename) !== undefined) {
- var stack = this.stack.split('\n');
- for (var i = stack.length - 1; i >= 0; i--) {
- if (stack[i].indexOf(__filename) != -1) {
- this.stack = stack.slice(0, i+2).join('\n');
- break;
- }
- }
- }
+ Error.captureStackTrace(this, stackStartFunction);
}
};
@@ -85,12 +75,13 @@ assert.AssertionError.__proto__ = Error.prototype;
// both the actual and expected values to the assertion error for
// display purposes.
-function fail(actual, expected, message, operator) {
+function fail(actual, expected, message, operator, stackStartFunction) {
throw new assert.AssertionError({
message: message,
actual: actual,
expected: expected,
- operator: operator
+ operator: operator,
+ stackStartFunction: stackStartFunction
});
}
@@ -105,7 +96,7 @@ assert.fail = fail;
// assert.strictEqual(true, guard, message_opt);.
assert.ok = function ok(value, message) {
- if (!!!value) fail(value, true, message, "==");
+ if (!!!value) fail(value, true, message, "==", assert.ok);
};
// 5. The equality assertion tests shallow, coercive equality with
@@ -113,22 +104,24 @@ assert.ok = function ok(value, message) {
// assert.equal(actual, expected, message_opt);
assert.equal = function equal(actual, expected, message) {
- if (actual != expected) fail(actual, expected, message, "==");
+ if (actual != expected) fail(actual, expected, message, "==", assert.equal);
};
// 6. The non-equality assertion tests for whether two objects are not equal
// with != assert.notEqual(actual, expected, message_opt);
assert.notEqual = function notEqual(actual, expected, message) {
- if (actual == expected) fail(actual, expected, message, "!=");
+ if (actual == expected) {
+ fail(actual, expected, message, "!=", assert.notEqual);
+ }
};
// 7. The equivalence assertion tests a deep equality relation.
// assert.deepEqual(actual, expected, message_opt);
-exports.deepEqual = function deepEqual(actual, expected, message) {
+assert.deepEqual = function deepEqual(actual, expected, message) {
if (!_deepEqual(actual, expected)) {
- fail(actual, expected, message, "deepEqual");
+ fail(actual, expected, message, "deepEqual", assert.deepEqual);
}
};
@@ -212,9 +205,9 @@ function objEquiv (a, b) {
// 8. The non-equivalence assertion tests for any deep inequality.
// assert.notDeepEqual(actual, expected, message_opt);
-exports.notDeepEqual = function notDeepEqual(actual, expected, message) {
+assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
if (_deepEqual(actual, expected)) {
- fail(actual, expected, message, "notDeepEqual");
+ fail(actual, expected, message, "notDeepEqual", assert.notDeepEqual);
}
};
@@ -222,14 +215,18 @@ exports.notDeepEqual = function notDeepEqual(actual, expected, message) {
// assert.strictEqual(actual, expected, message_opt);
assert.strictEqual = function strictEqual(actual, expected, message) {
- if (actual !== expected) fail(actual, expected, message, "===");
+ if (actual !== expected) {
+ fail(actual, expected, message, "===", assert.strictEqual);
+ }
};
// 10. The strict non-equality assertion tests for strict inequality, as determined by !==.
// assert.notStrictEqual(actual, expected, message_opt);
assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
- if (actual === expected) fail(actual, expected, message, "!==");
+ if (actual === expected) {
+ fail(actual, expected, message, "!==", assert.notStrictEqual);
+ }
};
function _throws (shouldThrow, block, err, message) {
@@ -285,3 +282,4 @@ assert.throws = function(block, /*optional*/error, /*optional*/message) {
assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
_throws.apply(this, [false].concat(pSlice.call(arguments)));
};
+