123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- discard """
- output: '''
- `false` first assertion from bar
- `false` second assertion from bar
- -1
- '''
- """
- from strutils import endsWith
- type
- TLineInfo = tuple[filename: string, line: int, column: int]
- TMyError = object of Exception
- lineinfo: TLineInfo
- EMyError = ref TMyError
- # NOTE: when entering newlines, adjust `expectedEnd` outputs
- try:
- doAssert(false, "msg1") # doAssert test
- except AssertionDefect as e:
- assert e.msg.endsWith "tassert2.nim(20, 11) `false` msg1"
- try:
- assert false # assert test with no msg
- except AssertionDefect as e:
- assert e.msg.endsWith "tassert2.nim(25, 3) `false` "
- try:
- let a = 1
- doAssert(a+a==1) # assert test with Ast expression
- # BUG: const folding would make "1+1==1" appear as `false` in
- # assert message
- except AssertionDefect as e:
- assert e.msg.endsWith "`a + a == 1` "
- try:
- let a = 1
- doAssert a+a==1 # ditto with `doAssert` and no parens
- except AssertionDefect as e:
- assert e.msg.endsWith "`a + a == 1` "
- proc fooStatic() =
- # protect against https://github.com/nim-lang/Nim/issues/8758
- static: doAssert(true)
- fooStatic()
- block:
- # scope-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 msg[^32..^1]
- assert(false, "first assertion from bar")
- onFailedAssert(msg):
- echo msg[^33..^1]
- return -1
- assert(false, "second assertion from bar")
- return 10
- echo(bar())
- try:
- foo()
- except:
- let e = EMyError(getCurrentException())
- assert e.msg.endsWith "tassert2.nim(62, 11) `false` assertion from foo"
- block: ## checks for issue https://github.com/nim-lang/Nim/issues/8518
- template fun(a: string): string =
- const pattern = a & a
- pattern
- try:
- doAssert fun("foo1") == fun("foo2"), "mymsg"
- except AssertionDefect as e:
- # used to expand out the template instantiaiton, sometimes filling hundreds of lines
- assert e.msg.endsWith ""
- block: ## checks for issue https://github.com/nim-lang/Nim/issues/9301
- try:
- doAssert 1 + 1 == 3
- except AssertionDefect as e:
- # used to const fold as false
- assert e.msg.endsWith "tassert2.nim(100, 5) `1 + 1 == 3` "
- block: ## checks AST isn't transformed as it used to
- let a = 1
- try:
- doAssert a > 1
- except AssertionDefect as e:
- # used to rewrite as `1 < a`
- assert e.msg.endsWith "tassert2.nim(108, 5) `a > 1` "
|