1import unittest 2 3from ..type_registry import LazyRegistry 4 5from .dummies import A, B, C, D, Mixed, Abstract, Concrete, ConcreteSubclass 6 7 8class TestLazyRegistry(unittest.TestCase): 9 def setUp(self): 10 self.registry = LazyRegistry() 11 # Bodge in a different importer. 12 self.registry._import_object = 'Imported {0}'.format 13 14 def test_deferred_push(self): 15 self.registry.push('dummies:A', 'foo:A') 16 self.registry.push('dummies:C', 'foo:C') 17 self.assertEqual(self.registry.lookup_by_type(A), 'Imported foo:A') 18 self.assertEqual(self.registry.lookup_by_type(B), 'Imported foo:A') 19 self.assertEqual(self.registry.lookup_by_type(C), 'Imported foo:C') 20 self.assertRaises(KeyError, self.registry.lookup_by_type, D) 21 22 def test_greedy_push(self): 23 self.registry.push(A, 'foo:A') 24 self.registry.push(C, 'foo:C') 25 self.assertEqual(self.registry.lookup_by_type(A), 'Imported foo:A') 26 self.assertEqual(self.registry.lookup_by_type(B), 'Imported foo:A') 27 self.assertEqual(self.registry.lookup_by_type(C), 'Imported foo:C') 28 self.assertRaises(KeyError, self.registry.lookup_by_type, D) 29 30 def test_mro(self): 31 self.registry.push('dummies:A', 'foo:A') 32 self.registry.push('dummies:D', 'foo:D') 33 self.assertEqual(self.registry.lookup_by_type(Mixed), 'Imported foo:A') 34 35 def test_lookup_instance(self): 36 self.registry.push(A, 'foo:A') 37 self.registry.push(C, 'foo:C') 38 self.assertEqual(self.registry.lookup(A()), 'Imported foo:A') 39 self.assertEqual(self.registry.lookup(B()), 'Imported foo:A') 40 self.assertEqual(self.registry.lookup(C()), 'Imported foo:C') 41 self.assertRaises(KeyError, self.registry.lookup, D()) 42 43 def test_abc(self): 44 self.registry.push_abc(Abstract, 'foo:Abstract') 45 self.assertEqual(self.registry.lookup_by_type(Concrete), 46 'Imported foo:Abstract') 47 self.assertEqual(self.registry.lookup_by_type(ConcreteSubclass), 48 'Imported foo:Abstract') 49