From 2b5841cd2b096624987d7cd1aa217088447076b7 Mon Sep 17 00:00:00 2001 From: Timothee Cour Date: Wed, 20 Jan 2021 05:04:08 -0800 Subject: [PATCH] fix testament regression: installed testament works again with testament r path (#16767) * fix testament regression: installed testament works again with testament r path * fixup --- testament/lib/stdtest/specialpaths.nim | 19 ++++++++++++++++++- testament/testament.nim | 14 ++++---------- tests/testament/tspecialpaths.nim | 9 +++++++++ 3 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 tests/testament/tspecialpaths.nim diff --git a/testament/lib/stdtest/specialpaths.nim b/testament/lib/stdtest/specialpaths.nim index 42f656d765bbd..dc5cc206458d7 100644 --- a/testament/lib/stdtest/specialpaths.nim +++ b/testament/lib/stdtest/specialpaths.nim @@ -24,13 +24,30 @@ const # robust way to derive other paths here # We don't depend on PATH so this is robust to having multiple nim binaries nimRootDir* = sourcePath.parentDir.parentDir.parentDir.parentDir ## root of Nim repo + testsFname* = "tests" stdlibDir* = nimRootDir / "lib" systemPath* = stdlibDir / "system.nim" - testsDir* = nimRootDir / "tests" + testsDir* = nimRootDir / testsFname buildDir* = nimRootDir / "build" ## refs #10268: all testament generated files should go here to avoid ## polluting .gitignore +proc splitTestFile*(file: string): tuple[cat: string, path: string] = + ## At least one directory is required in the path, to use as a category name + runnableExamples: + doAssert splitTestFile("tests/fakedir/tfakename.nim") == ("fakedir", "tests/fakedir/tfakename.nim".unixToNativePath) + for p in file.parentDirs(inclusive = false): + let parent = p.parentDir + if parent.lastPathPart == testsFname: + result.cat = p.lastPathPart + let dir = getCurrentDir() + if file.isRelativeTo(dir): + result.path = file.relativePath(dir) + else: + result.path = file + return result + doAssert false, "file must match this pattern: '/pathto/tests/dir/**/tfile.nim', got: '" & file & "'" + static: # sanity check doAssert fileExists(systemPath) diff --git a/testament/testament.nim b/testament/testament.nim index fd8ba41ba5d56..3ffd6907c870f 100644 --- a/testament/testament.nim +++ b/testament/testament.nim @@ -16,6 +16,7 @@ import from std/sugar import dup import compiler/nodejs import lib/stdtest/testutils +from lib/stdtest/specialpaths import splitTestFile var useColors = true var backendLogging = true @@ -791,16 +792,9 @@ 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 - let nimRoot = currentSourcePath / "../.." - # makes sure points to this regardless of cwd or which nim is used to compile this. - doAssert(dirExists(nimRoot/testsDir), nimRoot/testsDir & " doesn't exist!") # 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}) - let cat = Category(pathParts[0]) - processSingleTest(r, cat, p.cmdLineRest.string, subPath, gTargets, targetsSet) + var subPath = p.key + let (cat, path) = splitTestFile(subPath) + processSingleTest(r, cat.Category, p.cmdLineRest, path, gTargets, targetsSet) of "html": generateHtml(resultsFile, optFailing) else: diff --git a/tests/testament/tspecialpaths.nim b/tests/testament/tspecialpaths.nim new file mode 100644 index 0000000000000..3c97dc88adc89 --- /dev/null +++ b/tests/testament/tspecialpaths.nim @@ -0,0 +1,9 @@ +import stdtest/specialpaths +import std/os +block: # splitTestFile + doAssert splitTestFile("tests/fakedir/tfakename.nim") == ("fakedir", "tests/fakedir/tfakename.nim".unixToNativePath) + doAssert splitTestFile("/pathto/tests/fakedir/tfakename.nim") == ("fakedir", "/pathto/tests/fakedir/tfakename.nim".unixToNativePath) + doAssert splitTestFile(getCurrentDir() / "tests/fakedir/tfakename.nim") == ("fakedir", "tests/fakedir/tfakename.nim".unixToNativePath) + doAssert splitTestFile(getCurrentDir() / "sub/tests/fakedir/tfakename.nim") == ("fakedir", "sub/tests/fakedir/tfakename.nim".unixToNativePath) + doAssertRaises(AssertionDefect): discard splitTestFile("testsbad/fakedir/tfakename.nim") + doAssertRaises(AssertionDefect): discard splitTestFile("tests/tfakename.nim")