mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 09:24:36 +00:00
37 lines
1.4 KiB
Nim
37 lines
1.4 KiB
Nim
import std/private/miscdollars
|
|
import std/strutils
|
|
|
|
template flakyAssert*(cond: untyped, msg = "", notifySuccess = true) =
|
|
## API to deal with flaky or failing tests. This avoids disabling entire tests
|
|
## altogether so that at least the parts that are working are kept being
|
|
## tested. This also avoids making CI fail periodically for tests known to
|
|
## be flaky. Finally, for known failures, passing `notifySuccess = true` will
|
|
## log that the test succeeded, which may indicate that a bug was fixed
|
|
## "by accident" and should be looked into.
|
|
const info = instantiationInfo(-1, true)
|
|
const expr = astToStr(cond)
|
|
if cond and not notifySuccess:
|
|
discard # silent success
|
|
else:
|
|
var msg2 = ""
|
|
toLocation(msg2, info.filename, info.line, info.column)
|
|
if cond:
|
|
# a flaky test is failing, we still report it but we don't fail CI
|
|
msg2.add " FLAKY_SUCCESS "
|
|
else:
|
|
# a previously failing test is now passing, a pre-existing bug might've been
|
|
# fixed by accidend
|
|
msg2.add " FLAKY_FAILURE "
|
|
msg2.add $expr & " " & msg
|
|
echo msg2
|
|
|
|
proc greedyOrderedSubsetLines*(lhs, rhs: string): bool =
|
|
## returns true if each stripped line in `lhs` appears in rhs, using a greedy matching.
|
|
let rhs = rhs.strip
|
|
var currentPos = 0
|
|
for line in lhs.strip.splitLines:
|
|
currentPos = rhs.find(line.strip, currentPos)
|
|
if currentPos < 0:
|
|
return false
|
|
return true
|