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