diff --git a/django/core/management/commands/test.py b/django/core/management/commands/test.py index 4fd6ba0c8d..46204a7508 100644 --- a/django/core/management/commands/test.py +++ b/django/core/management/commands/test.py @@ -17,7 +17,7 @@ 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) failfast = options.get('failfast', False) @@ -25,10 +25,10 @@ class Command(BaseCommand): # Some custom test runners won't accept the failfast flag, so let's make sure they accept it before passing it to them if 'failfast' in test_runner.func_code.co_varnames: - failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive, + failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive, failfast=failfast) else: failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive) if failures: - sys.exit(failures) + sys.exit(bool(failures)) diff --git a/docs/releases/1.2.txt b/docs/releases/1.2.txt index 252682a3cf..a549bd0cce 100644 --- a/docs/releases/1.2.txt +++ b/docs/releases/1.2.txt @@ -232,6 +232,16 @@ party packages, or that you wrote yourself, you should ensure that the information, see :ref:`template tag thread safety considerations`. +Test runner exit status code +---------------------------- + +The exit status code of the test runners (``tests/runtests.py`` and ``python +manage.py test``) no longer represents the number of failed tests, since a +failure of 256 or more tests resulted in a wrong exit status code. The exit +status code for the test runner is now 0 for success (no failing tests) and 1 +for any number of test failures. If needed, the number of test failures can be +found at the end of the test runner's output. + .. _deprecated-features-1.2: Features deprecated in 1.2 @@ -471,12 +481,12 @@ Models can now use a 64 bit :class:`~django.db.models.BigIntegerField` type. Fast Failure for Tests ---------------------- -The :djadmin:`test` subcommand of ``django-admin.py``, and the ``runtests.py`` +The :djadmin:`test` subcommand of ``django-admin.py``, and the ``runtests.py`` script used to run Django's own test suite, support a new ``--failfast`` option. -When specified, this option causes the test runner to exit after encountering -a failure instead of continuing with the test run. In addition, the handling -of ``Ctrl-C`` during a test run has been improved to trigger a graceful exit -from the test run that reports details of the tests run before the interruption. +When specified, this option causes the test runner to exit after encountering +a failure instead of continuing with the test run. In addition, the handling +of ``Ctrl-C`` during a test run has been improved to trigger a graceful exit +from the test run that reports details of the tests run before the interruption. Improved localization --------------------- diff --git a/tests/runtests.py b/tests/runtests.py index 1cd95b9fef..f2ea5f1271 100755 --- a/tests/runtests.py +++ b/tests/runtests.py @@ -162,7 +162,7 @@ def django_tests(verbosity, interactive, failfast, test_labels): failures = test_runner(test_labels, verbosity=verbosity, interactive=interactive, failfast=failfast, extra_tests=extra_tests) if failures: - sys.exit(failures) + sys.exit(bool(failures)) # Restore the old settings. settings.INSTALLED_APPS = old_installed_apps