Add tests

This commit is contained in:
Roman Mogylatov 2021-02-07 13:05:27 -05:00
parent 774f6489b1
commit 39144b34a2
4 changed files with 1828 additions and 1465 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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: ...

View File

@ -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())