2016-03-04 18:10:48 +00:00
|
|
|
# NimYAML - YAML implementation in Nim
|
|
|
|
# (c) Copyright 2016 Felix Krause
|
|
|
|
#
|
|
|
|
# See the file "copying.txt", included in this
|
|
|
|
# distribution, for details about the copyright.
|
|
|
|
|
2016-03-04 20:23:13 +00:00
|
|
|
import os, terminal, strutils
|
2016-03-04 18:10:48 +00:00
|
|
|
import tmlParser, common
|
|
|
|
import "../yaml"
|
|
|
|
|
|
|
|
const gitCmd =
|
|
|
|
"git clone https://github.com/ingydotnet/yaml-dev-kit.git -b data"
|
|
|
|
|
|
|
|
proc echoError(msg: string) =
|
|
|
|
styledWriteLine(stdout, fgRed, "[error] ", fgWhite, msg, resetStyle)
|
|
|
|
|
|
|
|
proc echoInfo(msg: string) =
|
|
|
|
styledWriteLine(stdout, fgGreen, "[info] ", fgWhite, msg, resetStyle)
|
|
|
|
|
|
|
|
removeDir("yaml-dev-kit")
|
|
|
|
if execShellCmd(gitCmd) != 0:
|
|
|
|
echoError("Could not check out yaml-dev-kit (no internet connection?)")
|
|
|
|
quit(1)
|
|
|
|
|
|
|
|
var gotErrors = false
|
|
|
|
|
|
|
|
try:
|
|
|
|
for kind, dirPath in walkDir("yaml-dev-kit"):
|
|
|
|
block curTest:
|
|
|
|
if kind == pcDir:
|
2016-03-04 20:23:13 +00:00
|
|
|
if dirPath[^4..^1] in [".git", "name", "tags", "meta"]: continue
|
2016-03-04 18:10:48 +00:00
|
|
|
var
|
|
|
|
tagLib = initExtendedTagLibrary()
|
|
|
|
parser = newYamlParser(tagLib)
|
|
|
|
actual = parser.parse(newFileStream(dirPath / "in.yaml"))
|
|
|
|
expected = parseTmlStream(
|
|
|
|
newFileStream(dirPath / "test.event"), tagLib)
|
|
|
|
styledWriteLine(stdout, fgGreen, "[test] ", fgWhite,
|
2016-03-04 20:23:13 +00:00
|
|
|
strip(readFile(dirPath / "===")), resetStyle)
|
2016-03-04 18:10:48 +00:00
|
|
|
while not actual.finished():
|
|
|
|
let actualEvent = actual.next()
|
|
|
|
if expected.finished():
|
|
|
|
echoError("Expected stream end, got " &
|
|
|
|
$actualEvent.kind)
|
|
|
|
gotErrors = true
|
|
|
|
break curTest
|
|
|
|
let expectedEvent = expected.next()
|
|
|
|
if expectedEvent != actualEvent:
|
|
|
|
printDifference(expectedEvent, actualEvent)
|
|
|
|
echoError("Actual tokens do not match expected tokens")
|
|
|
|
gotErrors = true
|
|
|
|
break curTest
|
|
|
|
if not expected.finished():
|
|
|
|
echoError(
|
|
|
|
"Got fewer tokens than expected, first missing token: " &
|
|
|
|
$expected.next().kind)
|
|
|
|
gotErrors = true
|
|
|
|
except YamlStreamError:
|
|
|
|
let e = getCurrentException()
|
|
|
|
if e.parent of YamlParserError:
|
|
|
|
let pe = (ref YamlParserError)(e.parent)
|
|
|
|
echo "line ", pe.line, ", column ", pe.column, ": ", pe.msg
|
|
|
|
echo pe.lineContent
|
|
|
|
raise getCurrentException().parent
|
|
|
|
|
|
|
|
if gotErrors:
|
|
|
|
echoError("There were errors while running the tests")
|
|
|
|
quit(1)
|
|
|
|
else:
|
|
|
|
echoInfo("All tests were successful")
|
|
|
|
quit(0)
|