Handle newlines in error messages, fixes #1495

This commit is contained in:
Roderic Day 2017-10-10 22:53:19 -04:00 committed by Pierre-Yves Gérardy
parent 7f2ff03ecf
commit 69045af46c
3 changed files with 23 additions and 1 deletions

View file

@ -21,6 +21,13 @@
- core: don't call `onremove` on the children of components that return null from the view [#1921](https://github.com/MithrilJS/mithril.js/issues/1921) [octavore](https://github.com/octavore) ([#1922](https://github.com/MithrilJS/mithril.js/pull/1922)) - core: don't call `onremove` on the children of components that return null from the view [#1921](https://github.com/MithrilJS/mithril.js/issues/1921) [octavore](https://github.com/octavore) ([#1922](https://github.com/MithrilJS/mithril.js/pull/1922))
- hypertext: correct handling of shared attributes object passed to `m()`. Will copy attributes when it's necessary [#1941](https://github.com/MithrilJS/mithril.js/issues/1941) [s-ilya](https://github.com/s-ilya) ([#1942](https://github.com/MithrilJS/mithril.js/pull/1942)) - hypertext: correct handling of shared attributes object passed to `m()`. Will copy attributes when it's necessary [#1941](https://github.com/MithrilJS/mithril.js/issues/1941) [s-ilya](https://github.com/s-ilya) ([#1942](https://github.com/MithrilJS/mithril.js/pull/1942))
#### Ospec improvements
- Added support for async functions and promises in tests - ([#1928](https://github.com/MithrilJS/mithril.js/pull/1928))
- Error handling for async tests with `done` callbacks supports error as first argument
- Error messages which include newline characters do not swallow the stack trace [#1495](https://github.com/MithrilJS/mithril.js/issues/1495) ([#1984](https://github.com/MithrilJS/mithril.js/pull/1984), [@ RodericDay](https://github.com/RodericDay))
--- ---
### v1.1.5 ### v1.1.5

View file

@ -49,6 +49,9 @@ module.exports = new function init(name) {
spy.callCount = 0 spy.callCount = 0
return spy return spy
} }
o.cleanStackTrace = function(stack) {
return stack.match(/^(?:(?!Error|[\/\\]ospec[\/\\]ospec\.js).)*$/gm).pop()
}
o.run = function() { o.run = function() {
results = [] results = []
start = new Date start = new Date
@ -235,7 +238,7 @@ module.exports = new function init(name) {
var status = 0 var status = 0
for (var i = 0, r; r = results[i]; i++) { for (var i = 0, r; r = results[i]; i++) {
if (!r.pass) { if (!r.pass) {
var stackTrace = r.error.match(/^(?:(?!Error|[\/\\]ospec[\/\\]ospec\.js).)*$/m) var stackTrace = o.cleanStackTrace(r.error)
console.error(r.context + ":\n" + highlight(r.message) + (stackTrace ? "\n\n" + stackTrace + "\n\n" : ""), hasProcess ? "" : "color:red", hasProcess ? "" : "color:black") console.error(r.context + ":\n" + highlight(r.message) + (stackTrace ? "\n\n" + stackTrace + "\n\n" : ""), hasProcess ? "" : "color:red", hasProcess ? "" : "color:black")
status = 1 status = 1
} }

View file

@ -149,6 +149,18 @@ o.spec("ospec", function() {
}) })
}) })
o.spec('stack trace cleaner', function() {
o('handles line breaks', function() {
try {
throw new Error('line\nbreak')
} catch(error) {
var trace = o.cleanStackTrace(error.stack)
o(trace).notEquals('break')
o(trace.includes("test-ospec.js")).equals(true)
}
})
})
o.spec("async promise", function() { o.spec("async promise", function() {
var a = 0, b = 0 var a = 0, b = 0