aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_filter.py
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-07-27 19:01:45 -0400
committerDavid Robillard <d@drobilla.net>2022-01-14 19:37:51 -0500
commit1159aea45d9bc4ade2e82856be403d58e050f32d (patch)
tree870117b2a0a4b386727107bd85c736a020058309 /test/test_filter.py
parent89612ec05f596d135640413e093251fb9691ca14 (diff)
downloadserd-1159aea45d9bc4ade2e82856be403d58e050f32d.tar.gz
serd-1159aea45d9bc4ade2e82856be403d58e050f32d.tar.bz2
serd-1159aea45d9bc4ade2e82856be403d58e050f32d.zip
Add statement filtering
Diffstat (limited to 'test/test_filter.py')
-rwxr-xr-xtest/test_filter.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/test/test_filter.py b/test/test_filter.py
new file mode 100755
index 00000000..d44677f5
--- /dev/null
+++ b/test/test_filter.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python3
+
+"""Test filtering statements inclusively."""
+
+import argparse
+import sys
+import shlex
+import subprocess
+import tempfile
+
+DOCUMENTS = {
+ "ntriples": """
+ <urn:example:s> <urn:example:p> <urn:example:o> .
+ <urn:example:s> <urn:example:q> <urn:example:r> .
+""",
+ "nquads": """
+ <urn:example:s> <urn:example:p> <urn:example:o> <urn:example:g> .
+ <urn:example:s> <urn:example:q> <urn:example:r> <urn:example:g> .
+""",
+}
+
+parser = argparse.ArgumentParser(description=__doc__)
+
+parser.add_argument("--serdi", default="./serdi", help="path to serdi")
+parser.add_argument("--wrapper", default="", help="executable wrapper")
+
+args = parser.parse_args(sys.argv[1:])
+
+
+def check_pattern(syntax, pattern, result):
+ command = shlex.split(args.wrapper) + [
+ args.serdi,
+ "-i",
+ syntax,
+ "-F",
+ pattern,
+ "-s",
+ DOCUMENTS[syntax],
+ ]
+
+ with tempfile.TemporaryFile() as out:
+ proc = subprocess.run(
+ command,
+ check=False,
+ encoding="utf-8",
+ capture_output=True,
+ )
+
+ assert proc.returncode == 0
+ assert args.wrapper or len(proc.stderr) == 0
+ assert proc.stdout == result
+
+
+check_pattern(
+ "ntriples",
+ "?s <urn:example:p> <urn:example:o> .",
+ "<urn:example:s> <urn:example:q> <urn:example:r> .\n",
+)
+
+check_pattern(
+ "ntriples",
+ "<urn:example:s> ?p <urn:example:o> .",
+ "<urn:example:s> <urn:example:q> <urn:example:r> .\n",
+)
+
+check_pattern(
+ "ntriples",
+ "<urn:example:s> <urn:example:p> ?o .",
+ "<urn:example:s> <urn:example:q> <urn:example:r> .\n",
+)
+
+check_pattern(
+ "nquads",
+ "?s <urn:example:p> <urn:example:o> <urn:example:g> .",
+ "<urn:example:s> <urn:example:q> <urn:example:r> <urn:example:g> .\n",
+)
+
+check_pattern(
+ "nquads",
+ "<urn:example:s> ?p <urn:example:o> <urn:example:g> .",
+ "<urn:example:s> <urn:example:q> <urn:example:r> <urn:example:g> .\n",
+)
+
+check_pattern(
+ "nquads",
+ "<urn:example:s> <urn:example:p> ?o <urn:example:g> .",
+ "<urn:example:s> <urn:example:q> <urn:example:r> <urn:example:g> .\n",
+)
+
+check_pattern(
+ "nquads",
+ "<urn:example:s> <urn:example:p> <urn:example:o> ?g .",
+ "<urn:example:s> <urn:example:q> <urn:example:r> <urn:example:g> .\n",
+)