diff --git a/tests/unit/containers/test_dynamic_py2_py3.py b/tests/unit/containers/test_dynamic_py2_py3.py index 30243f4f..3c072bca 100644 --- a/tests/unit/containers/test_dynamic_py2_py3.py +++ b/tests/unit/containers/test_dynamic_py2_py3.py @@ -186,6 +186,52 @@ class DeclarativeContainerInstanceTests(unittest.TestCase): self.assertEqual(container.overridden, tuple()) self.assertEqual(container.p11.overridden, tuple()) + def test_init_shutdown_resources(self): + def _init1(): + _init1.init_counter += 1 + yield + _init1.shutdown_counter += 1 + + _init1.init_counter = 0 + _init1.shutdown_counter = 0 + + def _init2(): + _init2.init_counter += 1 + yield + _init2.shutdown_counter += 1 + + _init2.init_counter = 0 + _init2.shutdown_counter = 0 + + class Container(containers.DeclarativeContainer): + resource1 = providers.Resource(_init1) + resource2 = providers.Resource(_init2) + + container = Container() + self.assertEqual(_init1.init_counter, 0) + self.assertEqual(_init1.shutdown_counter, 0) + self.assertEqual(_init2.init_counter, 0) + self.assertEqual(_init2.shutdown_counter, 0) + + container.init_resources() + self.assertEqual(_init1.init_counter, 1) + self.assertEqual(_init1.shutdown_counter, 0) + self.assertEqual(_init2.init_counter, 1) + self.assertEqual(_init2.shutdown_counter, 0) + + container.shutdown_resources() + self.assertEqual(_init1.init_counter, 1) + self.assertEqual(_init1.shutdown_counter, 1) + self.assertEqual(_init2.init_counter, 1) + self.assertEqual(_init2.shutdown_counter, 1) + + container.init_resources() + container.shutdown_resources() + self.assertEqual(_init1.init_counter, 2) + self.assertEqual(_init1.shutdown_counter, 2) + self.assertEqual(_init2.init_counter, 2) + self.assertEqual(_init2.shutdown_counter, 2) + if __name__ == '__main__': unittest.main() diff --git a/tests/unit/providers/test_resource_py3.py b/tests/unit/providers/test_resource_py3.py index bb5528ac..09286eeb 100644 --- a/tests/unit/providers/test_resource_py3.py +++ b/tests/unit/providers/test_resource_py3.py @@ -4,7 +4,7 @@ import sys import unittest2 as unittest -from dependency_injector import providers, resources, errors +from dependency_injector import containers, providers, resources, errors def init_fn(*args, **kwargs): @@ -20,20 +20,30 @@ class ResourceTests(unittest.TestCase): provider = providers.Resource(init_fn) self.assertIsInstance(provider.provided, providers.ProvidedInstance) - # Initialization and shutdown - # Injection - # + Initializer: function - # + Initializer: generator - # + Initializer: base class - # + Initializer: unknown type - # + Init() and shutdown() methods - # + Initialized - # + Args - # + Kwargs - # + Overridden - # + Deepcopy - # + Deepcopy initialized - # + Repr + def test_injection(self): + resource = object() + + def _init(): + _init.counter += 1 + return resource + _init.counter = 0 + + class Container(containers.DeclarativeContainer): + resource = providers.Resource(_init) + dependency1 = providers.List(resource) + dependency2 = providers.List(resource) + + container = Container() + list1 = container.dependency1() + list2 = container.dependency2() + + self.assertEqual(list1, [resource]) + self.assertIs(list1[0], resource) + + self.assertEqual(list2, [resource]) + self.assertIs(list2[0], resource) + + self.assertEqual(_init.counter, 1) def test_init_function(self): def _init():