mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-28 08:54:53 +00:00
fix testament regression: installed testament works again with testament r path (#16767)
* fix testament regression: installed testament works again with testament r path * fixup
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
9
tests/testament/tspecialpaths.nim
Normal file
9
tests/testament/tspecialpaths.nim
Normal file
@@ -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")
|
||||
Reference in New Issue
Block a user