mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-03-27 13:24:23 +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