mirror of https://github.com/status-im/NimYAML.git
make tests green again; final fix for 0.17.0
This commit is contained in:
parent
0caebe2618
commit
0f2dba1a65
|
@ -21,5 +21,4 @@ docout
|
||||||
doc/rstPreproc
|
doc/rstPreproc
|
||||||
doc/tmp.rst
|
doc/tmp.rst
|
||||||
doc/**/code
|
doc/**/code
|
||||||
test/yaml-test-suite
|
|
||||||
nimsuggest.log
|
nimsuggest.log
|
||||||
|
|
|
@ -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
|
|
@ -4,55 +4,18 @@
|
||||||
# See the file "copying.txt", included in this
|
# See the file "copying.txt", included in this
|
||||||
# distribution, for details about the copyright.
|
# 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 testEventParser, commonTestUtils
|
||||||
import "../yaml"
|
import "../yaml"
|
||||||
|
|
||||||
const
|
const
|
||||||
testSuiteFolder = "yaml-test-suite"
|
testSuiteFolder = "yaml-test-suite"
|
||||||
testSuiteUrl = "https://github.com/yaml/yaml-test-suite.git"
|
|
||||||
|
|
||||||
proc echoError(msg: string) =
|
proc echoError(msg: string) =
|
||||||
styledWriteLine(stdout, fgRed, "[error] ", fgWhite, msg, resetStyle)
|
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
|
var
|
||||||
tagLib = initExtendedTagLibrary()
|
tagLib = initExtendedTagLibrary()
|
||||||
parser = newYamlParser(tagLib)
|
parser = newYamlParser(tagLib)
|
||||||
|
@ -68,21 +31,32 @@ proc parserTest(path: string): bool =
|
||||||
while not actual.finished():
|
while not actual.finished():
|
||||||
let actualEvent = actual.next()
|
let actualEvent = actual.next()
|
||||||
if expected.finished():
|
if expected.finished():
|
||||||
|
result = errorExpected
|
||||||
|
if not result:
|
||||||
echoError("At token #" & $i & ": Expected stream end, got " &
|
echoError("At token #" & $i & ": Expected stream end, got " &
|
||||||
$actualEvent.kind)
|
$actualEvent.kind)
|
||||||
return false
|
return
|
||||||
let expectedEvent = expected.next()
|
let expectedEvent = expected.next()
|
||||||
if expectedEvent != actualEvent:
|
if expectedEvent != actualEvent:
|
||||||
|
result = errorExpected
|
||||||
|
if not result:
|
||||||
printDifference(expectedEvent, actualEvent)
|
printDifference(expectedEvent, actualEvent)
|
||||||
echoError("At token #" & $i &
|
echoError("At token #" & $i &
|
||||||
": Actual tokens do not match expected tokens")
|
": Actual tokens do not match expected tokens")
|
||||||
return false
|
return
|
||||||
i.inc()
|
i.inc()
|
||||||
if not expected.finished():
|
if not expected.finished():
|
||||||
|
result = errorExpected
|
||||||
|
if not result:
|
||||||
echoError("Got fewer tokens than expected, first missing " &
|
echoError("Got fewer tokens than expected, first missing " &
|
||||||
"token: " & $expected.next().kind)
|
"token: " & $expected.next().kind)
|
||||||
return false
|
return
|
||||||
|
result = not errorExpected
|
||||||
|
if not result:
|
||||||
|
echo "Expected error, but parsed without error."
|
||||||
except:
|
except:
|
||||||
|
result = errorExpected
|
||||||
|
if not result:
|
||||||
let e = getCurrentException()
|
let e = getCurrentException()
|
||||||
if e.parent of YamlParserError:
|
if e.parent of YamlParserError:
|
||||||
let pe = (ref YamlParserError)(e.parent)
|
let pe = (ref YamlParserError)(e.parent)
|
||||||
|
@ -91,26 +65,31 @@ proc parserTest(path: string): bool =
|
||||||
else: echo e.msg
|
else: echo e.msg
|
||||||
echoError("Catched an exception at token #" & $i &
|
echoError("Catched an exception at token #" & $i &
|
||||||
" test was not successful")
|
" test was not successful")
|
||||||
return false
|
|
||||||
result = true
|
|
||||||
|
|
||||||
macro genTests(): untyped =
|
macro genTests(): untyped =
|
||||||
let
|
let
|
||||||
pwd = staticExec("pwd").strip
|
pwd = staticExec("pwd").strip
|
||||||
absolutePath = '"' & (pwd / testSuiteFolder) & '"'
|
absolutePath = '"' & (pwd / testSuiteFolder) & '"'
|
||||||
echo "[tparser] Generating tests from " & absolutePath
|
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()
|
result = newStmtList()
|
||||||
# walkDir for some crude reason does not work with travis build
|
# walkDir for some crude reason does not work with travis build
|
||||||
let dirItems = staticExec("ls -1d " & absolutePath / "*")
|
let dirItems = staticExec("ls -1d " & absolutePath / "*")
|
||||||
for dirPath in dirItems.splitLines():
|
for dirPath in dirItems.splitLines():
|
||||||
if dirPath.strip.len == 0: continue
|
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 / "===")
|
let title = slurp(dirPath / "===")
|
||||||
|
|
||||||
result.add(newCall("test",
|
result.add(newCall("test",
|
||||||
newLit(strip(title) & " [" &
|
newLit(strip(title) & " [" &
|
||||||
dirPath[^4..^1] & ']'), newCall("doAssert", newCall("parserTest",
|
testId & ']'), newCall("doAssert", newCall("parserTest",
|
||||||
newLit(dirPath)))))
|
newLit(dirPath), newLit(errorTests.contains(testId))))))
|
||||||
result = newCall("suite", newLit("Parser Tests (from yaml-test-suite)"), result)
|
result = newCall("suite", newLit("Parser Tests (from yaml-test-suite)"), result)
|
||||||
|
|
||||||
genTests()
|
genTests()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit daa74b930d50a1863a8f90d7b8376904ad183771
|
Loading…
Reference in New Issue