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) [backend, args, bin], showOutput = true)
display("Success:", "Execution finished", Success, HighPriority) 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) = proc search(options: Options) =
## Searches for matches in ``options.action.search``. ## Searches for matches in ``options.action.search``.
## ##
@ -1030,6 +1052,8 @@ proc doAction(options: Options) =
listPaths(options) listPaths(options)
of actionBuild: of actionBuild:
build(options) build(options)
of actionTest:
test(options)
of actionCompile, actionDoc: of actionCompile, actionDoc:
execBackend(options) execBackend(options)
of actionInit: of actionInit:

View file

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

View file

@ -11,7 +11,7 @@ bin = @["nimscript"]
requires "nim >= 0.12.1" requires "nim >= 0.12.1"
task test, "test description": task work, "test description":
echo(5+5) echo(5+5)
task c_test, "Testing `setCommand \"c\", \"nimscript.nim\"`": task c_test, "Testing `setCommand \"c\", \"nimscript.nim\"`":

View file

@ -33,6 +33,7 @@ proc execNimble(args: varargs[string]): tuple[output: string, exitCode: int] =
quotedArgs = quoted_args.map((x: string) => ("\"" & x & "\"")) quotedArgs = quoted_args.map((x: string) => ("\"" & x & "\""))
result = execCmdEx(quotedArgs.join(" ")) result = execCmdEx(quotedArgs.join(" "))
checkpoint(result.output)
proc processOutput(output: string): seq[string] = proc processOutput(output: string): seq[string] =
output.strip.splitLines().filter((x: string) => (x.len > 0)) output.strip.splitLines().filter((x: string) => (x.len > 0))
@ -220,7 +221,7 @@ test "can install nimscript package":
test "can execute nimscript tasks": test "can execute nimscript tasks":
cd "nimscript": cd "nimscript":
let (output, exitCode) = execNimble("--verbose", "test") let (output, exitCode) = execNimble("--verbose", "work")
let lines = output.strip.splitLines() let lines = output.strip.splitLines()
check exitCode == QuitSuccess check exitCode == QuitSuccess
check lines[^1] == "10" check lines[^1] == "10"
@ -253,7 +254,7 @@ test "can use nimscript with repeated flags (issue #329)":
test "can list nimscript tasks": test "can list nimscript tasks":
cd "nimscript": cd "nimscript":
let (output, exitCode) = execNimble("tasks") let (output, exitCode) = execNimble("tasks")
check "test test description".normalize in output.normalize check "work test description".normalize in output.normalize
check exitCode == QuitSuccess check exitCode == QuitSuccess
test "can use pre/post hooks": test "can use pre/post hooks":
@ -400,3 +401,22 @@ test "can dump for installed package":
let (outp, exitCode) = execNimble("dump", "testdump") let (outp, exitCode) = execNimble("dump", "testdump")
check: exitCode == 0 check: exitCode == 0
check: outp.processOutput.inLines("desc: \"Test package for dump command\"") check: outp.processOutput.inLines("desc: \"Test package for dump command\"")
test "Runs passing unit tests":
cd "testsPass":
let (outp, exitCode) = execNimble("test")
check: exitCode == QuitSuccess
check: outp.processOutput.inLines("First test")
check: outp.processOutput.inLines("Second test")
check: outp.processOutput.inLines("Third test")
check: outp.processOutput.inLines("Executing my func")
test "Runs failing unit tests":
cd "testsFail":
let (outp, exitCode) = execNimble("test")
check: exitCode == QuitFailure
check: outp.processOutput.inLines("First test")
check: outp.processOutput.inLines("Failing Second test")
check: not outp.processOutput.inLines("Third test")

View file

@ -0,0 +1,4 @@
proc myFunc*() =
echo "Executing my func"

View file

@ -0,0 +1,4 @@
version = "0.1.0"
author = "John Doe"
description = "Nimble Test"
license = "BSD"

View file

@ -0,0 +1,6 @@
import testing123, unittest
test "can compile nimble":
echo "First test"
myFunc()

View file

@ -0,0 +1,6 @@
import testing123, unittest
test "can compile nimble":
echo "Failing Second test"
assert(false)

View file

@ -0,0 +1,7 @@
import testing123, unittest
test "can compile nimble":
echo "Third test"
myFunc()

View file

@ -0,0 +1,4 @@
proc myFunc*() =
echo "Executing my func"

View file

@ -0,0 +1,4 @@
version = "0.1.0"
author = "John Doe"
description = "Nimble Test"
license = "BSD"

View file

@ -0,0 +1,6 @@
import testing123, unittest
test "can compile nimble":
echo "First test"
myFunc()

View file

@ -0,0 +1,7 @@
import testing123, unittest
test "can compile nimble":
echo "Third test"
myFunc()

View file

@ -0,0 +1,7 @@
import testing123, unittest
test "can compile nimble":
echo "Second test"
myFunc()