# standard imports import os 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.stat import Stat ## code ## class TestStat(unittest.TestCase): def test_eq(self): # distinct instances, same data self.assertEqual(Stat(), Stat()) # different classes class Foo(): pass self.assertNotEqual(Stat(), Foo()) self.assertNotEqual(Stat(), 123) self.assertNotEqual(Stat(), None) def test_schema(self): self.assertEqual(Stat().schema, bsfs.schema.from_string(base.SCHEMA_PREAMBLE + ''' bse:filesize rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:File ; rdfs:range xsd:integer ; bsfs:unique "true"^^xsd:boolean . ''')) def test_extract(self): ext = Stat() node = _node.Node(ns.bsfs.File, '') # Blank node content = os.stat(__file__) p_filesize = ext.schema.predicate(ns.bse.filesize) 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_filesize, ))), {(node, p_filesize, content.st_size)}) # 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_filesize, p_foo))), {(node, p_filesize, content.st_size)}) self.assertSetEqual(set(ext.extract(node, content, (p_foo, ))), set()) # predicates are validated p_bar = p_foo.child(ns.bse.filesizse) # same URI but different hierarchy self.assertSetEqual(set(ext.extract(node, content, (p_filesize, p_bar))), {(node, p_filesize, content.st_size)}) self.assertSetEqual(set(ext.extract(node, content, (p_bar, ))), set()) # content variations self.assertSetEqual(set(ext.extract(node, os.stat_result([12345] * len(content)), (p_filesize, p_bar))), {(node, p_filesize, 12345)}) # errors are suppressed self.assertSetEqual(set(ext.extract(node, None, (p_filesize, ))), set()) ## main ## if __name__ == '__main__': unittest.main() ## EOF ##