mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 09:57:37 +03:00 
			
		
		
		
	Add tests
This commit is contained in:
		
							parent
							
								
									774f6489b1
								
							
						
					
					
						commit
						39144b34a2
					
				
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -79,12 +79,18 @@ class DynamicContainer(Container):
 | 
			
		|||
            return copied
 | 
			
		||||
 | 
			
		||||
        copied = self.__class__()
 | 
			
		||||
        memo[id(self)] = copied
 | 
			
		||||
 | 
			
		||||
        copied.provider_type = providers.Provider
 | 
			
		||||
        copied.overridden = providers.deepcopy(self.overridden, memo)
 | 
			
		||||
        copied.declarative_parent = self.declarative_parent
 | 
			
		||||
 | 
			
		||||
        copied.__self__ = providers.deepcopy(self.__self__, memo)
 | 
			
		||||
        for name in copied.__self__.alt_names:
 | 
			
		||||
            copied.set_provider(name, copied.__self__)
 | 
			
		||||
 | 
			
		||||
        for name, provider in providers.deepcopy(self.providers, memo).items():
 | 
			
		||||
            setattr(copied, name, provider)
 | 
			
		||||
            copied.set_provider(name, provider)
 | 
			
		||||
 | 
			
		||||
        return copied
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -354,7 +354,7 @@ class Resource(Provider[T]):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
class Container(Provider[T]):
 | 
			
		||||
    def __init__(self, container_cls: Type[T], container: Optional[T] = None, **overriding_providers: Provider) -> None: ...
 | 
			
		||||
    def __init__(self, container_cls: Type[T], container: Optional[T] = None, **overriding_providers: Union[Provider, Any]) -> None: ...
 | 
			
		||||
    def __getattr__(self, name: str) -> Provider: ...
 | 
			
		||||
    @property
 | 
			
		||||
    def container(self) -> T: ...
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -426,3 +426,113 @@ class SelfTests(unittest.TestCase):
 | 
			
		|||
 | 
			
		||||
        self.assertEqual(container.providers, {})
 | 
			
		||||
        self.assertEqual(Container.providers, {})
 | 
			
		||||
 | 
			
		||||
    def test_container_multiple_instances(self):
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            __self__ = providers.Self()
 | 
			
		||||
 | 
			
		||||
        container1 = Container()
 | 
			
		||||
        container2 = Container()
 | 
			
		||||
 | 
			
		||||
        self.assertIsNot(container1, container2)
 | 
			
		||||
        self.assertIs(container1.__self__(), container1)
 | 
			
		||||
        self.assertIs(container2.__self__(), container2)
 | 
			
		||||
 | 
			
		||||
    def test_deepcopy(self):
 | 
			
		||||
        def call_bar(container):
 | 
			
		||||
            return container.bar()
 | 
			
		||||
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            __self__ = providers.Self()
 | 
			
		||||
            foo = providers.Callable(call_bar, __self__)
 | 
			
		||||
            bar = providers.Object('hello')
 | 
			
		||||
 | 
			
		||||
        container1 = Container()
 | 
			
		||||
        container2 = providers.deepcopy(container1)
 | 
			
		||||
        container1.bar.override('bye')
 | 
			
		||||
 | 
			
		||||
        self.assertIs(container1.foo(), 'bye')
 | 
			
		||||
        self.assertIs(container2.foo(), 'hello')
 | 
			
		||||
 | 
			
		||||
    def test_deepcopy_alt_names_1(self):
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            __self__ = providers.Self()
 | 
			
		||||
            foo = __self__
 | 
			
		||||
            bar = foo
 | 
			
		||||
 | 
			
		||||
        container1 = Container()
 | 
			
		||||
        container2 = providers.deepcopy(container1)
 | 
			
		||||
 | 
			
		||||
        self.assertIs(container2.__self__(), container2)
 | 
			
		||||
        self.assertIs(container2.foo(), container2)
 | 
			
		||||
        self.assertIs(container2.bar(), container2)
 | 
			
		||||
 | 
			
		||||
    def test_deepcopy_alt_names_2(self):
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            self = providers.Self()
 | 
			
		||||
 | 
			
		||||
        container1 = Container()
 | 
			
		||||
        container2 = providers.deepcopy(container1)
 | 
			
		||||
 | 
			
		||||
        self.assertIs(container2.__self__(), container2)
 | 
			
		||||
        self.assertIs(container2.self(), container2)
 | 
			
		||||
 | 
			
		||||
    def test_deepcopy_no_self_dependencies(self):
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            __self__ = providers.Self()
 | 
			
		||||
 | 
			
		||||
        container1 = Container()
 | 
			
		||||
        container2 = providers.deepcopy(container1)
 | 
			
		||||
 | 
			
		||||
        self.assertIsNot(container1, container2)
 | 
			
		||||
        self.assertIsNot(container1.__self__, container2.__self__)
 | 
			
		||||
        self.assertIs(container1.__self__(), container1)
 | 
			
		||||
        self.assertIs(container2.__self__(), container2)
 | 
			
		||||
 | 
			
		||||
    def test_with_container_provider(self):
 | 
			
		||||
        def call_bar(container):
 | 
			
		||||
            return container.bar()
 | 
			
		||||
 | 
			
		||||
        class SubContainer(containers.DeclarativeContainer):
 | 
			
		||||
            __self__ = providers.Self()
 | 
			
		||||
            foo = providers.Callable(call_bar, __self__)
 | 
			
		||||
            bar = providers.Object('hello')
 | 
			
		||||
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            sub_container = providers.Container(SubContainer)
 | 
			
		||||
 | 
			
		||||
            baz = providers.Callable(lambda value: value, sub_container.foo)
 | 
			
		||||
 | 
			
		||||
        container = Container()
 | 
			
		||||
 | 
			
		||||
        self.assertIs(container.baz(), 'hello')
 | 
			
		||||
 | 
			
		||||
    def test_with_container_provider_overriding(self):
 | 
			
		||||
        def call_bar(container):
 | 
			
		||||
            return container.bar()
 | 
			
		||||
 | 
			
		||||
        class SubContainer(containers.DeclarativeContainer):
 | 
			
		||||
            __self__ = providers.Self()
 | 
			
		||||
            foo = providers.Callable(call_bar, __self__)
 | 
			
		||||
            bar = providers.Object('hello')
 | 
			
		||||
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            sub_container = providers.Container(SubContainer, bar='bye')
 | 
			
		||||
 | 
			
		||||
            baz = providers.Callable(lambda value: value, sub_container.foo)
 | 
			
		||||
 | 
			
		||||
        container = Container()
 | 
			
		||||
 | 
			
		||||
        self.assertIs(container.baz(), 'bye')
 | 
			
		||||
 | 
			
		||||
    def test_with_container_provider_self(self):
 | 
			
		||||
        class SubContainer(containers.DeclarativeContainer):
 | 
			
		||||
            __self__ = providers.Self()
 | 
			
		||||
 | 
			
		||||
        class Container(containers.DeclarativeContainer):
 | 
			
		||||
            sub_container = providers.Container(SubContainer)
 | 
			
		||||
 | 
			
		||||
        container = Container()
 | 
			
		||||
 | 
			
		||||
        self.assertIs(container.__self__(), container)
 | 
			
		||||
        self.assertIs(container.sub_container().__self__(), container.sub_container())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user