# standard imports import unittest # bsie imports from bsie.extractor import base from bsie.utils import bsfs, node as _node, ns # objects to test from bsie.extractor.generic.path import Path ## code ## class TestPath(unittest.TestCase): def test_eq(self): # distinct instances, same data self.assertEqual(Path(), Path()) # different classes class Foo(): pass self.assertNotEqual(Path(), Foo()) self.assertNotEqual(Path(), 123) self.assertNotEqual(Path(), None) def test_schema(self): self.assertEqual(Path().schema, bsfs.schema.from_string(base.SCHEMA_PREAMBLE + ''' bse:filename rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''')) def test_extract(self): ext = Path() node = _node.Node(ns.bsfs.File, '') # Blank node content = '/tmp/foo/bar' p_filename = ext.schema.predicate(ns.bse.filename) entity = ext.schema.node(ns.bsfs.Node).child(ns.bsfs.Entity) string = ext.schema.literal(ns.bsfs.Literal).child(ns.xsd.string) # baseline self.assertSetEqual(set(ext.extract(node, content, (p_filename, ))), {(node, p_filename, 'bar')}) # predicates parameter is respected p_foo = ext.schema.predicate(ns.bsfs.Predicate).child(ns.bse.foo, domain=entity, range=string) # unsupported predicate self.assertSetEqual(set(ext.extract(node, content, (p_filename, p_foo))), {(node, p_filename, 'bar')}) self.assertSetEqual(set(ext.extract(node, content, (p_foo, ))), set()) # predicates are validated p_bar = p_foo.child(ns.bse.filename) # same URI but different hierarchy self.assertSetEqual(set(ext.extract(node, content, (p_filename, p_bar))), {(node, p_filename, 'bar')}) self.assertSetEqual(set(ext.extract(node, content, (p_bar, ))), set()) # path variations self.assertSetEqual(set(ext.extract(node, 'bar', (p_filename, ))), {(node, p_filename, 'bar')}) self.assertSetEqual(set(ext.extract(node, '', (p_filename, ))), {(node, p_filename, '')}) # errors are suppressed self.assertSetEqual(set(ext.extract(node, None, (p_filename, ))), set()) ## main ## if __name__ == '__main__': unittest.main() ## EOF ##