82 lines
2.8 KiB
Python
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(...)'))
|