make tests green again; final fix for 0.17.0

This commit is contained in:
Felix Krause 2017-07-10 20:31:40 +02:00
parent 0caebe2618
commit 0f2dba1a65
4 changed files with 47 additions and 64 deletions

1
.gitignore vendored
View File

@ -21,5 +21,4 @@ docout
doc/rstPreproc
doc/tmp.rst
doc/**/code
test/yaml-test-suite
nimsuggest.log

4
.gitmodules vendored Normal file
View File

@ -0,0 +1,4 @@
[submodule "test/yaml-test-suite"]
path = test/yaml-test-suite
url = https://github.com/yaml/yaml-test-suite.git
branch = data

View File

@ -4,55 +4,18 @@
# See the file "copying.txt", included in this
# distribution, for details about the copyright.
import os, osproc, terminal, strutils, streams, macros, unittest
import os, osproc, terminal, strutils, streams, macros, unittest, sets
import testEventParser, commonTestUtils
import "../yaml"
const
testSuiteFolder = "yaml-test-suite"
testSuiteUrl = "https://github.com/yaml/yaml-test-suite.git"
proc echoError(msg: string) =
styledWriteLine(stdout, fgRed, "[error] ", fgWhite, msg, resetStyle)
proc ensureTestSuiteCloneCorrect(pwd: string) {.compileTime.} =
let absolutePath = pwd / testSuiteFolder
if dirExists(absolutePath):
var isCorrectClone = true
if dirExists(absolutePath / ".git"):
let remoteUrl =
staticExec("cd \"" & absolutePath & "\" && git remote get-url origin").strip
if remoteUrl != testSuiteUrl:
isCorrectClone = false
let branches = staticExec("cd \"" & absolutePath & "\" && git branch").strip
if "* data" notin branches.splitLines():
isCorrectClone = false
if isCorrectClone:
let updateOutput = staticExec("cd \"" & absolutePath & "\" && git pull")
#if uError != 0:
# echo "could not update yaml-test-suite! please fix this problem and compile again."
# echo "output:\n"
# echo "$ git pull"
# echo updateOutput
# quit 1
else:
echo testSuiteFolder, " exists, but is not in expected state. Make sure it is a git repo,"
echo "cloned from ", testSuiteUrl, ", and the data branch"
echo "is active. Alternatively, delete the folder " & testSuiteFolder & '.'
quit 1
else:
let cloneOutput = staticExec("cd \"" & pwd &
"\" && git clone " & testSuiteUrl & " -b data")
#if cError != 0:
if not(dirExists(absolutePath)) or not(dirExists(absolutePath / ".git")) or
not(dirExists(absolutePath / "229Q")):
echo "could not clone ", testSuiteUrl, ". Make sure"
echo "you are connected to the internet and your proxy settings are correct. output:\n"
echo "$ git clone ", testSuiteUrl, " -b data"
echo cloneOutput
quit 1
proc parserTest(path: string): bool =
proc parserTest(path: string, errorExpected : bool): bool =
var
tagLib = initExtendedTagLibrary()
parser = newYamlParser(tagLib)
@ -68,21 +31,32 @@ proc parserTest(path: string): bool =
while not actual.finished():
let actualEvent = actual.next()
if expected.finished():
result = errorExpected
if not result:
echoError("At token #" & $i & ": Expected stream end, got " &
$actualEvent.kind)
return false
return
let expectedEvent = expected.next()
if expectedEvent != actualEvent:
result = errorExpected
if not result:
printDifference(expectedEvent, actualEvent)
echoError("At token #" & $i &
": Actual tokens do not match expected tokens")
return false
return
i.inc()
if not expected.finished():
result = errorExpected
if not result:
echoError("Got fewer tokens than expected, first missing " &
"token: " & $expected.next().kind)
return false
return
result = not errorExpected
if not result:
echo "Expected error, but parsed without error."
except:
result = errorExpected
if not result:
let e = getCurrentException()
if e.parent of YamlParserError:
let pe = (ref YamlParserError)(e.parent)
@ -91,26 +65,31 @@ proc parserTest(path: string): bool =
else: echo e.msg
echoError("Catched an exception at token #" & $i &
" test was not successful")
return false
result = true
macro genTests(): untyped =
let
pwd = staticExec("pwd").strip
absolutePath = '"' & (pwd / testSuiteFolder) & '"'
echo "[tparser] Generating tests from " & absolutePath
ensureTestSuiteCloneCorrect(pwd)
discard staticExec("git submodule init && git submodule update --remote")
let errorTests = toSet(staticExec("cd " & (absolutePath / "tags" / "error") &
" && ls -1d *").splitLines())
let ignored = toSet(["3MYT", "JDH8", ".git", "name", "tags", "meta"])
result = newStmtList()
# walkDir for some crude reason does not work with travis build
let dirItems = staticExec("ls -1d " & absolutePath / "*")
for dirPath in dirItems.splitLines():
if dirPath.strip.len == 0: continue
if dirPath[^4..^1] in [".git", "name", "tags", "meta"]: continue
let testId = dirPath[^4..^1]
if ignored.contains(testId): continue
let title = slurp(dirPath / "===")
result.add(newCall("test",
newLit(strip(title) & " [" &
dirPath[^4..^1] & ']'), newCall("doAssert", newCall("parserTest",
newLit(dirPath)))))
testId & ']'), newCall("doAssert", newCall("parserTest",
newLit(dirPath), newLit(errorTests.contains(testId))))))
result = newCall("suite", newLit("Parser Tests (from yaml-test-suite)"), result)
genTests()

1
test/yaml-test-suite Submodule

@ -0,0 +1 @@
Subproject commit daa74b930d50a1863a8f90d7b8376904ad183771