# standard imports import contextlib import io import json import os import tempfile import unittest import yaml # objects to test from bsie.apps import main ## code ## class TestMain(unittest.TestCase): def setUp(self): config = { 'ReaderBuilder': {}, 'ExtractorBuilder': [ {'bsie.extractor.generic.stat.Stat': {}}, {'bsie.extractor.generic.path.Path': {}}, ] } # 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_main(self): # must at least pass an app with contextlib.redirect_stderr(io.StringIO()): self.assertRaises(SystemExit, main, []) # app takes over with contextlib.redirect_stderr(io.StringIO()): self.assertRaises(SystemExit, main, ['info']) outbuf = io.StringIO() with contextlib.redirect_stdout(outbuf): main(['info', '--config', self.config_path, 'predicates']) self.assertEqual(set(outbuf.getvalue().strip().split('\n')), { 'https://schema.bsfs.io/ie/Node/Entity#filename', 'https://schema.bsfs.io/ie/Node/Entity#dirname', 'https://schema.bsfs.io/ie/Node/Entity#filesize', 'https://schema.bsfs.io/core/Predicate', }) ## main ## if __name__ == '__main__': unittest.main() ## EOF ##