mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-05-16 22:03:46 +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
|
return copied
|
||||||
|
|
||||||
copied = self.__class__()
|
copied = self.__class__()
|
||||||
|
memo[id(self)] = copied
|
||||||
|
|
||||||
copied.provider_type = providers.Provider
|
copied.provider_type = providers.Provider
|
||||||
copied.overridden = providers.deepcopy(self.overridden, memo)
|
copied.overridden = providers.deepcopy(self.overridden, memo)
|
||||||
copied.declarative_parent = self.declarative_parent
|
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():
|
for name, provider in providers.deepcopy(self.providers, memo).items():
|
||||||
setattr(copied, name, provider)
|
copied.set_provider(name, provider)
|
||||||
|
|
||||||
return copied
|
return copied
|
||||||
|
|
||||||
|
|
|
@ -354,7 +354,7 @@ class Resource(Provider[T]):
|
||||||
|
|
||||||
|
|
||||||
class Container(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: ...
|
def __getattr__(self, name: str) -> Provider: ...
|
||||||
@property
|
@property
|
||||||
def container(self) -> T: ...
|
def container(self) -> T: ...
|
||||||
|
|
|
@ -426,3 +426,113 @@ class SelfTests(unittest.TestCase):
|
||||||
|
|
||||||
self.assertEqual(container.providers, {})
|
self.assertEqual(container.providers, {})
|
||||||
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