fix #16576: honor matrix in testament by making such tests non joinable (#16577)

* refs #16576: honor matrix in testament by making such tests non joinable

* add tests + misc fixes

* fix test for i386 with -d:danger
This commit is contained in:
Timothee Cour 2021-01-04 10:45:46 -08:00 • committed by GitHub
commit 00144ee4e9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 37 additions and 12 deletions

View file

@ -49,6 +49,7 @@ proc isTestFile*(file: string): bool =
# ---------------- IC tests ---------------------------------------------
# xxx deadcode
proc icTests(r: var TResults; testsDir: string, cat: Category, options: string) =
const
tooltests = ["compiler/nim.nim", "tools/nimgrep.nim"]
@ -583,6 +584,8 @@ proc processSingleTest(r: var TResults, cat: Category, options, test: string, ta
testSpec r, makeTest(test, options, cat), targets
proc isJoinableSpec(spec: TSpec): bool =
# xxx simplify implementation using a whitelist of fields that are allowed to be
# set to non-default values (use `fieldPairs`), to avoid issues like bug #16576.
result = not spec.sortoutput and
spec.action == actionRun and
not fileExists(spec.file.changeFileExt("cfg")) and
@ -595,6 +598,7 @@ proc isJoinableSpec(spec: TSpec): bool =
spec.exitCode == 0 and
spec.input.len == 0 and
spec.nimout.len == 0 and
spec.matrix.len == 0 and
spec.outputCheck != ocSubstr and
spec.ccodeCheck.len == 0 and
(spec.targets == {} or spec.targets == {targetC})
@ -656,7 +660,7 @@ proc runJoinedTest(r: var TResults, cat: Category, testsDir: string) =
writeFile(megatestFile, megatest)
let root = getCurrentDir()
let args = ["c", "--nimCache:" & outDir, "-d:testing", "--listCmd", "--path:" & root, megatestFile]
let args = ["c", "--nimCache:" & outDir, "-d:testing", "-d:nimMegatest", "--listCmd", "--path:" & root, megatestFile]
var (cmdLine, buf, exitCode) = execCmdEx2(command = compilerPrefix, args = args, input = "")
if exitCode != 0:
echo "$ " & cmdLine & "\n" & buf.string
@ -759,7 +763,9 @@ proc processCategory(r: var TResults, cat: Category,
testSpec r, test
inc testsRun
if testsRun == 0:
const whiteListedDirs = ["deps"]
const whiteListedDirs = ["deps", "htmldocs", "pkgs"]
# `pkgs` because bug #16556 creates `pkgs` dirs and this can affect some users
# that try an old version of choosenim.
doAssert cat.string in whiteListedDirs,
"Invalid category specified: '$#' not in whilelist: $#" % [cat.string, $whiteListedDirs]

View file

@ -71,6 +71,7 @@ type
disabled, enabled, leaking
TSpec* = object
# xxx make sure `isJoinableSpec` takes into account each field here.
action*: TTestAction
file*, cmd*: string
input*: string

View file

@ -88,11 +88,12 @@ proc isSuccess(input: string): bool =
# not clear how to do the equivalent of pkg/regex's: re"FOO(.*?)BAR" in pegs
input.startsWith("Hint: ") and input.endsWith("[SuccessX]")
proc normalizeMsg(s: string): string =
result = newStringOfCap(s.len+1)
for x in splitLines(s):
if result.len > 0: result.add '\L'
result.add x.strip
when false: # deadcode
proc normalizeMsg(s: string): string =
result = newStringOfCap(s.len+1)
for x in splitLines(s):
if result.len > 0: result.add '\L'
result.add x.strip
proc getFileDir(filename: string): string =
result = filename.splitFile().dir
@ -794,7 +795,7 @@ proc main() =
var subPath = p.key.string
let nimRoot = currentSourcePath / "../.."
# makes sure points to this regardless of cwd or which nim is used to compile this.
doAssert existsDir(nimRoot/testsDir) # sanity check
doAssert dirExists(nimRoot/testsDir) # sanity check
if subPath.isAbsolute: subPath = subPath.relativePath(nimRoot)
# at least one directory is required in the path, to use as a category name
let pathParts = subPath.relativePath(testsDir).split({DirSep, AltSep})