Add test target

This commit is contained in:
Nycto 2017-07-18 09:23:47 -07:00
commit 254658ee5d
14 changed files with 111 additions and 9 deletions

View file

@ -673,6 +673,28 @@ proc execBackend(options: Options) =
[backend, args, bin], showOutput = true)
display("Success:", "Execution finished", Success, HighPriority)
proc tempOutArg(file: string): string =
## Returns the `--out` argument to pass to the compiler, using a temp file
let (_, name, _) = splitFile(file)
let dir = getNimbleTempDir() / "tests"
createDir(dir)
result = "--out:" & (dir / name)
proc test(options: Options) =
## Executes all tests
var files = toSeq(walkDir(getCurrentDir() / "tests"))
files.sort do (a, b: auto) -> int:
result = cmp(a.path, b.path)
for file in files:
if file.path.endsWith(".nim") and file.kind in { pcFile, pcLinkToFile }:
var optsCopy = options
optsCopy.action.file = file.path
optsCopy.action.backend = "c -r"
optsCopy.action.compileOptions.add("--path:.")
optsCopy.action.compileOptions.add(file.path.tempOutArg)
execBackend(optsCopy)
proc search(options: Options) =
## Searches for matches in ``options.action.search``.
##
@ -1030,6 +1052,8 @@ proc doAction(options: Options) =
listPaths(options)
of actionBuild:
build(options)
of actionTest:
test(options)
of actionCompile, actionDoc:
execBackend(options)
of actionInit:

View file

@ -25,7 +25,7 @@ type
ActionType* = enum
actionNil, actionRefresh, actionInit, actionDump, actionPublish,
actionInstall, actionSearch,
actionList, actionBuild, actionPath, actionUninstall, actionCompile,
actionList, actionBuild, actionTest, actionPath, actionUninstall, actionCompile,
actionDoc, actionCustom, actionTasks
Action* = object
@ -39,7 +39,7 @@ type
search*: seq[string] # Search string.
of actionInit, actionDump:
projName*: string
of actionCompile, actionDoc, actionBuild:
of actionCompile, actionDoc, actionBuild, actionTest:
file*: string
backend*: string
compileOptions*: seq[string]
@ -63,6 +63,7 @@ Commands:
build Builds a package.
c, cc, js [opts, ...] f.nim Builds a file inside a package. Passes options
to the Nim compiler.
test Compiles and executes tests
doc, doc2 [opts, ...] f.nim Builds documentation for a file inside a
package. Passes options to the Nim compiler.
refresh [url] Refreshes the package list. A package list URL
@ -117,6 +118,8 @@ proc parseActionType*(action: string): ActionType =
result = actionPath
of "build":
result = actionBuild
of "test":
result = actionTest
of "c", "compile", "js", "cpp", "cc":
result = actionCompile
of "doc", "doc2":
@ -147,7 +150,7 @@ proc initAction*(options: var Options, key: string) =
case options.action.typ
of actionInstall, actionPath:
options.action.packages = @[]
of actionCompile, actionDoc, actionBuild:
of actionCompile, actionDoc, actionBuild, actionTest:
options.action.compileOptions = @[]
options.action.file = ""
if keyNorm == "c" or keyNorm == "compile": options.action.backend = ""
@ -231,7 +234,7 @@ proc parseArgument*(key: string, result: var Options) =
result.action.projName = key
of actionCompile, actionDoc:
result.action.file = key
of actionList, actionBuild, actionPublish:
of actionList, actionBuild, actionTest, actionPublish:
result.showHelp = true
of actionCustom:
result.action.arguments.add(key)
@ -269,7 +272,7 @@ proc parseFlag*(flag, val: string, result: var Options, kind = cmdLongOption) =
result.depsOnly = true
else:
wasFlagHandled = false
of actionCompile, actionDoc, actionBuild:
of actionCompile, actionDoc, actionBuild, actionTest:
let prefix = if kind == cmdShortOption: "-" else: "--"
if val == "":
result.action.compileOptions.add(prefix & flag)