diff options
-rw-r--r-- | di/core_test.py | 89 | ||||
-rw-r--r-- | python-di.spec | 4 | ||||
-rw-r--r-- | setup.py | 24 |
3 files changed, 104 insertions, 13 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() diff --git a/python-di.spec b/python-di.spec index f8d74c9..a5034d5 100644 --- a/python-di.spec +++ b/python-di.spec @@ -18,7 +18,7 @@ URL: http://fedorapeople.org/cgit/msivak/public_git/python-di.git/ Source0: http://pypi.python.org/packages/source/d/di/di-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -#BuildRequires: +BuildRequires: python-nose #Requires: BuildArch: noarch @@ -40,7 +40,7 @@ It is intended to be used in unit testing environments. rm -rf ${buildroot}%{python_sitelib}/setuptools/tests %check -%{__python} setup.py test +%{__python} setup.py nosetests %clean rm -rf $RPM_BUILD_ROOT @@ -15,15 +15,17 @@ setup( author_email = "msivak@redhat.com", description = ("Python module which provides decorators to make " "dependency injection easy to use."), - license = "GPLv2+", - keywords = "testing dependency injection IoC", - url = "http://fedorapeople.org/cgit/msivak/public_git/python-di.git/", - packages = ['di'], - long_description=read('README'), - classifiers=[ - "Development Status :: 3 - Alpha", - "Intended Audience :: Developers", - "Topic :: Software Development :: Testing", - "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", - ], + license = "GPLv2+", + keywords = "testing dependency injection IoC", + url = "http://fedorapeople.org/cgit/msivak/public_git/python-di.git/", + packages = ['di'], + setup_requires= ['nose>=1.0'], + test_suite = "di", + long_description=read('README'), + classifiers=[ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "Topic :: Software Development :: Testing", + "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", + ], ) |