Commit 03d4a8d1 authored by Julien Phalip's avatar Julien Phalip
Browse files

Fixed #16990 -- Fixed a couple of small docstring typos in the...

Fixed #16990 -- Fixed a couple of small docstring typos in the `django/test/testcases.py` module and did some minor cleanup while I was in the area.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16928 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 05cf72ba
Loading
Loading
Loading
Loading
+50 −26
Original line number Diff line number Diff line
@@ -19,7 +19,8 @@ from django.forms.fields import CharField
from django.http import QueryDict
from django.test import _doctest as doctest
from django.test.client import Client
from django.test.utils import get_warnings_state, restore_warnings_state, override_settings
from django.test.utils import (get_warnings_state, restore_warnings_state,
    override_settings)
from django.utils import simplejson, unittest as ut2
from django.utils.encoding import smart_str

@@ -27,7 +28,8 @@ __all__ = ('DocTestRunner', 'OutputChecker', 'TestCase', 'TransactionTestCase',
           'SimpleTestCase', 'skipIfDBFeature', 'skipUnlessDBFeature')

normalize_long_ints = lambda s: re.sub(r'(?<![\w])(\d+)L(?![\w])', '\\1', s)
normalize_decimals = lambda s: re.sub(r"Decimal\('(\d+(\.\d*)?)'\)", lambda m: "Decimal(\"%s\")" % m.groups()[0], s)
normalize_decimals = lambda s: re.sub(r"Decimal\('(\d+(\.\d*)?)'\)",
                                lambda m: "Decimal(\"%s\")" % m.groups()[0], s)

def to_list(value):
    """
@@ -65,7 +67,9 @@ def restore_transaction_methods():

class OutputChecker(doctest.OutputChecker):
    def check_output(self, want, got, optionflags):
        "The entry method for doctest output checking. Defers to a sequence of child checkers"
        """
        The entry method for doctest output checking. Defers to a sequence of child checkers
        """
        checks = (self.check_output_default,
                  self.check_output_numeric,
                  self.check_output_xml,
@@ -76,7 +80,10 @@ class OutputChecker(doctest.OutputChecker):
        return False

    def check_output_default(self, want, got, optionflags):
        "The default comparator provided by doctest - not perfect, but good for most purposes"
        """
        The default comparator provided by doctest - not perfect, but good for
        most purposes
        """
        return doctest.OutputChecker.check_output(self, want, got, optionflags)

    def check_output_numeric(self, want, got, optionflags):
@@ -147,17 +154,19 @@ class OutputChecker(doctest.OutputChecker):
        try:
            want_root = parseString(want).firstChild
            got_root = parseString(got).firstChild
        except:
        except Exception:
            return False
        return check_element(want_root, got_root)

    def check_output_json(self, want, got, optionsflags):
        "Tries to compare want and got as if they were JSON-encoded data"
        """
        Tries to compare want and got as if they were JSON-encoded data
        """
        want, got = self._strip_quotes(want, got)
        try:
            want_json = simplejson.loads(want)
            got_json = simplejson.loads(got)
        except:
        except Exception:
            return False
        return want_json == got_json

@@ -248,7 +257,7 @@ class SimpleTestCase(ut2.TestCase):

    def restore_warnings_state(self):
        """
        Restores the sate of the warnings module to the state
        Restores the state of the warnings module to the state
        saved by save_warnings_state()
        """
        restore_warnings_state(self._warnings_state)
@@ -262,7 +271,9 @@ class SimpleTestCase(ut2.TestCase):

    def assertRaisesMessage(self, expected_exception, expected_message,
                           callable_obj=None, *args, **kwargs):
        """Asserts that the message in a raised exception matches the passe value.
        """
        Asserts that the message in a raised exception matches the passed
        value.

        Args:
            expected_exception: Exception class expected to be raised.
@@ -295,7 +306,8 @@ class SimpleTestCase(ut2.TestCase):
        if field_kwargs is None:
            field_kwargs = {}
        required = fieldclass(*field_args, **field_kwargs)
        optional = fieldclass(*field_args, **dict(field_kwargs, required=False))
        optional = fieldclass(*field_args,
                              **dict(field_kwargs, required=False))
        # test valid inputs
        for input, output in valid.items():
            self.assertEqual(required.clean(input), output)
@@ -314,12 +326,14 @@ class SimpleTestCase(ut2.TestCase):
        for e in EMPTY_VALUES:
            with self.assertRaises(ValidationError) as context_manager:
                required.clean(e)
            self.assertEqual(context_manager.exception.messages, error_required)
            self.assertEqual(context_manager.exception.messages,
                             error_required)
            self.assertEqual(optional.clean(e), empty_value)
        # test that max_length and min_length are always accepted
        if issubclass(fieldclass, CharField):
            field_kwargs.update({'min_length':2, 'max_length':20})
            self.assertTrue(isinstance(fieldclass(*field_args, **field_kwargs), fieldclass))
            self.assertTrue(isinstance(fieldclass(*field_args, **field_kwargs),
                                       fieldclass))

class TransactionTestCase(SimpleTestCase):
    # The class we'll use for the test client self.client.
@@ -353,7 +367,8 @@ class TransactionTestCase(SimpleTestCase):
            if hasattr(self, 'fixtures'):
                # We have to use this slightly awkward syntax due to the fact
                # that we're using *args and **kwargs together.
                call_command('loaddata', *self.fixtures, **{'verbosity': 0, 'database': db})
                call_command('loaddata', *self.fixtures,
                             **{'verbosity': 0, 'database': db})

    def _urlconf_setup(self):
        if hasattr(self, 'urls'):
@@ -466,7 +481,8 @@ class TransactionTestCase(SimpleTestCase):
                " response code was %d (expected %d)" %
                    (path, redirect_response.status_code, target_status_code))

        e_scheme, e_netloc, e_path, e_query, e_fragment = urlsplit(expected_url)
        e_scheme, e_netloc, e_path, e_query, e_fragment = urlsplit(
                                                              expected_url)
        if not (e_scheme or e_netloc):
            expected_url = urlunsplit(('http', host or 'testserver', e_path,
                e_query, e_fragment))
@@ -617,14 +633,16 @@ def connections_support_transactions():
    """
    Returns True if all connections support transactions.
    """
    return all(conn.features.supports_transactions for conn in connections.all())
    return all(conn.features.supports_transactions
               for conn in connections.all())

class TestCase(TransactionTestCase):
    """
    Does basically the same as TransactionTestCase, but surrounds every test
    with a transaction, monkey-patches the real transaction management routines to
    do nothing, and rollsback the test transaction at the end of the test. You have
    to use TransactionTestCase, if you need transaction management inside a test.
    with a transaction, monkey-patches the real transaction management routines
    to do nothing, and rollsback the test transaction at the end of the test.
    You have to use TransactionTestCase, if you need transaction management
    inside a test.
    """

    def _fixture_setup(self):
@@ -648,7 +666,8 @@ class TestCase(TransactionTestCase):

        for db in databases:
            if hasattr(self, 'fixtures'):
                call_command('loaddata', *self.fixtures, **{
                call_command('loaddata', *self.fixtures,
                             **{
                                'verbosity': 0,
                                'commit': False,
                                'database': db
@@ -672,7 +691,8 @@ class TestCase(TransactionTestCase):

def _deferredSkip(condition, reason):
    def decorator(test_func):
        if not (isinstance(test_func, type) and issubclass(test_func, TestCase)):
        if not (isinstance(test_func, type) and
                issubclass(test_func, TestCase)):
            @wraps(test_func)
            def skip_wrapper(*args, **kwargs):
                if condition():
@@ -686,11 +706,15 @@ def _deferredSkip(condition, reason):
    return decorator

def skipIfDBFeature(feature):
    "Skip a test if a database has the named feature"
    """
    Skip a test if a database has the named feature
    """
    return _deferredSkip(lambda: getattr(connection.features, feature),
                         "Database has feature %s" % feature)

def skipUnlessDBFeature(feature):
    "Skip a test unless a database has the named feature"
    """
    Skip a test unless a database has the named feature
    """
    return _deferredSkip(lambda: not getattr(connection.features, feature),
                         "Database doesn't support feature %s" % feature)