diff --git a/tests/unit/containers/instance/test_custom_strings_py2_py3.py b/tests/unit/containers/instance/test_custom_strings_py2_py3.py new file mode 100644 index 00000000..04692798 --- /dev/null +++ b/tests/unit/containers/instance/test_custom_strings_py2_py3.py @@ -0,0 +1,47 @@ +"""Tests for container with custom string classes as attribute names. + +See: https://github.com/ets-labs/python-dependency-injector/issues/479 +""" + +from dependency_injector import containers, providers +from pytest import fixture, raises + + +class CustomString(str): + pass + + +class CustomClass: + thing = None + + +@fixture +def container(): + return containers.DynamicContainer() + + +@fixture +def provider(): + return providers.Provider() + + +def test_setattr(container: containers.DynamicContainer, provider: providers.Provider): + setattr(container, CustomString("test_attr"), provider) + assert container.test_attr is provider + + +def test_delattr(container: containers.DynamicContainer, provider: providers.Provider): + setattr(container, CustomString("test_attr"), provider) + delattr(container, CustomString("test_attr")) + with raises(AttributeError): + container.test_attr + + +def test_set_provider(container: containers.DynamicContainer, provider: providers.Provider): + container.set_provider(CustomString("test_attr"), provider) + assert container.test_attr is provider + + +def test_set_providers(container: containers.DynamicContainer, provider: providers.Provider): + container.set_providers(**{CustomString("test_attr"): provider}) + assert container.test_attr is provider diff --git a/tests/unit/containers/test_dynamic_py2_py3.py b/tests/unit/containers/test_dynamic_py2_py3.py deleted file mode 100644 index 0b5e408c..00000000 --- a/tests/unit/containers/test_dynamic_py2_py3.py +++ /dev/null @@ -1,40 +0,0 @@ -"""Dependency injector dynamic container unit tests.""" - -import unittest - -from dependency_injector import ( - containers, - providers, -) - - -class DynamicContainerWithCustomStringTests(unittest.TestCase): - # See: https://github.com/ets-labs/python-dependency-injector/issues/479 - - class CustomString(str): - pass - - class CustomClass: - thing = None - - def setUp(self): - self.container = containers.DynamicContainer() - self.provider = providers.Provider() - - def test_setattr(self): - setattr(self.container, self.CustomString("test_attr"), self.provider) - self.assertIs(self.container.test_attr, self.provider) - - def test_delattr(self): - setattr(self.container, self.CustomString("test_attr"), self.provider) - delattr(self.container, self.CustomString("test_attr")) - with self.assertRaises(AttributeError): - self.container.test_attr - - def test_set_provider(self): - self.container.set_provider(self.CustomString("test_attr"), self.provider) - self.assertIs(self.container.test_attr, self.provider) - - def test_set_providers(self): - self.container.set_providers(**{self.CustomString("test_attr"): self.provider}) - self.assertIs(self.container.test_attr, self.provider)