""" Part of the bsie test suite. A copy of the license is provided with the project. Author: Matthias Baumgartner, 2022 """ # standard imports import argparse import contextlib import io import os import tempfile import unittest # external imports import yaml # bsie imports from bsie.utils import bsfs # objects to test from bsie.apps.info import main ## code ## class TestIndex(unittest.TestCase): def setUp(self): config = { 'ReaderBuilder': {}, 'ExtractorBuilder': [ {'bsie.extractor.preview.Preview': { 'max_sides': [50], }}, {'bsie.extractor.generic.path.Path': {}}, {'bsie.extractor.generic.constant.Constant': { 'schema': ''' bse:author rdfs:subClassOf bsfs:Predicate ; rdfs:domain bsfs:Entity ; rdfs:range xsd:string ; bsfs:unique "true"^^xsd:boolean . ''', 'tuples': [['http://bsfs.ai/schema/Entity#author', 'Me, myself, and I']], }}, {'bsie.extractor.image.colors_spatial.ColorsSpatial': { 'width': 2, 'height': 2, 'exp': 2, }}, ] } # create config file _, self.config_path = tempfile.mkstemp(prefix='bsie-test-', suffix='.yaml') with open(self.config_path, 'wt') as cfile: yaml.dump(config, cfile) def tearDown(self): if os.path.exists(self.config_path): os.unlink(self.config_path) def test_predicates(self): outbuf = io.StringIO() with contextlib.redirect_stdout(outbuf): # show predicates infos main(['--config', self.config_path, 'predicates']) # verify output self.assertSetEqual({pred for pred in outbuf.getvalue().split('\n') if pred != ''}, { 'http://bsfs.ai/schema/Entity#author', 'http://bsfs.ai/schema/Predicate', 'http://bsfs.ai/schema/Entity#filename', 'http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', 'http://bsfs.ai/schema/Entity#preview', 'http://bsfs.ai/schema/Preview#width', 'http://bsfs.ai/schema/Preview#height', 'http://bsfs.ai/schema/Preview#asset', }) def test_schema(self): outbuf = io.StringIO() with contextlib.redirect_stdout(outbuf): # show schema infos main(['--config', self.config_path, 'schema']) # verify output schema = bsfs.schema.from_string(outbuf.getvalue()) self.assertSetEqual({pred.uri for pred in schema.predicates()}, { 'http://bsfs.ai/schema/Entity#author', 'http://bsfs.ai/schema/Predicate', 'http://bsfs.ai/schema/Entity#filename', 'http://bsfs.ai/schema/Entity/colors_spatial#0658f2234a054e1dd59a14462c89f7733e019160419c796356aa831498bd0a04', 'http://bsfs.ai/schema/Entity#preview', 'http://bsfs.ai/schema/Preview#width', 'http://bsfs.ai/schema/Preview#height', 'http://bsfs.ai/schema/Preview#asset', }) def test_invalid(self): with contextlib.redirect_stderr(io.StringIO()): self.assertRaises(SystemExit, main, ['foobar']) ## main ## if __name__ == '__main__': unittest.main() ## EOF ##