# Tests for the dependency injection core # # Copyright (C) 2012 Red Hat, Inc. # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions of # the GNU General Public License v.2, or (at your option) any later version. # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY expressed or implied, including the implied warranties of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. You should have received a copy of the # GNU General Public License along with this program; if not, write to the # Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. Any Red Hat trademarks that are incorporated in the # source code or documentation are not subject to the GNU General Public # License and may only be used or replicated with the express permission of # Red Hat, Inc. # # Red Hat Author(s): Martin Sivak # from .core import * import unittest def method_to_inject(): pass 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_named_register(self): """Test injection to instance method.""" Test.register(method_to_inject) 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()