diff options
-rw-r--r-- | lib/pure/unittest.nim | 11 | ||||
-rw-r--r-- | tests/js/tunittest_error2.nim | 16 |
2 files changed, 24 insertions, 3 deletions
diff --git a/lib/pure/unittest.nim b/lib/pure/unittest.nim index c387e14e1..21087e8ef 100644 --- a/lib/pure/unittest.nim +++ b/lib/pure/unittest.nim @@ -515,7 +515,9 @@ template suite*(name, body) {.dirty.} = finally: suiteEnded() -template exceptionTypeName(e: typed): string = $e.name +proc exceptionTypeName(e: ref Exception): string {.inline.} = + if e == nil: "<foreign exception>" + else: $e.name template test*(name, body) {.dirty.} = ## Define a single test case identified by `name`. @@ -552,8 +554,11 @@ template test*(name, body) {.dirty.} = let e = getCurrentException() let eTypeDesc = "[" & exceptionTypeName(e) & "]" checkpoint("Unhandled exception: " & getCurrentExceptionMsg() & " " & eTypeDesc) - var stackTrace {.inject.} = e.getStackTrace() - fail() + if e == nil: # foreign + fail() + else: + var stackTrace {.inject.} = e.getStackTrace() + fail() finally: if testStatusIMPL == TestStatus.FAILED: diff --git a/tests/js/tunittest_error2.nim b/tests/js/tunittest_error2.nim new file mode 100644 index 000000000..273e39d9d --- /dev/null +++ b/tests/js/tunittest_error2.nim @@ -0,0 +1,16 @@ +discard """ + exitcode: 1 + outputsub: ''' +Unhandled exception: Cannot read property 'charCodeAt' of null [<foreign exception>] +[FAILED] Bad test + ''' + matrix: "-d:nodejs" + targets: "js" + joinable: false +""" + +# bug #16978 +import unittest +test "Bad test": + var x: cstring = nil + let y = x[0] |