64 lines
2.1 KiB
Python
64 lines
2.1 KiB
Python
from unittest import TestCase
|
|
from unittest.mock import patch
|
|
from objtools.registry import ClassRegistry
|
|
|
|
|
|
class TestRegistry(TestCase):
|
|
|
|
def test_register(self) -> None:
|
|
registry = ClassRegistry()
|
|
registry.register('lol', str)
|
|
self.assertDictEqual(registry, {'lol': str})
|
|
|
|
def test_unregister(self) -> None:
|
|
registry = ClassRegistry({'lol': str})
|
|
registry.unregister('lol')
|
|
self.assertDictEqual(registry, {})
|
|
|
|
def test_check_key(self) -> None:
|
|
registry = ClassRegistry()
|
|
with patch.object(registry, 'check_key') as mock:
|
|
mock.side_effect = KeyError('something')
|
|
with self.assertRaises(KeyError, msg='something'):
|
|
registry.register('lol', str)
|
|
|
|
mock.side_effect = AssertionError('something')
|
|
with self.assertRaises(KeyError, msg='something'):
|
|
registry.register('lol', str)
|
|
|
|
def test_check_value(self) -> None:
|
|
registry = ClassRegistry()
|
|
with patch.object(registry, 'check_value') as mock:
|
|
mock.side_effect = ValueError('something')
|
|
with self.assertRaises(ValueError, msg='something'):
|
|
registry.register('lol', str)
|
|
|
|
mock.side_effect = AssertionError('something')
|
|
with self.assertRaises(ValueError, msg='something'):
|
|
registry.register('lol', str)
|
|
|
|
def test_metaclass(self) -> None:
|
|
registry = ClassRegistry()
|
|
|
|
class Thing(metaclass=registry.metaclass): # type: ignore
|
|
pass
|
|
|
|
self.assertDictEqual(registry, {'Thing': Thing})
|
|
|
|
def test_metaclass_no_register(self) -> None:
|
|
registry = ClassRegistry()
|
|
|
|
class Thing(metaclass=registry.metaclass, # type: ignore
|
|
register=False):
|
|
pass
|
|
|
|
self.assertDictEqual(registry, {})
|
|
|
|
def test_metaclass_key(self) -> None:
|
|
registry = ClassRegistry()
|
|
|
|
class Thing(metaclass=registry.metaclass, key='foo'): # type: ignore
|
|
pass
|
|
|
|
self.assertDictEqual(registry, {'foo': Thing})
|