objtools/tests/test_registry.py

82 lines
2.8 KiB
Python

from unittest import TestCase
from unittest.mock import patch, call, MagicMock
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})
def test_repr_pretty(self) -> None:
p = MagicMock(spec_set=['text', 'pretty'])
ClassRegistry(a=object)._repr_pretty_(p, cycle=False)
self.assertEqual(p.text.call_count, 2)
self.assertEqual(p.pretty.call_count, 1)
self.assertListEqual(p.text.call_args_list, [
call('ClassRegistry('),
call(')'),
])
self.assertEqual(p.pretty.call_args, call({'a': object}))
def test_repr_pretty_cycle(self) -> None:
p = MagicMock(spec_set=['text', 'pretty'])
ClassRegistry(a=object)._repr_pretty_(p, cycle=True)
self.assertEqual(p.text.call_count, 1)
self.assertFalse(p.pretty.called)
self.assertEqual(p.text.call_args, call('ClassRegistry(...)'))