objtools/tests/test_registry.py

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})