summaryrefslogtreecommitdiffstats
path: root/di/core_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'di/core_test.py')
-rw-r--r--di/core_test.py89
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()