diff options
author | Matthias Baumgartner <dev@igsor.net> | 2023-02-02 10:04:03 +0100 |
---|---|---|
committer | Matthias Baumgartner <dev@igsor.net> | 2023-02-02 10:04:03 +0100 |
commit | c6856aa6fe2ad478dd5bc6285fb2544c150b2033 (patch) | |
tree | b084d75afbca13c34f2b71b609fd2c63a160522d /test | |
parent | 57327d3df562736cad9e278e13beeb55bf3b52ed (diff) | |
download | tagit-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.py | 111 |
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 ## |