diff options
Diffstat (limited to 'di/core_test.py')
-rw-r--r-- | di/core_test.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/di/core_test.py b/di/core_test.py new file mode 100644 index 0000000..17d88fa --- /dev/null +++ b/di/core_test.py @@ -0,0 +1,89 @@ +from .core import * +import unittest + + +class BareFuncEnableTestCase(unittest.TestCase): + @inject(injected_func = str.lower) + def method(self, arg): + return injected_func(arg) + +class BareFuncTestCase(unittest.TestCase): + @inject(injected_func = str.lower) + def method(self, arg): + return injected_func(arg) + + @inject(injected_func = method) + def method2(self, arg): + return injected_func(self, arg) + + def test_bare_inject(self): + """Tests the injection to plain methods.""" + self.assertEqual("a", self.method("A")) + + def test_double_inject(self): + """Tests the injection to two plain methods.""" + self.assertEqual("a", self.method2("A")) + + def test_inject_global_tainting(self): + """Tests whether the global namespace is clean + after the injection is done.""" + global injected_func + injected_func = None + self.method("A") + self.assertEqual(None, injected_func) + + +@inject(injected_func = str.lower) +class Test(object): + """Test fixture for class injection.""" + @usesclassinject + def method(self, arg): + return injected_func(arg) + + +@inject(injected_func = str.lower) +class TestInit(object): + """Test fixture for injection to __init__.""" + @usesclassinject + def __init__(self, arg): + self.value = injected_func(arg) + + +@inject(injected_func = str.lower) +class TestCallable(object): + """Test fixture for callable classes.""" + @usesclassinject + def __call__(self, arg): + return injected_func(arg) + +class TestCallableSingle(object): + """Test fixture for callable classes with + simple method injection.""" + @inject(injected_func = str.lower) + def __call__(self, arg): + return injected_func(arg) + +class ClassDITestCase(unittest.TestCase): + + def test_class_inject(self): + """Test injection to instance method.""" + obj = Test() + self.assertEqual("a", obj.method("A")) + + def test_class_init_inject(self): + """Test injection to class constructor.""" + obj = TestInit("A") + self.assertEqual("a", obj.value) + + def test_callable_class(self): + """Test class injection to callable class.""" + obj = TestCallable() + self.assertEqual("a", obj("A")) + + def test_callable_class_single(self): + """Test method injection to callable class.""" + obj = TestCallableSingle() + self.assertEqual("a", obj("A")) + +if __name__ == "__main__": + unittest.main() |