aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-02-02 10:04:03 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-02-02 10:04:03 +0100
commitc6856aa6fe2ad478dd5bc6285fb2544c150b2033 (patch)
treeb084d75afbca13c34f2b71b609fd2c63a160522d /test
parent57327d3df562736cad9e278e13beeb55bf3b52ed (diff)
downloadtagit-c6856aa6fe2ad478dd5bc6285fb2544c150b2033.tar.gz
tagit-c6856aa6fe2ad478dd5bc6285fb2544c150b2033.tar.bz2
tagit-c6856aa6fe2ad478dd5bc6285fb2544c150b2033.zip
filter port
Diffstat (limited to 'test')
-rw-r--r--test/parsing/filter/test_to_string.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/test/parsing/filter/test_to_string.py b/test/parsing/filter/test_to_string.py
new file mode 100644
index 0000000..6df7360
--- /dev/null
+++ b/test/parsing/filter/test_to_string.py
@@ -0,0 +1,111 @@
+"""
+
+Part of the tagit test suite.
+A copy of the license is provided with the project.
+Author: Matthias Baumgartner, 2022
+"""
+# standard imports
+import contextlib
+import io
+import unittest
+
+# tagit imports
+with contextlib.redirect_stderr(io.StringIO()):
+ from tagit.parsing.filter.from_string import FromString
+ from tagit.utils import bsfs, errors, ns
+ from tagit.utils.bsfs import ast
+
+ # objects to test
+ from tagit.parsing.filter.to_string import ToString
+
+
+## code ##
+
+class TestFromString(unittest.TestCase):
+ def setUp(self):
+ self.schema = bsfs.schema.from_string('''
+ # common external prefixes
+ prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+ prefix xsd: <http://www.w3.org/2001/XMLSchema#>
+
+ # common bsfs prefixes
+ prefix bsfs: <http://bsfs.ai/schema/>
+ prefix bse: <http://bsfs.ai/schema/Entity#>
+
+ # nodes
+ bsfs:Entity rdfs:subClassOf bsfs:Node .
+ bsfs:Tag rdfs:subClassOf bsfs:Node .
+
+ # literals
+ bsfs:Time rdfs:subClassOf bsfs:Literal .
+ xsd:string rdfs:subClassOf bsfs:Literal .
+ bsfs:Number rdfs:subClassOf bsfs:Literal .
+ xsd:integer rdfs:subClassOf bsfs:Number .
+
+ # predicates
+ bse:mime rdfs:subClassOf bsfs:Predicate ;
+ rdfs:domain bsfs:Entity ;
+ rdfs:range xsd:string ;
+ bsfs:unique "true"^^xsd:boolean .
+
+ bse:iso rdfs:subClassOf bsfs:Predicate ;
+ rdfs:domain bsfs:Entity ;
+ rdfs:range xsd:integer ;
+ bsfs:unique "true"^^xsd:boolean .
+
+ bse:time rdfs:subClassOf bsfs:Predicate ;
+ rdfs:domain bsfs:Entity ;
+ rdfs:range bsfs:Time;
+ bsfs:unique "true"^^xsd:boolean .
+
+ bse:tag rdfs:subClassOf bsfs:Predicate ;
+ rdfs:domain bsfs:Entity ;
+ rdfs:range bsfs:Tag ;
+ bsfs:unique "false"^^xsd:boolean .
+
+ bse:rank rdfs:subClassOf bsfs:Predicate ;
+ rdfs:domain bsfs:Entity ;
+ rdfs:range xsd:integer ;
+ bsfs:unique "false"^^xsd:boolean .
+
+ ''')
+ self.to_string = ToString(self.schema)
+ self.from_string = FromString(self.schema)
+
+ def test_has(self):
+ self.assertEqual('has iso', self.to_string(self.from_string('has iso')))
+ #from debug import debug
+ #debug(locals(), globals())
+
+ def test_categorical(self):
+ self.assertEqual('iso = 100.0', self.to_string(self.from_string('iso = 100')))
+
+ def test_tag(self):
+ self.assertEqual('foobar', self.to_string(self.from_string('foobar')))
+ self.assertEqual('not foobar', self.to_string(self.from_string('not foobar')))
+ self.assertEqual('~ foobar', self.to_string(self.from_string('~ foobar')))
+ self.assertEqual('!~ foobar', self.to_string(self.from_string('!~ foobar')))
+ self.assertIn(self.to_string(self.from_string('foo, bar')), ('"foo", "bar"', '"bar", "foo"'))
+
+ def test_range(self):
+ self.assertEqual('iso < 100.0', self.to_string(self.from_string('iso < 100')))
+ self.assertEqual('iso <= 100.0', self.to_string(self.from_string('iso <= 100')))
+ self.assertEqual('iso > 100.0', self.to_string(self.from_string('iso > 100')))
+ self.assertEqual('iso >= 100.0', self.to_string(self.from_string('iso >= 100')))
+ self.assertEqual('iso = [10.0 - 100.0]', self.to_string(self.from_string('iso = [10-100]')))
+ raise NotImplementedError() # FIXME: test with dates!
+
+ def test_entity(self):
+ self.assertEqual('id in "http://example.com/entity#1234"',
+ self.to_string(self.from_string('id in "http://example.com/entity#1234"')))
+
+ def test_group(self):
+ self.assertEqual('group in "http://example.com/group#1234"',
+ self.to_string(self.from_string('group in "http://example.com/group#1234"')))
+
+## main ##
+
+if __name__ == '__main__':
+ unittest.main()
+
+## EOF ##