diff --git a/testament/categories.nim b/testament/categories.nim index 0d19842ec801e..b1716260921b2 100644 --- a/testament/categories.nim +++ b/testament/categories.nim @@ -563,13 +563,13 @@ proc `&.?`(a, b: string): string = # candidate for the stdlib? result = if b.startsWith(a): b else: a & b -proc processSingleTest(r: var TResults, cat: Category, options, test: string) = - let test = testsDir &.? cat.string / test - let target = if cat.string.normalize == "js": targetJS else: targetC - if fileExists(test): - testSpec r, makeTest(test, options, cat), {target} - else: - doAssert false, test & " test does not exist" +proc processSingleTest(r: var TResults, cat: Category, options, test: string, targets: set[TTarget], targetsSet: bool) = + var targets = targets + if not targetsSet: + let target = if cat.string.normalize == "js": targetJS else: targetC + targets = {target} + doAssert fileExists(test), test & " test does not exist" + testSpec r, makeTest(test, options, cat), targets proc isJoinableSpec(spec: TSpec): bool = result = not spec.sortoutput and diff --git a/testament/specs.nim b/testament/specs.nim index eaae598bbcc69..eccbd60b1b112 100644 --- a/testament/specs.nim +++ b/testament/specs.nim @@ -57,10 +57,10 @@ type reInvalidSpec # test had problems to parse the spec TTarget* = enum - targetC = "C" - targetCpp = "C++" - targetObjC = "ObjC" - targetJS = "JS" + targetC = "c" + targetCpp = "cpp" + targetObjC = "objc" + targetJS = "js" InlineError* = object kind*: string diff --git a/testament/testament.nim b/testament/testament.nim index 2912b03abb76e..51e3abc7f3b8a 100644 --- a/testament/testament.nim +++ b/testament/testament.nim @@ -81,6 +81,7 @@ let pegOfInterest = pegLineError / pegOtherError var gTargets = {low(TTarget)..high(TTarget)} +var targetsSet = false proc isSuccess(input: string): bool = # not clear how to do the equivalent of pkg/regex's: re"FOO(.*?)BAR" in pegs @@ -685,6 +686,7 @@ proc main() = of "targets": targetsStr = p.val.string gTargets = parseTargets(targetsStr) + targetsSet = true of "nim": compilerPrefix = addFileExt(p.val.string, ExeExt) of "directory": @@ -794,14 +796,16 @@ proc main() = p.next processPattern(r, pattern, p.cmdLineRest.string, simulate) of "r", "run": + # "/pathto/tests/stdlib/nre/captures.nim" -> "stdlib" + "tests/stdlib/nre/captures.nim" var subPath = p.key.string - if subPath.isAbsolute: subPath = subPath.relativePath(getCurrentDir()) + 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 + if subPath.isAbsolute: subPath = subPath.relativePath(nimRoot) # at least one directory is required in the path, to use as a category name - let pathParts = split(subPath, {DirSep, AltSep}) - # "stdlib/nre/captures.nim" -> "stdlib" + "nre/captures.nim" + let pathParts = subPath.relativePath(testsDir).split({DirSep, AltSep}) let cat = Category(pathParts[0]) - subPath = joinPath(pathParts[1..^1]) - processSingleTest(r, cat, p.cmdLineRest.string, subPath) + processSingleTest(r, cat, p.cmdLineRest.string, subPath, gTargets, targetsSet) of "html": generateHtml(resultsFile, optFailing) else: diff --git a/tests/testament/tshould_not_work.nim b/tests/testament/tshould_not_work.nim index e4d3c7be7d86c..a7a877fe853b0 100644 --- a/tests/testament/tshould_not_work.nim +++ b/tests/testament/tshould_not_work.nim @@ -2,36 +2,36 @@ discard """ cmd: "testament/testament --directory:testament --colors:off --backendLogging:off --nim:../compiler/nim category shouldfail" action: compile nimout: ''' -FAIL: tests/shouldfail/tccodecheck.nim C +FAIL: tests/shouldfail/tccodecheck.nim c Failure: reCodegenFailure Expected: baz -FAIL: tests/shouldfail/tcolumn.nim C +FAIL: tests/shouldfail/tcolumn.nim c Failure: reLinesDiffer -FAIL: tests/shouldfail/terrormsg.nim C +FAIL: tests/shouldfail/terrormsg.nim c Failure: reMsgsDiffer -FAIL: tests/shouldfail/texitcode1.nim C +FAIL: tests/shouldfail/texitcode1.nim c Failure: reExitcodesDiffer -FAIL: tests/shouldfail/tfile.nim C +FAIL: tests/shouldfail/tfile.nim c Failure: reFilesDiffer -FAIL: tests/shouldfail/tline.nim C +FAIL: tests/shouldfail/tline.nim c Failure: reLinesDiffer -FAIL: tests/shouldfail/tmaxcodesize.nim C +FAIL: tests/shouldfail/tmaxcodesize.nim c Failure: reCodegenFailure max allowed size: 1 -FAIL: tests/shouldfail/tnimout.nim C +FAIL: tests/shouldfail/tnimout.nim c Failure: reMsgsDiffer -FAIL: tests/shouldfail/toutput.nim C +FAIL: tests/shouldfail/toutput.nim c Failure: reOutputsDiffer -FAIL: tests/shouldfail/toutputsub.nim C +FAIL: tests/shouldfail/toutputsub.nim c Failure: reOutputsDiffer -FAIL: tests/shouldfail/treject.nim C +FAIL: tests/shouldfail/treject.nim c Failure: reFilesDiffer -FAIL: tests/shouldfail/tsortoutput.nim C +FAIL: tests/shouldfail/tsortoutput.nim c Failure: reOutputsDiffer -FAIL: tests/shouldfail/ttimeout.nim C +FAIL: tests/shouldfail/ttimeout.nim c Failure: reTimeout -FAIL: tests/shouldfail/tvalgrind.nim C +FAIL: tests/shouldfail/tvalgrind.nim c Failure: reExitcodesDiffer ''' """