Source code for simpleml.tests.test_registry

'''
Registry related tests
'''

__author__ = 'Elisha Yadgaran'

from simpleml.persistables.meta_registry import MetaRegistry, Registry, SIMPLEML_REGISTRY
import unittest
from abc import abstractmethod
from future.utils import with_metaclass


[docs]class RegistryTests(unittest.TestCase):
[docs] def test_registry_adds_class_name(self): registry = Registry() # Define Class class FakeClass(object): pass class_name = 'FakeClass' self.assertNotIn(class_name, registry.registry) # Register registry.register(FakeClass) # Test self.assertIn(class_name, registry.registry) self.assertEqual(FakeClass, registry.get(class_name))
[docs] def test_duplicate_class_error(self): registry = Registry() # Define Class class FakeClass(object): pass class_name = 'FakeClass' self.assertNotIn(class_name, registry.registry) # Register registry.register(FakeClass) self.assertIn(class_name, registry.registry) self.assertEqual(FakeClass, registry.get(class_name)) # Try again with self.assertRaises(ValueError): registry.register(FakeClass)
[docs]class MetaRegistryTests(unittest.TestCase):
[docs] def test_abstract_method_error(self): class AbstractTestClass(with_metaclass(MetaRegistry, object)): __abstract__ = True @abstractmethod def blah(self): pass class FailingTestClass(AbstractTestClass): pass with self.assertRaises(TypeError): AbstractTestClass() with self.assertRaises(TypeError): FailingTestClass()
[docs] def test_register_on_import(self): def import_new_class(): class BLAHBLAHTESTCLASS(with_metaclass(MetaRegistry, object)): __abstract__ = True return BLAHBLAHTESTCLASS class_name = 'BLAHBLAHTESTCLASS' self.assertNotIn(class_name, SIMPLEML_REGISTRY.registry) # Register fake_class = import_new_class() # Test self.assertIn(class_name, SIMPLEML_REGISTRY.registry) self.assertEqual(fake_class, SIMPLEML_REGISTRY.get(class_name))