summary refs log tree commit diff stats
path: root/tests/assert/tassert_c.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/assert/tassert_c.nim')
-rw-r--r--tests/assert/tassert_c.nim40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/assert/tassert_c.nim b/tests/assert/tassert_c.nim
new file mode 100644
index 000000000..e3e3b8147
--- /dev/null
+++ b/tests/assert/tassert_c.nim
@@ -0,0 +1,40 @@
+discard """
+  matrix: "-d:nimPreviewSlimSystem --stackTrace:on --excessiveStackTrace:off"
+  output: '''true'''
+"""
+import std/assertions
+const expected = """
+tassert_c.nim(35)        tassert_c
+tassert_c.nim(34)        foo
+assertions.nim(*)       failedAssertImpl
+assertions.nim(*)       raiseAssert
+"""
+
+proc tmatch(x, p: string): bool =
+  var i = 0
+  var k = 0
+  while i < p.len:
+    if p[i] == '*':
+      let oldk = k
+      while k < x.len and x[k] in {'0'..'9'}: inc k
+      # no digit skipped?
+      if oldk == k: return false
+      inc i
+    elif k < x.len and p[i] == x[k]:
+      inc i
+      inc k
+    else:
+      return false
+  while k < x.len and x[k] in {' ', '\L', '\C'}: inc k
+  result = i >= p.len and k >= x.len
+
+
+try:
+  proc foo() =
+    assert(false)
+  foo()
+except AssertionDefect:
+  let e = getCurrentException()
+  let trace = e.getStackTrace
+  if tmatch(trace, expected): echo true
+  else: echo "wrong trace:\n" & trace