aboutsummaryrefslogtreecommitdiffstats
path: root/test/run_test_suite.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/run_test_suite.py')
-rwxr-xr-xtest/run_test_suite.py86
1 files changed, 21 insertions, 65 deletions
diff --git a/test/run_test_suite.py b/test/run_test_suite.py
index 05dc81ca..9af3df9e 100755
--- a/test/run_test_suite.py
+++ b/test/run_test_suite.py
@@ -2,6 +2,8 @@
"""Run an RDF test suite with serdi."""
+import serd_test_util
+
import argparse
import datetime
import difflib
@@ -15,31 +17,6 @@ import tempfile
import urllib.parse
-def earl_assertion(test, passed, asserter):
- """Return a Turtle description of an assertion for the test report."""
-
- asserter_str = ""
- if asserter is not None:
- asserter_str = "\n\tearl:assertedBy <%s> ;" % asserter
-
- return """
-[]
-\ta earl:Assertion ;%s
-\tearl:subject <http://drobilla.net/sw/serd> ;
-\tearl:test <%s> ;
-\tearl:result [
-\t\ta earl:TestResult ;
-\t\tearl:outcome %s ;
-\t\tdc:date "%s"^^xsd:dateTime
-\t] .
-""" % (
- asserter_str,
- test,
- "earl:passed" if passed else "earl:failed",
- datetime.datetime.now().replace(microsecond=0).isoformat(),
- )
-
-
def log_error(message):
"""Log an error message to stderr"""
@@ -141,37 +118,6 @@ def _test_output_syntax(test_class):
raise Exception("Unknown test class <{}>".format(test_class))
-def _load_rdf(filename, base_uri, command_prefix):
- """Load an RDF file as dictionaries via serdi (only supports URIs)."""
-
- rdf_type = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
- model = {}
- instances = {}
-
- cmd = command_prefix + ["-I", base_uri, filename]
- proc = subprocess.run(cmd, capture_output=True, check=True)
- for line in proc.stdout.splitlines():
- matches = re.match(
- r"<([^ ]*)> <([^ ]*)> <([^ ]*)> \.", line.decode("utf-8")
- )
- if matches:
- s, p, o = (matches.group(1), matches.group(2), matches.group(3))
- if s not in model:
- model[s] = {p: [o]}
- elif p not in model[s]:
- model[s][p] = [o]
- else:
- model[s][p].append(o)
-
- if p == rdf_type:
- if o not in instances:
- instances[o] = set([s])
- else:
- instances[o].update([s])
-
- return model, instances
-
-
def _option_combinations(options):
"""Return an iterator that cycles through all combinations of options."""
@@ -213,7 +159,7 @@ def _file_lines_equal(patha, pathb, subst_from="", subst_to=""):
for path in (patha, pathb):
if not os.access(path, os.F_OK):
- sys.stderr.write("error: missing file %s" % path)
+ log_error("missing file %s\n" % path)
return False
la = sorted(set(io.open(patha, encoding="utf-8").readlines()))
@@ -237,7 +183,9 @@ def test_suite(
mf = "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#"
test_dir = os.path.dirname(manifest_path)
- model, instances = _load_rdf(manifest_path, base_uri, command_prefix)
+ model, instances = serd_test_util.load_rdf(
+ manifest_path, base_uri, command_prefix
+ )
top_dir = os.path.commonpath([os.getcwd(), os.path.abspath(test_dir)])
out_test_dir = os.path.relpath(test_dir, top_dir)
@@ -306,7 +254,7 @@ def test_suite(
if not _file_equals(check_path, out_filename):
results.n_failures += 1
log_error(
- "Output {} does not match {}".format(
+ "Output {} does not match {}\n".format(
out_filename, check_path
)
)
@@ -324,14 +272,20 @@ def test_suite(
)
# Run model test for positive test (must succeed)
- out_filename = os.path.join(out_test_dir, test_name + ".model.out")
+ out_filename = os.path.join(
+ out_test_dir, test_name + ".model.out"
+ )
with open(out_filename, "w") as stdout:
- proc = subprocess.run([command[0]] + ['-m'] + command[1:],
- check=True,
- stdout=stdout)
+ proc = subprocess.run(
+ [command[0]] + ["-m"] + command[1:],
+ check=True,
+ stdout=stdout,
+ )
- if proc.returncode == 0 and ((mf + 'result') in model[test]):
+ if proc.returncode == 0 and (
+ (mf + "result") in model[test]
+ ):
if not _file_lines_equal(check_path, out_filename):
results.n_failures += 1
@@ -366,7 +320,9 @@ def test_suite(
# Write test report entry
if report_filename:
with open(report_filename, "a") as report:
- report.write(earl_assertion(test, passed, asserter))
+ report.write(
+ serd_test_util.earl_assertion(test, passed, asserter)
+ )
# Run all test types in the test suite
results = Results()