diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/assert/tfailedassert.nim | 89 | ||||
-rw-r--r-- | tests/concepts/texplain.nim | 89 |
2 files changed, 112 insertions, 66 deletions
diff --git a/tests/assert/tfailedassert.nim b/tests/assert/tfailedassert.nim index c3231bb8d..94de2743a 100644 --- a/tests/assert/tfailedassert.nim +++ b/tests/assert/tfailedassert.nim @@ -9,12 +9,13 @@ test6:ok test7:ok -1 tfailedassert.nim -test7:ok +test8:ok +test9:ok +test10:ok +test11:ok ''' """ - import testhelper - type TLineInfo = tuple[filename: string, line: int, column: int] TMyError = object of Exception @@ -23,7 +24,6 @@ type echo("") - # NOTE: when entering newlines, adjust `expectedEnd` ouptuts try: @@ -60,37 +60,68 @@ proc fooStatic() = static: doAssert(true) fooStatic() -# 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 + +block: + # scope-wide policy to change the failed assert + # exception type in order to include a lineinfo onFailedAssert(msg): - checkMsg(msg, "tfailedassert.nim(80, 9) `false` first assertion from bar", "test6") + var e = new(TMyError) + e.msg = msg + e.lineinfo = instantiationInfo(-2) + raise e - assert(false, "first assertion from bar") + proc foo = + assert(false, "assertion from foo") - onFailedAssert(msg): - checkMsg(msg, "tfailedassert.nim(86, 9) `false` second assertion from bar", "test7") - return -1 - assert(false, "second assertion from bar") - return 10 + proc bar: int = + # local overrides that are active only in this proc + onFailedAssert(msg): + checkMsg(msg, "tfailedassert.nim(85, 11) `false` first assertion from bar", "test6") -echo(bar()) + assert(false, "first assertion from bar") -try: - foo() -except: - let e = EMyError(getCurrentException()) - echo e.lineinfo.filename - checkMsg(e.msg, "tfailedassert.nim(72, 9) `false` assertion from foo", "test7") + onFailedAssert(msg): + checkMsg(msg, "tfailedassert.nim(91, 11) `false` second assertion from bar", "test7") + return -1 + + assert(false, "second assertion from bar") + return 10 + + echo(bar()) + + try: + foo() + except: + let e = EMyError(getCurrentException()) + echo e.lineinfo.filename + checkMsg(e.msg, "tfailedassert.nim(77, 11) `false` assertion from foo", "test8") + +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 AssertionError as e: + # used to expand out the template instantiaiton, sometimes filling hundreds of lines + checkMsg(e.msg, """tfailedassert.nim(109, 14) `fun("foo1") == fun("foo2")` mymsg""", "test9") + +block: ## checks for issue https://github.com/nim-lang/Nim/issues/9301 + try: + doAssert 1 + 1 == 3 + except AssertionError as e: + # used to const fold as false + checkMsg(e.msg, "tfailedassert.nim(116, 14) `1 + 1 == 3` ", "test10") + +block: ## checks AST isnt' transformed as it used to + let a = 1 + try: + doAssert a > 1 + except AssertionError as e: + # used to rewrite as `1 < a` + checkMsg(e.msg, "tfailedassert.nim(124, 14) `a > 1` ", "test11") diff --git a/tests/concepts/texplain.nim b/tests/concepts/texplain.nim index 4925a25b3..5c8e02440 100644 --- a/tests/concepts/texplain.nim +++ b/tests/concepts/texplain.nim @@ -1,69 +1,84 @@ discard """ cmd: "nim c --verbosity:0 --colors:off $file" nimout: ''' -texplain.nim(103, 10) Hint: Non-matching candidates for e(y) +Hint: texplain [Processing] +texplain.nim(118, 10) Hint: Non-matching candidates for e(y) proc e(i: int): int -texplain.nim(106, 7) Hint: Non-matching candidates for e(10) +texplain.nim(121, 7) Hint: Non-matching candidates for e(10) proc e(o: ExplainedConcept): int -texplain.nim(69, 6) ExplainedConcept: undeclared field: 'foo' -texplain.nim(69, 6) ExplainedConcept: undeclared field: '.' -texplain.nim(69, 6) ExplainedConcept: expression '.' cannot be called -texplain.nim(69, 5) ExplainedConcept: concept predicate failed -texplain.nim(70, 6) ExplainedConcept: undeclared field: 'bar' -texplain.nim(70, 6) ExplainedConcept: undeclared field: '.' -texplain.nim(70, 6) ExplainedConcept: expression '.' cannot be called -texplain.nim(69, 5) ExplainedConcept: concept predicate failed - -texplain.nim(109, 10) Hint: Non-matching candidates for e(10) +texplain.nim(84, 6) ExplainedConcept: undeclared field: 'foo' +texplain.nim(84, 6) ExplainedConcept: undeclared field: '.' +texplain.nim(84, 6) ExplainedConcept: expression '.' cannot be called +texplain.nim(84, 5) ExplainedConcept: concept predicate failed +texplain.nim(85, 6) ExplainedConcept: undeclared field: 'bar' +texplain.nim(85, 6) ExplainedConcept: undeclared field: '.' +texplain.nim(85, 6) ExplainedConcept: expression '.' cannot be called +texplain.nim(84, 5) ExplainedConcept: concept predicate failed + +texplain.nim(124, 10) Hint: Non-matching candidates for e(10) proc e(o: ExplainedConcept): int -texplain.nim(69, 6) ExplainedConcept: undeclared field: 'foo' -texplain.nim(69, 6) ExplainedConcept: undeclared field: '.' -texplain.nim(69, 6) ExplainedConcept: expression '.' cannot be called -texplain.nim(69, 5) ExplainedConcept: concept predicate failed -texplain.nim(70, 6) ExplainedConcept: undeclared field: 'bar' -texplain.nim(70, 6) ExplainedConcept: undeclared field: '.' -texplain.nim(70, 6) ExplainedConcept: expression '.' cannot be called -texplain.nim(69, 5) ExplainedConcept: concept predicate failed - -texplain.nim(113, 20) Error: type mismatch: got <NonMatchingType> +texplain.nim(84, 6) ExplainedConcept: undeclared field: 'foo' +texplain.nim(84, 6) ExplainedConcept: undeclared field: '.' +texplain.nim(84, 6) ExplainedConcept: expression '.' cannot be called +texplain.nim(84, 5) ExplainedConcept: concept predicate failed +texplain.nim(85, 6) ExplainedConcept: undeclared field: 'bar' +texplain.nim(85, 6) ExplainedConcept: undeclared field: '.' +texplain.nim(85, 6) ExplainedConcept: expression '.' cannot be called +texplain.nim(84, 5) ExplainedConcept: concept predicate failed + +texplain.nim(128, 20) Error: type mismatch: got <NonMatchingType> but expected one of: proc e(o: ExplainedConcept): int -texplain.nim(69, 5) ExplainedConcept: concept predicate failed +texplain.nim(128, 9) template/generic instantiation of `assert` from here +texplain.nim(84, 5) ExplainedConcept: concept predicate failed proc e(i: int): int expression: e(n) -texplain.nim(114, 20) Error: type mismatch: got <NonMatchingType> +texplain.nim(129, 20) Error: type mismatch: got <NonMatchingType> but expected one of: proc r(o: RegularConcept): int -texplain.nim(73, 5) RegularConcept: concept predicate failed +texplain.nim(129, 9) template/generic instantiation of `assert` from here +texplain.nim(88, 5) RegularConcept: concept predicate failed proc r[T](a: SomeNumber; b: T; c: auto) proc r(i: string): int expression: r(n) -texplain.nim(115, 20) Hint: Non-matching candidates for r(y) +texplain.nim(130, 20) Hint: Non-matching candidates for r(y) proc r[T](a: SomeNumber; b: T; c: auto) proc r(i: string): int -texplain.nim(123, 2) Error: type mismatch: got <MatchingType> +texplain.nim(138, 2) Error: type mismatch: got <MatchingType> but expected one of: proc f(o: NestedConcept) -texplain.nim(73, 6) RegularConcept: undeclared field: 'foo' -texplain.nim(73, 6) RegularConcept: undeclared field: '.' -texplain.nim(73, 6) RegularConcept: expression '.' cannot be called -texplain.nim(73, 5) RegularConcept: concept predicate failed -texplain.nim(74, 6) RegularConcept: undeclared field: 'bar' -texplain.nim(74, 6) RegularConcept: undeclared field: '.' -texplain.nim(74, 6) RegularConcept: expression '.' cannot be called -texplain.nim(73, 5) RegularConcept: concept predicate failed -texplain.nim(77, 5) NestedConcept: concept predicate failed +texplain.nim(88, 6) RegularConcept: undeclared field: 'foo' +texplain.nim(88, 6) RegularConcept: undeclared field: '.' +texplain.nim(88, 6) RegularConcept: expression '.' cannot be called +texplain.nim(88, 5) RegularConcept: concept predicate failed +texplain.nim(89, 6) RegularConcept: undeclared field: 'bar' +texplain.nim(89, 6) RegularConcept: undeclared field: '.' +texplain.nim(89, 6) RegularConcept: expression '.' cannot be called +texplain.nim(88, 5) RegularConcept: concept predicate failed +texplain.nim(92, 5) NestedConcept: concept predicate failed expression: f(y) ''' - line: 123 + line: 138 errormsg: "type mismatch: got <MatchingType>" """ + + + + + + + + + + +# line 80 HERE + type ExplainedConcept {.explain.} = concept o o.foo is int |