From beb20057a30a96b74dfc309c2add47148103ba63 Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Sat, 28 Feb 2009 04:46:38 +0000 Subject: [PATCH] Fixed #10165 -- Use settings.TEST_RUNNER in runtests.py This permits running Django's core tests under an alternative test runner. Most likely useful to non-CPython implementations, rather than much else (since Django's core tests might assume things about the test runner). Patch from Leo Soto. git-svn-id: http://code.djangoproject.com/svn/django/trunk@9918 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/management/commands/test.py | 11 ++--------- django/test/utils.py | 11 +++++++++++ tests/runtests.py | 8 ++++++-- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/django/core/management/commands/test.py b/django/core/management/commands/test.py index 3a19a4fcf8..8ebf3daea6 100644 --- a/django/core/management/commands/test.py +++ b/django/core/management/commands/test.py @@ -14,18 +14,11 @@ class Command(BaseCommand): def handle(self, *test_labels, **options): from django.conf import settings + from django.test.utils import get_runner verbosity = int(options.get('verbosity', 1)) interactive = options.get('interactive', True) - - test_path = settings.TEST_RUNNER.split('.') - # Allow for Python 2.5 relative paths - if len(test_path) > 1: - test_module_name = '.'.join(test_path[:-1]) - else: - test_module_name = '.' - test_module = __import__(test_module_name, {}, {}, test_path[-1]) - test_runner = getattr(test_module, test_path[-1]) + test_runner = get_runner(settings) failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive) if failures: diff --git a/django/test/utils.py b/django/test/utils.py index 69bd25bc12..29babec3ff 100644 --- a/django/test/utils.py +++ b/django/test/utils.py @@ -65,3 +65,14 @@ def teardown_test_environment(): del mail.outbox + +def get_runner(settings): + test_path = settings.TEST_RUNNER.split('.') + # Allow for Python 2.5 relative paths + if len(test_path) > 1: + test_module_name = '.'.join(test_path[:-1]) + else: + test_module_name = '.' + test_module = __import__(test_module_name, {}, {}, test_path[-1]) + test_runner = getattr(test_module, test_path[-1]) + return test_runner diff --git a/tests/runtests.py b/tests/runtests.py index cc9594b5fe..bd7f59bdf0 100755 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -149,8 +149,12 @@ def django_tests(verbosity, interactive, test_labels): pass # Run the test suite, including the extra validation tests. - from django.test.simple import run_tests - failures = run_tests(test_labels, verbosity=verbosity, interactive=interactive, extra_tests=extra_tests) + from django.test.utils import get_runner + if not hasattr(settings, 'TEST_RUNNER'): + settings.TEST_RUNNER = 'django.test.simple.run_tests' + test_runner = get_runner(settings) + + failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive, extra_tests=extra_tests) if failures: sys.exit(failures)