mirror of
https://github.com/status-im/nim-unittest2.git
synced 2025-02-22 06:38:07 +00:00
avoid potential capture of lent iterator var (#29)
also avoid `quote do` for better line numbers in error messages
This commit is contained in:
parent
21ed62449d
commit
0b44f30d9b
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@ -8,7 +8,7 @@ on:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
timeout-minutes: 15
|
||||
timeout-minutes: 60
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
|
@ -772,6 +772,7 @@ template fail* =
|
||||
withLock formattersLock:
|
||||
{.gcsafe.}:
|
||||
for formatter in formatters:
|
||||
let formatter = formatter # avoid lent iterator
|
||||
when declared(stackTrace):
|
||||
when stackTrace is string:
|
||||
formatter.failureOccurred(checkpoints, stackTrace)
|
||||
@ -947,17 +948,36 @@ macro check*(conditions: untyped): untyped =
|
||||
|
||||
case checked.kind
|
||||
of nnkCallKinds:
|
||||
|
||||
let (assigns, check, printOuts) = inspectArgs(checked)
|
||||
let lineinfo = newStrLitNode(checked.lineInfo)
|
||||
let callLit = checked.toStrLit
|
||||
result = quote do:
|
||||
block:
|
||||
`assigns`
|
||||
if not `check`:
|
||||
checkpoint(`lineinfo` & ": Check failed: " & `callLit`)
|
||||
`printOuts`
|
||||
fail()
|
||||
result = nnkBlockStmt.newTree(
|
||||
newEmptyNode(),
|
||||
nnkStmtList.newTree(
|
||||
assigns,
|
||||
nnkIfStmt.newTree(
|
||||
nnkElifBranch.newTree(
|
||||
nnkCall.newTree(ident("not"), check),
|
||||
nnkStmtList.newTree(
|
||||
nnkCall.newTree(
|
||||
ident("checkpoint"),
|
||||
nnkInfix.newTree(
|
||||
ident("&"),
|
||||
nnkInfix.newTree(
|
||||
ident("&"),
|
||||
lineinfo,
|
||||
newLit(": Check failed: ")
|
||||
),
|
||||
callLit
|
||||
)
|
||||
),
|
||||
printOuts,
|
||||
nnkCall.newTree(ident("fail"))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
of nnkStmtList:
|
||||
result = newNimNode(nnkStmtList)
|
||||
@ -969,10 +989,31 @@ macro check*(conditions: untyped): untyped =
|
||||
let lineinfo = newStrLitNode(checked.lineInfo)
|
||||
let callLit = checked.toStrLit
|
||||
|
||||
result = quote do:
|
||||
if not `checked`:
|
||||
checkpoint(`lineinfo` & ": Check failed: " & `callLit`)
|
||||
fail()
|
||||
result = nnkBlockStmt.newTree(
|
||||
newEmptyNode(),
|
||||
nnkStmtList.newTree(
|
||||
nnkIfStmt.newTree(
|
||||
nnkElifBranch.newTree(
|
||||
nnkCall.newTree(ident("not"), checked),
|
||||
nnkStmtList.newTree(
|
||||
nnkCall.newTree(
|
||||
ident("checkpoint"),
|
||||
nnkInfix.newTree(
|
||||
ident("&"),
|
||||
nnkInfix.newTree(
|
||||
ident("&"),
|
||||
lineinfo,
|
||||
newLit(": Check failed: ")
|
||||
),
|
||||
callLit
|
||||
)
|
||||
),
|
||||
nnkCall.newTree(ident("fail"))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
template require*(conditions: untyped) =
|
||||
## Same as `check` except any failed test causes the program to quit
|
||||
|
@ -1,6 +1,6 @@
|
||||
mode = ScriptMode.Verbose
|
||||
|
||||
version = "0.0.7"
|
||||
version = "0.0.8"
|
||||
author = "Status Research & Development GmbH"
|
||||
description = "unittest fork with support for parallel test execution"
|
||||
license = "MIT"
|
||||
|
Loading…
x
Reference in New Issue
Block a user