Skip to content

Commit 0accebe

Browse files
committed
Stack trace for asserts shouldn't include assert module
1 parent dd35637 commit 0accebe

1 file changed

Lines changed: 22 additions & 24 deletions

File tree

lib/assert.js

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,16 @@ var assert = exports;
3535
// 2. The AssertionError is defined in assert.
3636
// new assert.AssertionError({message: message, actual: actual, expected: expected})
3737

38-
assert.AssertionError = function AssertionError(options) {
38+
assert.AssertionError = function AssertionError (options) {
3939
this.name = "AssertionError";
4040
this.message = options.message;
4141
this.actual = options.actual;
4242
this.expected = options.expected;
4343
this.operator = options.operator;
44+
var stackStartFunction = options.stackStartFunction || fail;
4445

45-
//v8 specific
4646
if (Error.captureStackTrace) {
47-
Error.captureStackTrace(this, fail);
48-
//node specific, removes the node machinery stack frames
49-
if (typeof(__filename) !== undefined) {
50-
var stack = this.stack.split('\n');
51-
for (var i = stack.length - 1; i >= 0; i--) {
52-
if (stack[i].indexOf(__filename) != -1) {
53-
this.stack = stack.slice(0, i+2).join('\n');
54-
break;
55-
}
56-
}
57-
}
47+
Error.captureStackTrace(this, stackStartFunction);
5848
}
5949
};
6050

@@ -85,12 +75,13 @@ assert.AssertionError.__proto__ = Error.prototype;
8575
// both the actual and expected values to the assertion error for
8676
// display purposes.
8777

88-
function fail(actual, expected, message, operator) {
78+
function fail(actual, expected, message, operator, stackStartFunction) {
8979
throw new assert.AssertionError({
9080
message: message,
9181
actual: actual,
9282
expected: expected,
93-
operator: operator
83+
operator: operator,
84+
stackStartFunction: stackStartFunction
9485
});
9586
}
9687

@@ -105,30 +96,32 @@ assert.fail = fail;
10596
// assert.strictEqual(true, guard, message_opt);.
10697

10798
assert.ok = function ok(value, message) {
108-
if (!!!value) fail(value, true, message, "==");
99+
if (!!!value) fail(value, true, message, "==", assert.ok);
109100
};
110101

111102
// 5. The equality assertion tests shallow, coercive equality with
112103
// ==.
113104
// assert.equal(actual, expected, message_opt);
114105

115106
assert.equal = function equal(actual, expected, message) {
116-
if (actual != expected) fail(actual, expected, message, "==");
107+
if (actual != expected) fail(actual, expected, message, "==", assert.equal);
117108
};
118109

119110
// 6. The non-equality assertion tests for whether two objects are not equal
120111
// with != assert.notEqual(actual, expected, message_opt);
121112

122113
assert.notEqual = function notEqual(actual, expected, message) {
123-
if (actual == expected) fail(actual, expected, message, "!=");
114+
if (actual == expected) {
115+
fail(actual, expected, message, "!=", assert.notEqual);
116+
}
124117
};
125118

126119
// 7. The equivalence assertion tests a deep equality relation.
127120
// assert.deepEqual(actual, expected, message_opt);
128121

129-
exports.deepEqual = function deepEqual(actual, expected, message) {
122+
assert.deepEqual = function deepEqual(actual, expected, message) {
130123
if (!_deepEqual(actual, expected)) {
131-
fail(actual, expected, message, "deepEqual");
124+
fail(actual, expected, message, "deepEqual", assert.deepEqual);
132125
}
133126
};
134127

@@ -212,24 +205,28 @@ function objEquiv (a, b) {
212205
// 8. The non-equivalence assertion tests for any deep inequality.
213206
// assert.notDeepEqual(actual, expected, message_opt);
214207

215-
exports.notDeepEqual = function notDeepEqual(actual, expected, message) {
208+
assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
216209
if (_deepEqual(actual, expected)) {
217-
fail(actual, expected, message, "notDeepEqual");
210+
fail(actual, expected, message, "notDeepEqual", assert.notDeepEqual);
218211
}
219212
};
220213

221214
// 9. The strict equality assertion tests strict equality, as determined by ===.
222215
// assert.strictEqual(actual, expected, message_opt);
223216

224217
assert.strictEqual = function strictEqual(actual, expected, message) {
225-
if (actual !== expected) fail(actual, expected, message, "===");
218+
if (actual !== expected) {
219+
fail(actual, expected, message, "===", assert.strictEqual);
220+
}
226221
};
227222

228223
// 10. The strict non-equality assertion tests for strict inequality, as determined by !==.
229224
// assert.notStrictEqual(actual, expected, message_opt);
230225

231226
assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
232-
if (actual === expected) fail(actual, expected, message, "!==");
227+
if (actual === expected) {
228+
fail(actual, expected, message, "!==", assert.notStrictEqual);
229+
}
233230
};
234231

235232
function _throws (shouldThrow, block, err, message) {
@@ -285,3 +282,4 @@ assert.throws = function(block, /*optional*/error, /*optional*/message) {
285282
assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
286283
_throws.apply(this, [false].concat(pSlice.call(arguments)));
287284
};
285+

0 commit comments

Comments
 (0)