Correctly format stack traces for errors with multiline messages

- Fixes #1526
This commit is contained in:
Steve Gravrock
2018-03-10 08:50:22 -08:00
parent 6f960d8662
commit 05015a8b3e
6 changed files with 165 additions and 46 deletions

View File

@@ -1,13 +1,14 @@
getJasmineRequireObj().StackTrace = function(j$) {
function StackTrace(rawTrace) {
var lines = rawTrace
function StackTrace(error) {
var lines = error.stack
.split('\n')
.filter(function(line) { return line !== ''; });
if (lines[0].match(/^Error/)) {
this.message = lines.shift();
} else {
this.message = undefined;
var extractResult = extractMessage(error.message, lines);
if (extractResult) {
this.message = extractResult.message;
lines = extractResult.remainder;
}
var parseResult = tryParseFrames(lines);
@@ -75,6 +76,34 @@ getJasmineRequireObj().StackTrace = function(j$) {
}
}
}
function extractMessage(message, stackLines) {
var len = messagePrefixLength(message, stackLines);
if (len > 0) {
return {
message: stackLines.slice(0, len).join('\n'),
remainder: stackLines.slice(len)
};
}
}
function messagePrefixLength(message, stackLines) {
if (!stackLines[0].match(/^Error/)) {
return 0;
}
var messageLines = message.split('\n');
var i;
for (i = 1; i < messageLines.length; i++) {
if (messageLines[i] !== stackLines[i]) {
return 0;
}
}
return messageLines.length;
}
return StackTrace;
};