test/json: run tests through a line wine/crlf wrapper
unit tests rely on AWKs record seperator being LF which presents issues when running windows tests. rather than modify the tap-driver provided by autotools (which would be extremely annoying to maintain) we run all tests through wine-crlf.sh which will perform line ending transforms as required. it's a pretty braindead script, so don't do anything terrifically extreme under it.
This commit is contained in:
parent
456362adff
commit
b814c83e21
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,6 +1,5 @@
|
||||
/aclocal.m4
|
||||
/autom4te.cache/
|
||||
/build-aux/
|
||||
/compile
|
||||
/config.*
|
||||
/configure
|
||||
|
8
build-aux/.gitignore
vendored
Normal file
8
build-aux/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/compile
|
||||
/config.guess
|
||||
/config.sub
|
||||
/depcomp
|
||||
/install-sh
|
||||
/ltmain.sh
|
||||
/missing
|
||||
/test-driver
|
16
build-aux/wine-crlf.sh
Executable file
16
build-aux/wine-crlf.sh
Executable file
@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
|
||||
case "$1" in
|
||||
*.exe)
|
||||
OUTPUT="$(/usr/bin/env wine $@)"
|
||||
STATUS=$?
|
||||
|
||||
echo "$OUTPUT" | sed 's/\r$//'
|
||||
exit $STATUS
|
||||
;;
|
||||
|
||||
*)
|
||||
$@
|
||||
exit $?
|
||||
;;
|
||||
esac
|
@ -132,7 +132,7 @@ AC_CONFIG_FILES([
|
||||
Makefile
|
||||
])
|
||||
|
||||
AC_CONFIG_FILES([test/json-parse], [chmod a+x test/json-parse])
|
||||
AC_CONFIG_FILES([test/json-schema], [chmod a+x test/json-schema])
|
||||
AC_CONFIG_FILES([test/json-parse.sh], [chmod a+x test/json-parse.sh])
|
||||
AC_CONFIG_FILES([test/json-schema.py], [chmod a+x test/json-schema.py])
|
||||
|
||||
AC_OUTPUT
|
||||
|
@ -1,27 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
validate=@abs_top_builddir@/tools/json-validate
|
||||
|
||||
good=(@abs_top_srcdir@/test/json/good/*)
|
||||
bad=(@abs_top_srcdir@/test/json/bad/*)
|
||||
|
||||
count=$((${#good[@]}+${#bad[@]}))
|
||||
echo 1..$count
|
||||
|
||||
for i in ${good[@]};
|
||||
do
|
||||
$validate $i 2>/dev/null 1>&2
|
||||
case $? in
|
||||
0) echo "ok - $(basename $i .json)";;
|
||||
*) echo "not ok - $(basename $i .json)";;
|
||||
esac
|
||||
done
|
||||
|
||||
for i in ${bad[@]};
|
||||
do
|
||||
$validate $i 1>&2 2>/dev/null
|
||||
case $? in
|
||||
0) echo "not ok - $(basename $i .json)";;
|
||||
*) echo "ok - $(basename $i .json)";;
|
||||
esac
|
||||
done
|
31
test/json-parse.sh.in
Executable file
31
test/json-parse.sh.in
Executable file
@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
|
||||
validate=@abs_top_builddir@/tools/json-validate@EXEEXT@
|
||||
|
||||
count=0
|
||||
code=0
|
||||
|
||||
for i in $(ls @abs_top_srcdir@/test/json/good/*);
|
||||
do
|
||||
@abs_top_srcdir@/build-aux/wine-crlf.sh $validate $i 2>/dev/null 1>&2
|
||||
|
||||
case $? in
|
||||
0) echo "ok - good/$(basename $i .json)";;
|
||||
*) echo "not ok - good/$(basename $i .json)"; code=1;;
|
||||
esac
|
||||
|
||||
count=$((count+1))
|
||||
done
|
||||
|
||||
for i in $(ls @abs_top_srcdir@/test/json/bad/*);
|
||||
do
|
||||
@abs_top_srcdir@/build-aux/wine-crlf.sh $validate $i 1>&2 2>/dev/null
|
||||
case $? in
|
||||
0) echo "not ok - bad/$(basename $i .json)"; code=1;;
|
||||
*) echo "ok - bad/$(basename $i .json)";;
|
||||
esac
|
||||
|
||||
count=$((count+1))
|
||||
done
|
||||
|
||||
echo "1..$count"
|
@ -1,18 +1,28 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import glob
|
||||
import os.path
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
## fix paths for running under Wine
|
||||
def systemise_path(path):
|
||||
if "@EXEEXT@" == ".exe":
|
||||
return "Z:%s" % os.path.abspath(path)
|
||||
return path
|
||||
|
||||
|
||||
SDIR = "@abs_top_srcdir@"
|
||||
BDIR = "@abs_top_builddir@"
|
||||
|
||||
TOOL = os.path.join(BDIR, "tools/json-schema")
|
||||
TOOL = os.path.join(BDIR, "tools", "json-schema@EXEEXT@")
|
||||
|
||||
RUNNER = os.path.join("@abs_top_srcdir@", "build-aux", "wine-crlf.sh") if "@EXEEXT@" == ".exe" else "/usr/bin/env"
|
||||
|
||||
TEST_EXTRACT = re.compile("(.*?)_(\d{4})_(pass|fail).json")
|
||||
|
||||
SCHEMA_DIR = os.path.join(SDIR, "test/json/schema")
|
||||
SCHEMA_DIR = os.path.join(SDIR, "test", "json", "schema")
|
||||
SCHEMAS = glob.iglob(os.path.join(SCHEMA_DIR, "*.schema"))
|
||||
|
||||
EXPECTED = {
|
||||
@ -22,17 +32,23 @@ EXPECTED = {
|
||||
|
||||
|
||||
print("1..%s" % len(glob.glob(os.path.join(SCHEMA_DIR, "*.json"))))
|
||||
code=0
|
||||
|
||||
for schema in SCHEMAS:
|
||||
(name, _) = os.path.splitext(os.path.basename(schema))
|
||||
test_glob = name + "_*.json"
|
||||
|
||||
for test in glob.iglob(os.path.join(SCHEMA_DIR, test_glob)):
|
||||
command = [TOOL, schema, test]
|
||||
command = [RUNNER, TOOL, systemise_path(schema), systemise_path(test)]
|
||||
|
||||
(name, seq, success) = TEST_EXTRACT.match(test).groups()
|
||||
res = subprocess.call(command, stdout=subprocess.DEVNULL,stderr=subprocess.STDOUT)
|
||||
|
||||
if res != EXPECTED[success]:
|
||||
print('got res', res)
|
||||
print('not ok -', os.path.basename(test), '#', ' '.join(command))
|
||||
code=1
|
||||
else:
|
||||
print('ok -', os.path.basename(test))
|
||||
|
||||
sys.exit(code)
|
Loading…
Reference in New Issue
Block a user