stack-trace
Advanced tools
Comparing version 0.0.2 to 0.0.3
@@ -21,3 +21,3 @@ exports.get = function(belowFn) { | ||
return lines.map(function(line) { | ||
var lineMatch = line.match(/at ([^\s]+)\s+\((.+?):(\d+):(\d+)\)/); | ||
var lineMatch = line.match(/at ([^\s]+)\s+\((?:(.+?):(\d+):(\d+)|([^)]+))\)/); | ||
var methodMatch = lineMatch[1].match(/([^\.]+)(?:\.(.+))?/); | ||
@@ -30,2 +30,3 @@ var object = methodMatch[1]; | ||
var typeName = 'Object'; | ||
var isNative = (lineMatch[5] === 'native'); | ||
@@ -43,8 +44,9 @@ if (method) { | ||
var properties = { | ||
fileName: lineMatch[2], | ||
lineNumber: parseInt(lineMatch[3], 10), | ||
fileName: lineMatch[2] || null, | ||
lineNumber: parseInt(lineMatch[3], 10) || null, | ||
functionName: functionName, | ||
typeName: typeName, | ||
methodName: methodName, | ||
columnNumber: parseInt(lineMatch[4], 10), | ||
columnNumber: parseInt(lineMatch[4], 10) || null, | ||
'native': isNative, | ||
}; | ||
@@ -59,3 +61,7 @@ | ||
for (var property in properties) { | ||
var method = 'get' + property.substr(0, 1).toUpperCase() + property.substr(1); | ||
var prefix = 'get'; | ||
if (property === 'native') { | ||
prefix = 'is'; | ||
} | ||
var method = prefix + property.substr(0, 1).toUpperCase() + property.substr(1); | ||
@@ -62,0 +68,0 @@ (function(property) { |
@@ -5,3 +5,3 @@ { | ||
"description": "Get v8 stack traces as an array of CallSite objects.", | ||
"version": "0.0.2", | ||
"version": "0.0.3", | ||
"homepage": "https://github.com/felixge/node-stack-trace", | ||
@@ -8,0 +8,0 @@ "repository": { |
@@ -58,3 +58,8 @@ # stack-trace | ||
* getColumnNumber | ||
* isNative | ||
Note: Except `getFunctionName()`, all of the above methods return exactly the | ||
same values as you would get from `stackTrace.get()`. `getFunctionName()` | ||
is sometimes a little different, but still useful. | ||
### CallSite | ||
@@ -61,0 +66,0 @@ |
@@ -22,40 +22,64 @@ var common = require('../common'); | ||
(function testSymmetry() { | ||
var realTrace = stackTrace.get(); var err = new Error('something went wrong'); | ||
var parsedTrace = stackTrace.parse(err); | ||
(function testCompareRealWithParsedStackTrace() { | ||
var realTrace = stackTrace.get(); var err = new Error('something went wrong'); | ||
var parsedTrace = stackTrace.parse(err); | ||
realTrace.forEach(function(real, i) { | ||
var parsed = parsedTrace[i]; | ||
realTrace.forEach(function(real, i) { | ||
var parsed = parsedTrace[i]; | ||
function compare(method, exceptions) { | ||
var realValue = real[method](); | ||
var parsedValue = parsed[method](); | ||
function compare(method, exceptions) { | ||
var realValue = real[method](); | ||
var parsedValue = parsed[method](); | ||
if (exceptions && exceptions[i]) { | ||
realValue = exceptions[i]; | ||
} | ||
if (exceptions && exceptions[i]) { | ||
realValue = exceptions[i]; | ||
} | ||
var realJson = JSON.stringify(realValue); | ||
var parsedJson = JSON.stringify(parsedValue); | ||
var realJson = JSON.stringify(realValue); | ||
var parsedJson = JSON.stringify(parsedValue); | ||
var message = | ||
method + ': ' + realJson + ' != ' + parsedJson + ' (#' + i + ')'; | ||
var message = | ||
method + ': ' + realJson + ' != ' + parsedJson + ' (#' + i + ')'; | ||
assert.strictEqual(realValue, parsedValue, message); | ||
} | ||
assert.strictEqual(realValue, parsedValue, message); | ||
} | ||
compare('getFileName'); | ||
compare('getFunctionName', { | ||
3: 'Object..js', | ||
5: 'Function._load', | ||
6: 'Array.0', | ||
7: 'EventEmitter._tickCallback', | ||
}); | ||
compare('getTypeName'); | ||
compare('getMethodName'); | ||
compare('getLineNumber'); | ||
compare('getColumnNumber', { | ||
0: 49 | ||
}); | ||
compare('getFileName'); | ||
compare('getFunctionName', { | ||
3: 'Object..js', | ||
5: 'Function._load', | ||
6: 'Array.0', | ||
7: 'EventEmitter._tickCallback', | ||
}); | ||
compare('getTypeName'); | ||
compare('getMethodName'); | ||
compare('getLineNumber'); | ||
compare('getColumnNumber', { | ||
0: 47 | ||
}); | ||
compare('isNative'); | ||
}); | ||
})(); | ||
(function testStackWithNativeCall() { | ||
var err = {}; | ||
err.stack = | ||
'AssertionError: true == false\n' + | ||
' at Test.fn (/Users/felix/code/node-fast-or-slow/test/fast/example/test-example.js:6:10)\n' + | ||
' at Test.run (/Users/felix/code/node-fast-or-slow/lib/test.js:45:10)\n' + | ||
' at TestCase.runNext (/Users/felix/code/node-fast-or-slow/lib/test_case.js:73:8)\n' + | ||
' at TestCase.run (/Users/felix/code/node-fast-or-slow/lib/test_case.js:61:8)\n' + | ||
' at Array.0 (native)\n' + | ||
' at EventEmitter._tickCallback (node.js:126:26)'; | ||
var trace = stackTrace.parse(err); | ||
var nativeCallSite = trace[4]; | ||
assert.strictEqual(nativeCallSite.getFileName(), null); | ||
assert.strictEqual(nativeCallSite.getFunctionName(), 'Array.0'); | ||
assert.strictEqual(nativeCallSite.getTypeName(), 'Array'); | ||
assert.strictEqual(nativeCallSite.getMethodName(), '0'); | ||
assert.strictEqual(nativeCallSite.getLineNumber(), null); | ||
assert.strictEqual(nativeCallSite.getColumnNumber(), null); | ||
assert.strictEqual(nativeCallSite.isNative(), true); | ||
})(); |
10588
161
90