summary refs log tree commit diff stats
path: root/lib/pure/unittest.nim
diff options
context:
space:
mode:
authorTimothee Cour <timothee.cour2@gmail.com>2021-02-13 00:51:46 -0800
committerGitHub <noreply@github.com>2021-02-13 09:51:46 +0100
commitfff5819ee728aa62fd857982f799ecc0fac0fd5e (patch)
tree2623aa966ef8911c01f98e6a705fc0aa98373809 /lib/pure/unittest.nim
parent21e60b9a9705ac9cfa8b792d6d264bbaa75a76c7 (diff)
downloadNim-fff5819ee728aa62fd857982f799ecc0fac0fd5e.tar.gz
fix #16978 unittest js foreign exception (#16998)
* fix #16978 unittest js foreign exception
Diffstat (limited to 'lib/pure/unittest.nim')
-rw-r--r--lib/pure/unittest.nim11
1 files changed, 8 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: