web/lib/django/core/management/commands/test.py
author ymh <ymh.work@gmail.com>
Fri, 04 Mar 2011 16:45:48 +0100
changeset 57 1984c3b5f299
parent 38 77b6da96e6f1
permissions -rw-r--r--
Create new version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
from django.core.management.base import BaseCommand
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from optparse import make_option
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
import sys
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
class Command(BaseCommand):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
    option_list = BaseCommand.option_list + (
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
        make_option('--noinput', action='store_false', dest='interactive', default=True,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
            help='Tells Django to NOT prompt the user for input of any kind.'),
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
        make_option('--failfast', action='store_true', dest='failfast', default=False,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
            help='Tells Django to stop running the test suite after first failed test.')
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
    )
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
    help = 'Runs the test suite for the specified applications, or the entire site if no apps are specified.'
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
    args = '[appname ...]'
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    requires_model_validation = False
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
    def handle(self, *test_labels, **options):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
        from django.conf import settings
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
        from django.test.utils import get_runner
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        verbosity = int(options.get('verbosity', 1))
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
        interactive = options.get('interactive', True)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
        failfast = options.get('failfast', False)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        TestRunner = get_runner(settings)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        if hasattr(TestRunner, 'func_name'):
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
            # Pre 1.2 test runners were just functions,
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
            # and did not support the 'failfast' option.
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
            import warnings
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
            warnings.warn(
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
                'Function-based test runners are deprecated. Test runners should be classes with a run_tests() method.',
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
                PendingDeprecationWarning
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
            )
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
            failures = TestRunner(test_labels, verbosity=verbosity, interactive=interactive)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        else:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
            test_runner = TestRunner(verbosity=verbosity, interactive=interactive, failfast=failfast)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
            failures = test_runner.run_tests(test_labels)
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        if failures:
77b6da96e6f1 update django
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
            sys.exit(bool(failures))