diff options
Diffstat (limited to 'django/test/simple.py')
-rw-r--r-- | django/test/simple.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/django/test/simple.py b/django/test/simple.py new file mode 100644 index 0000000000..e72f693459 --- /dev/null +++ b/django/test/simple.py @@ -0,0 +1,67 @@ +import unittest, doctest +from django.conf import settings +from django.core import management +from django.test.utils import create_test_db, destroy_test_db +from django.test.testcases import OutputChecker, DocTestRunner + +# The module name for tests outside models.py +TEST_MODULE = 'tests' + +doctestOutputChecker = OutputChecker() + +def build_suite(app_module): + "Create a complete Django test suite for the provided application module" + suite = unittest.TestSuite() + + # Load unit and doctests in the models.py file + suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(app_module)) + try: + suite.addTest(doctest.DocTestSuite(app_module, + checker=doctestOutputChecker, + runner=DocTestRunner)) + except ValueError: + # No doc tests in models.py + pass + + # Check to see if a separate 'tests' module exists parallel to the + # models module + try: + app_path = app_module.__name__.split('.')[:-1] + test_module = __import__('.'.join(app_path + [TEST_MODULE]), [], [], TEST_MODULE) + + suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_module)) + try: + suite.addTest(doctest.DocTestSuite(test_module, + checker=doctestOutputChecker, + runner=DocTestRunner)) + except ValueError: + # No doc tests in tests.py + pass + except ImportError: + # No tests.py file for application + pass + + return suite + +def run_tests(module_list, verbosity=1, extra_tests=[]): + """ + Run the unit tests for all the modules in the provided list. + This testrunner will search each of the modules in the provided list, + looking for doctests and unittests in models.py or tests.py within + the module. A list of 'extra' tests may also be provided; these tests + will be added to the test suite. + """ + + settings.DEBUG = False + suite = unittest.TestSuite() + + for module in module_list: + suite.addTest(build_suite(module)) + + for test in extra_tests: + suite.addTest(test) + + old_name = create_test_db(verbosity) + management.syncdb(verbosity, interactive=False) + unittest.TextTestRunner(verbosity=verbosity).run(suite) + destroy_test_db(old_name, verbosity) |