summary refs log blame commit diff stats
path: root/tests/assert/tfailedassert.nim
blob: f0ca149f8dfc6454f2c3e5b5f54249d50cea6b8b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12

             
                                       

                                      
                                             





                                                
                                


















                                                
 
                                           
















                                                            
discard """
  output: '''
WARNING: false first assertion from bar
ERROR: false second assertion from bar
-1
tfailedassert.nim:27 false assertion from foo
'''
"""

type
  TLineInfo = tuple[filename: string, line: int]

  TMyError = object of Exception
    lineinfo: TLineInfo

  EMyError = ref TMyError

# module-wide policy to change the failed assert
# exception type in order to include a lineinfo
onFailedAssert(msg):
  var e = new(TMyError)
  e.msg = msg
  e.lineinfo = instantiationInfo(-2)
  raise e

proc foo =
  assert(false, "assertion from foo")

proc bar: int =
  # local overrides that are active only
  # in this proc
  onFailedAssert(msg): echo "WARNING: " & msg

  assert(false, "first assertion from bar")

  onFailedAssert(msg):
    echo "ERROR: " & msg
    return -1

  assert(false, "second assertion from bar")
  return 10

echo("")
echo(bar())

try:
  foo()
except:
  let e = EMyError(getCurrentException())
  echo e.lineinfo.filename, ":", e.lineinfo.line, " ", e.msg