""" Part of the bsie test suite. A copy of the license is provided with the project. Author: Matthias Baumgartner, 2022 """ # standard imports import unittest # bsie imports from bsie.utils import errors # objects to test from bsie.reader import ReaderBuilder ## code ## class TestReaderBuilder(unittest.TestCase): def test_build(self): builder = ReaderBuilder({'bsie.reader.path.Path': {}}) # build configured reader cls = builder.build('bsie.reader.path.Path') import bsie.reader.path self.assertIsInstance(cls, bsie.reader.path.Path) # build unconfigured reader cls = builder.build('bsie.reader.stat.Stat') import bsie.reader.stat self.assertIsInstance(cls, bsie.reader.stat.Stat) # re-build previous reader (test cache) self.assertEqual(cls, builder.build('bsie.reader.stat.Stat')) # test invalid self.assertRaises(TypeError, builder.build, 123) self.assertRaises(TypeError, builder.build, None) self.assertRaises(ValueError, builder.build, '') self.assertRaises(ValueError, builder.build, 'Path') self.assertRaises(errors.BuilderError, builder.build, 'path.Path') # invalid config builder = ReaderBuilder({'bsie.reader.stat.Stat': dict(foo=123)}) self.assertRaises(errors.BuilderError, builder.build, 'bsie.reader.stat.Stat') builder = ReaderBuilder({'bsie.reader.stat.Stat': 123}) self.assertRaises(TypeError, builder.build, 'bsie.reader.stat.Stat') # no instructions builder = ReaderBuilder({}) cls = builder.build('bsie.reader.stat.Stat') self.assertIsInstance(cls, bsie.reader.stat.Stat) ## main ## if __name__ == '__main__': unittest.main() ## EOF ##