Top

telemeta.tests.test_utils module

# -*- coding: utf-8 -*-
# Copyright (C) 2007-2010 Samalyse SARL

# This file is part of Telemeta.

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.

# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# Authors: Olivier Guilyardi <olivier@samalyse.com>

from django.test import TestCase
from telemeta.util.unaccent import unaccent_icmp

class UnaccentTestCase(TestCase):
    def testSorting(self):
        strings = [u'Métro', u'évasion', u'àccent', u'È', u'île', u'arrivée', u'elle']
        strings.sort(unaccent_icmp)
        expected = [u'àccent', u'arrivée', u'È', u'elle', u'évasion', u'île', u'Métro']
        self.assertEquals(strings, expected)

Classes

class UnaccentTestCase

class UnaccentTestCase(TestCase):
    def testSorting(self):
        strings = [u'Métro', u'évasion', u'àccent', u'È', u'île', u'arrivée', u'elle']
        strings.sort(unaccent_icmp)
        expected = [u'àccent', u'arrivée', u'È', u'elle', u'évasion', u'île', u'Métro']
        self.assertEquals(strings, expected)

Ancestors (in MRO)

  • UnaccentTestCase
  • django.test.testcases.TestCase
  • django.test.testcases.TransactionTestCase
  • django.test.testcases.SimpleTestCase
  • unittest.case.TestCase
  • __builtin__.object

Class variables

var available_apps

var client_class

var failureException

var longMessage

var maxDiff

var reset_sequences

Methods

def __init__(

self, methodName='runTest')

Create an instance of the class that will use the named test method when executed. Raises a ValueError if the instance does not have a method with the specified name.

def __init__(self, methodName='runTest'):
    """Create an instance of the class that will use the named test
       method when executed. Raises a ValueError if the instance does
       not have a method with the specified name.
    """
    self._testMethodName = methodName
    self._resultForDoCleanups = None
    try:
        testMethod = getattr(self, methodName)
    except AttributeError:
        raise ValueError("no such test method in %s: %s" %
              (self.__class__, methodName))
    self._testMethodDoc = testMethod.__doc__
    self._cleanups = []
    # Map types to custom assertEqual functions that will compare
    # instances of said type in more detail to generate a more useful
    # error message.
    self._type_equality_funcs = {}
    self.addTypeEqualityFunc(dict, 'assertDictEqual')
    self.addTypeEqualityFunc(list, 'assertListEqual')
    self.addTypeEqualityFunc(tuple, 'assertTupleEqual')
    self.addTypeEqualityFunc(set, 'assertSetEqual')
    self.addTypeEqualityFunc(frozenset, 'assertSetEqual')
    try:
        self.addTypeEqualityFunc(unicode, 'assertMultiLineEqual')
    except NameError:
        # No unicode support in this build
        pass

def addCleanup(

self, function, *args, **kwargs)

Add a function, with arguments, to be called when the test is completed. Functions added are called on a LIFO basis and are called after tearDown on test failure or success.

Cleanup items are called even if setUp fails (unlike tearDown).

def addCleanup(self, function, *args, **kwargs):
    """Add a function, with arguments, to be called when the test is
    completed. Functions added are called on a LIFO basis and are
    called after tearDown on test failure or success.
    Cleanup items are called even if setUp fails (unlike tearDown)."""
    self._cleanups.append((function, args, kwargs))

def addTypeEqualityFunc(

self, typeobj, function)

Add a type specific assertEqual style function to compare a type.

This method is for use by TestCase subclasses that need to register their own type equality functions to provide nicer error messages.

Args: typeobj: The data type to call this function on when both values are of the same type in assertEqual(). function: The callable taking two arguments and an optional msg= argument that raises self.failureException with a useful error message when the two arguments are not equal.

def addTypeEqualityFunc(self, typeobj, function):
    """Add a type specific assertEqual style function to compare a type.
    This method is for use by TestCase subclasses that need to register
    their own type equality functions to provide nicer error messages.
    Args:
        typeobj: The data type to call this function on when both values
                are of the same type in assertEqual().
        function: The callable taking two arguments and an optional
                msg= argument that raises self.failureException with a
                useful error message when the two arguments are not equal.
    """
    self._type_equality_funcs[typeobj] = function

def assertAlmostEqual(

self, first, second, places=None, msg=None, delta=None)

Fail if the two objects are unequal as determined by their difference rounded to the given number of decimal places (default 7) and comparing to zero, or by comparing that the between the two objects is more than the given delta.

Note that decimal places (from zero) are usually not the same as significant digits (measured from the most significant digit).

If the two objects compare equal then they will automatically compare almost equal.

def assertAlmostEqual(self, first, second, places=None, msg=None, delta=None):
    """Fail if the two objects are unequal as determined by their
       difference rounded to the given number of decimal places
       (default 7) and comparing to zero, or by comparing that the
       between the two objects is more than the given delta.
       Note that decimal places (from zero) are usually not the same
       as significant digits (measured from the most significant digit).
       If the two objects compare equal then they will automatically
       compare almost equal.
    """
    if first == second:
        # shortcut
        return
    if delta is not None and places is not None:
        raise TypeError("specify delta or places not both")
    if delta is not None:
        if abs(first - second) <= delta:
            return
        standardMsg = '%s != %s within %s delta' % (safe_repr(first),
                                                    safe_repr(second),
                                                    safe_repr(delta))
    else:
        if places is None:
            places = 7
        if round(abs(second-first), places) == 0:
            return
        standardMsg = '%s != %s within %r places' % (safe_repr(first),
                                                      safe_repr(second),
                                                      places)
    msg = self._formatMessage(msg, standardMsg)
    raise self.failureException(msg)

def assertAlmostEquals(

self, first, second, places=None, msg=None, delta=None)

Fail if the two objects are unequal as determined by their difference rounded to the given number of decimal places (default 7) and comparing to zero, or by comparing that the between the two objects is more than the given delta.

Note that decimal places (from zero) are usually not the same as significant digits (measured from the most significant digit).

If the two objects compare equal then they will automatically compare almost equal.

def assertAlmostEqual(self, first, second, places=None, msg=None, delta=None):
    """Fail if the two objects are unequal as determined by their
       difference rounded to the given number of decimal places
       (default 7) and comparing to zero, or by comparing that the
       between the two objects is more than the given delta.
       Note that decimal places (from zero) are usually not the same
       as significant digits (measured from the most significant digit).
       If the two objects compare equal then they will automatically
       compare almost equal.
    """
    if first == second:
        # shortcut
        return
    if delta is not None and places is not None:
        raise TypeError("specify delta or places not both")
    if delta is not None:
        if abs(first - second) <= delta:
            return
        standardMsg = '%s != %s within %s delta' % (safe_repr(first),
                                                    safe_repr(second),
                                                    safe_repr(delta))
    else:
        if places is None:
            places = 7
        if round(abs(second-first), places) == 0:
            return
        standardMsg = '%s != %s within %r places' % (safe_repr(first),
                                                      safe_repr(second),
                                                      places)
    msg = self._formatMessage(msg, standardMsg)
    raise self.failureException(msg)

def assertContains(

self, response, text, count=None, status_code=200, msg_prefix=u'', html=False)

Asserts that a response indicates that some content was retrieved successfully, (i.e., the HTTP status code was as expected), and that text occurs count times in the content of the response. If count is None, the count doesn't matter - the assertion is true if the text occurs at least once in the response.

def assertContains(self, response, text, count=None, status_code=200,
                   msg_prefix='', html=False):
    """
    Asserts that a response indicates that some content was retrieved
    successfully, (i.e., the HTTP status code was as expected), and that
    ``text`` occurs ``count`` times in the content of the response.
    If ``count`` is None, the count doesn't matter - the assertion is true
    if the text occurs at least once in the response.
    """
    # If the response supports deferred rendering and hasn't been rendered
    # yet, then ensure that it does get rendered before proceeding further.
    if (hasattr(response, 'render') and callable(response.render)
        and not response.is_rendered):
        response.render()
    if msg_prefix:
        msg_prefix += ": "
    self.assertEqual(response.status_code, status_code,
        msg_prefix + "Couldn't retrieve content: Response code was %d"
        " (expected %d)" % (response.status_code, status_code))
    if response.streaming:
        content = b''.join(response.streaming_content)
    else:
        content = response.content
    if not isinstance(text, bytes) or html:
        text = force_text(text, encoding=response._charset)
        content = content.decode(response._charset)
        text_repr = "'%s'" % text
    else:
        text_repr = repr(text)
    if html:
        content = assert_and_parse_html(self, content, None,
            "Response's content is not valid HTML:")
        text = assert_and_parse_html(self, text, None,
            "Second argument is not valid HTML:")
    real_count = content.count(text)
    if count is not None:
        self.assertEqual(real_count, count,
            msg_prefix + "Found %d instances of %s in response"
            " (expected %d)" % (real_count, text_repr, count))
    else:
        self.assertTrue(real_count != 0,
            msg_prefix + "Couldn't find %s in response" % text_repr)

def assertDictContainsSubset(

self, expected, actual, msg=None)

Checks whether actual is a superset of expected.

def assertDictContainsSubset(self, expected, actual, msg=None):
    """Checks whether actual is a superset of expected."""
    missing = []
    mismatched = []
    for key, value in expected.iteritems():
        if key not in actual:
            missing.append(key)
        elif value != actual[key]:
            mismatched.append('%s, expected: %s, actual: %s' %
                              (safe_repr(key), safe_repr(value),
                               safe_repr(actual[key])))
    if not (missing or mismatched):
        return
    standardMsg = ''
    if missing:
        standardMsg = 'Missing: %s' % ','.join(safe_repr(m) for m in
                                                missing)
    if mismatched:
        if standardMsg:
            standardMsg += '; '
        standardMsg += 'Mismatched values: %s' % ','.join(mismatched)
    self.fail(self._formatMessage(msg, standardMsg))

def assertDictEqual(

self, d1, d2, msg=None)

def assertDictEqual(self, d1, d2, msg=None):
    self.assertIsInstance(d1, dict, 'First argument is not a dictionary')
    self.assertIsInstance(d2, dict, 'Second argument is not a dictionary')
    if d1 != d2:
        standardMsg = '%s != %s' % (safe_repr(d1, True), safe_repr(d2, True))
        diff = ('\n' + '\n'.join(difflib.ndiff(
                       pprint.pformat(d1).splitlines(),
                       pprint.pformat(d2).splitlines())))
        standardMsg = self._truncateMessage(standardMsg, diff)
        self.fail(self._formatMessage(msg, standardMsg))

def assertEqual(

self, first, second, msg=None)

Fail if the two objects are unequal as determined by the '==' operator.

def assertEqual(self, first, second, msg=None):
    """Fail if the two objects are unequal as determined by the '=='
       operator.
    """
    assertion_func = self._getAssertEqualityFunc(first, second)
    assertion_func(first, second, msg=msg)

def assertEquals(

self, first, second, msg=None)

Fail if the two objects are unequal as determined by the '==' operator.

def assertEqual(self, first, second, msg=None):
    """Fail if the two objects are unequal as determined by the '=='
       operator.
    """
    assertion_func = self._getAssertEqualityFunc(first, second)
    assertion_func(first, second, msg=msg)

def assertFalse(

self, expr, msg=None)

Check that the expression is false.

def assertFalse(self, expr, msg=None):
    """Check that the expression is false."""
    if expr:
        msg = self._formatMessage(msg, "%s is not false" % safe_repr(expr))
        raise self.failureException(msg)

def assertFieldOutput(

self, fieldclass, valid, invalid, field_args=None, field_kwargs=None, empty_value=u'')

Asserts that a form field behaves correctly with various inputs.

Args: fieldclass: the class of the field to be tested. valid: a dictionary mapping valid inputs to their expected cleaned values. invalid: a dictionary mapping invalid inputs to one or more raised error messages. field_args: the args passed to instantiate the field field_kwargs: the kwargs passed to instantiate the field empty_value: the expected clean output for inputs in empty_values

def assertFieldOutput(self, fieldclass, valid, invalid, field_args=None,
        field_kwargs=None, empty_value=''):
    """
    Asserts that a form field behaves correctly with various inputs.
    Args:
        fieldclass: the class of the field to be tested.
        valid: a dictionary mapping valid inputs to their expected
                cleaned values.
        invalid: a dictionary mapping invalid inputs to one or more
                raised error messages.
        field_args: the args passed to instantiate the field
        field_kwargs: the kwargs passed to instantiate the field
        empty_value: the expected clean output for inputs in empty_values
    """
    if field_args is None:
        field_args = []
    if field_kwargs is None:
        field_kwargs = {}
    required = fieldclass(*field_args, **field_kwargs)
    optional = fieldclass(*field_args,
                          **dict(field_kwargs, required=False))
    # test valid inputs
    for input, output in valid.items():
        self.assertEqual(required.clean(input), output)
        self.assertEqual(optional.clean(input), output)
    # test invalid inputs
    for input, errors in invalid.items():
        with self.assertRaises(ValidationError) as context_manager:
            required.clean(input)
        self.assertEqual(context_manager.exception.messages, errors)
        with self.assertRaises(ValidationError) as context_manager:
            optional.clean(input)
        self.assertEqual(context_manager.exception.messages, errors)
    # test required inputs
    error_required = [force_text(required.error_messages['required'])]
    for e in required.empty_values:
        with self.assertRaises(ValidationError) as context_manager:
            required.clean(e)
        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))

def assertFormError(

self, response, form, field, errors, msg_prefix=u'')

Asserts that a form used to render the response has a specific field error.

def assertFormError(self, response, form, field, errors, msg_prefix=''):
    """
    Asserts that a form used to render the response has a specific field
    error.
    """
    if msg_prefix:
        msg_prefix += ": "
    # Put context(s) into a list to simplify processing.
    contexts = to_list(response.context)
    if not contexts:
        self.fail(msg_prefix + "Response did not use any contexts to "
                  "render the response")
    # Put error(s) into a list to simplify processing.
    errors = to_list(errors)
    # Search all contexts for the error.
    found_form = False
    for i,context in enumerate(contexts):
        if form not in context:
            continue
        found_form = True
        for err in errors:
            if field:
                if field in context[form].errors:
                    field_errors = context[form].errors[field]
                    self.assertTrue(err in field_errors,
                        msg_prefix + "The field '%s' on form '%s' in"
                        " context %d does not contain the error '%s'"
                        " (actual errors: %s)" %
                            (field, form, i, err, repr(field_errors)))
                elif field in context[form].fields:
                    self.fail(msg_prefix + "The field '%s' on form '%s'"
                              " in context %d contains no errors" %
                                  (field, form, i))
                else:
                    self.fail(msg_prefix + "The form '%s' in context %d"
                              " does not contain the field '%s'" %
                                  (form, i, field))
            else:
                non_field_errors = context[form].non_field_errors()
                self.assertTrue(err in non_field_errors,
                    msg_prefix + "The form '%s' in context %d does not"
                    " contain the non-field error '%s'"
                    " (actual errors: %s)" %
                        (form, i, err, non_field_errors))
    if not found_form:
        self.fail(msg_prefix + "The form '%s' was not used to render the"
                  " response" % form)

def assertFormsetError(

self, response, formset, form_index, field, errors, msg_prefix=u'')

Asserts that a formset used to render the response has a specific error.

For field errors, specify the form_index and the field. For non-field errors, specify the form_index and the field as None. For non-form errors, specify form_index as None and the field as None.

def assertFormsetError(self, response, formset, form_index, field, errors,
                       msg_prefix=''):
    """
    Asserts that a formset used to render the response has a specific error.
    For field errors, specify the ``form_index`` and the ``field``.
    For non-field errors, specify the ``form_index`` and the ``field`` as
    None.
    For non-form errors, specify ``form_index`` as None and the ``field``
    as None.
    """
    # Add punctuation to msg_prefix
    if msg_prefix:
        msg_prefix += ": "
    # Put context(s) into a list to simplify processing.
    contexts = to_list(response.context)
    if not contexts:
        self.fail(msg_prefix + 'Response did not use any contexts to '
                  'render the response')
    # Put error(s) into a list to simplify processing.
    errors = to_list(errors)
    # Search all contexts for the error.
    found_formset = False
    for i, context in enumerate(contexts):
        if formset not in context:
            continue
        found_formset = True
        for err in errors:
            if field is not None:
                if field in context[formset].forms[form_index].errors:
                    field_errors = context[formset].forms[form_index].errors[field]
                    self.assertTrue(err in field_errors,
                            msg_prefix + "The field '%s' on formset '%s', "
                            "form %d in context %d does not contain the "
                            "error '%s' (actual errors: %s)" %
                                    (field, formset, form_index, i, err,
                                    repr(field_errors)))
                elif field in context[formset].forms[form_index].fields:
                    self.fail(msg_prefix + "The field '%s' "
                              "on formset '%s', form %d in "
                              "context %d contains no errors" %
                                    (field, formset, form_index, i))
                else:
                    self.fail(msg_prefix + "The formset '%s', form %d in "
                             "context %d does not contain the field '%s'" %
                                    (formset, form_index, i, field))
            elif form_index is not None:
                non_field_errors = context[formset].forms[form_index].non_field_errors()
                self.assertFalse(len(non_field_errors) == 0,
                            msg_prefix + "The formset '%s', form %d in "
                            "context %d does not contain any non-field "
                            "errors." % (formset, form_index, i))
                self.assertTrue(err in non_field_errors,
                                msg_prefix + "The formset '%s', form %d "
                                "in context %d does not contain the "
                                "non-field error '%s' "
                                "(actual errors: %s)" %
                                    (formset, form_index, i, err,
                                     repr(non_field_errors)))
            else:
                non_form_errors = context[formset].non_form_errors()
                self.assertFalse(len(non_form_errors) == 0,
                                 msg_prefix + "The formset '%s' in "
                                 "context %d does not contain any "
                                 "non-form errors." % (formset, i))
                self.assertTrue(err in non_form_errors,
                                msg_prefix + "The formset '%s' in context "
                                "%d does not contain the "
                                "non-form error '%s' (actual errors: %s)" %
                                  (formset, i, err, repr(non_form_errors)))
    if not found_formset:
        self.fail(msg_prefix + "The formset '%s' was not used to render "
                  "the response" % formset)

def assertGreater(

self, a, b, msg=None)

Just like self.assertTrue(a > b), but with a nicer default message.

def assertGreater(self, a, b, msg=None):
    """Just like self.assertTrue(a > b), but with a nicer default message."""
    if not a > b:
        standardMsg = '%s not greater than %s' % (safe_repr(a), safe_repr(b))
        self.fail(self._formatMessage(msg, standardMsg))

def assertGreaterEqual(

self, a, b, msg=None)

Just like self.assertTrue(a >= b), but with a nicer default message.

def assertGreaterEqual(self, a, b, msg=None):
    """Just like self.assertTrue(a >= b), but with a nicer default message."""
    if not a >= b:
        standardMsg = '%s not greater than or equal to %s' % (safe_repr(a), safe_repr(b))
        self.fail(self._formatMessage(msg, standardMsg))

def assertHTMLEqual(

self, html1, html2, msg=None)

Asserts that two HTML snippets are semantically the same. Whitespace in most cases is ignored, and attribute ordering is not significant. The passed-in arguments must be valid HTML.

def assertHTMLEqual(self, html1, html2, msg=None):
    """
    Asserts that two HTML snippets are semantically the same.
    Whitespace in most cases is ignored, and attribute ordering is not
    significant. The passed-in arguments must be valid HTML.
    """
    dom1 = assert_and_parse_html(self, html1, msg,
        'First argument is not valid HTML:')
    dom2 = assert_and_parse_html(self, html2, msg,
        'Second argument is not valid HTML:')
    if dom1 != dom2:
        standardMsg = '%s != %s' % (
            safe_repr(dom1, True), safe_repr(dom2, True))
        diff = ('\n' + '\n'.join(difflib.ndiff(
                       six.text_type(dom1).splitlines(),
                       six.text_type(dom2).splitlines())))
        standardMsg = self._truncateMessage(standardMsg, diff)
        self.fail(self._formatMessage(msg, standardMsg))

def assertHTMLNotEqual(

self, html1, html2, msg=None)

Asserts that two HTML snippets are not semantically equivalent.

def assertHTMLNotEqual(self, html1, html2, msg=None):
    """Asserts that two HTML snippets are not semantically equivalent."""
    dom1 = assert_and_parse_html(self, html1, msg,
        'First argument is not valid HTML:')
    dom2 = assert_and_parse_html(self, html2, msg,
        'Second argument is not valid HTML:')
    if dom1 == dom2:
        standardMsg = '%s == %s' % (
            safe_repr(dom1, True), safe_repr(dom2, True))
        self.fail(self._formatMessage(msg, standardMsg))

def assertIn(

self, member, container, msg=None)

Just like self.assertTrue(a in b), but with a nicer default message.

def assertIn(self, member, container, msg=None):
    """Just like self.assertTrue(a in b), but with a nicer default message."""
    if member not in container:
        standardMsg = '%s not found in %s' % (safe_repr(member),
                                              safe_repr(container))
        self.fail(self._formatMessage(msg, standardMsg))

def assertInHTML(

self, needle, haystack, count=None, msg_prefix=u'')

def assertInHTML(self, needle, haystack, count=None, msg_prefix=''):
    needle = assert_and_parse_html(self, needle, None,
        'First argument is not valid HTML:')
    haystack = assert_and_parse_html(self, haystack, None,
        'Second argument is not valid HTML:')
    real_count = haystack.count(needle)
    if count is not None:
        self.assertEqual(real_count, count,
            msg_prefix + "Found %d instances of '%s' in response"
            " (expected %d)" % (real_count, needle, count))
    else:
        self.assertTrue(real_count != 0,
            msg_prefix + "Couldn't find '%s' in response" % needle)

def assertIs(

self, expr1, expr2, msg=None)

Just like self.assertTrue(a is b), but with a nicer default message.

def assertIs(self, expr1, expr2, msg=None):
    """Just like self.assertTrue(a is b), but with a nicer default message."""
    if expr1 is not expr2:
        standardMsg = '%s is not %s' % (safe_repr(expr1),
                                         safe_repr(expr2))
        self.fail(self._formatMessage(msg, standardMsg))

def assertIsInstance(

self, obj, cls, msg=None)

Same as self.assertTrue(isinstance(obj, cls)), with a nicer default message.

def assertIsInstance(self, obj, cls, msg=None):
    """Same as self.assertTrue(isinstance(obj, cls)), with a nicer
    default message."""
    if not isinstance(obj, cls):
        standardMsg = '%s is not an instance of %r' % (safe_repr(obj), cls)
        self.fail(self._formatMessage(msg, standardMsg))

def assertIsNone(

self, obj, msg=None)

Same as self.assertTrue(obj is None), with a nicer default message.

def assertIsNone(self, obj, msg=None):
    """Same as self.assertTrue(obj is None), with a nicer default message."""
    if obj is not None:
        standardMsg = '%s is not None' % (safe_repr(obj),)
        self.fail(self._formatMessage(msg, standardMsg))

def assertIsNot(

self, expr1, expr2, msg=None)

Just like self.assertTrue(a is not b), but with a nicer default message.

def assertIsNot(self, expr1, expr2, msg=None):
    """Just like self.assertTrue(a is not b), but with a nicer default message."""
    if expr1 is expr2:
        standardMsg = 'unexpectedly identical: %s' % (safe_repr(expr1),)
        self.fail(self._formatMessage(msg, standardMsg))

def assertIsNotNone(

self, obj, msg=None)

Included for symmetry with assertIsNone.

def assertIsNotNone(self, obj, msg=None):
    """Included for symmetry with assertIsNone."""
    if obj is None:
        standardMsg = 'unexpectedly None'
        self.fail(self._formatMessage(msg, standardMsg))

def assertItemsEqual(

self, expected_seq, actual_seq, msg=None)

An unordered sequence specific comparison. It asserts that actual_seq and expected_seq have the same element counts. Equivalent to::

self.assertEqual(Counter(iter(actual_seq)),
                 Counter(iter(expected_seq)))

Asserts that each element has the same count in both sequences. Example: - [0, 1, 1] and [1, 0, 1] compare equal. - [0, 0, 1] and [0, 1] compare unequal.

def assertItemsEqual(self, expected_seq, actual_seq, msg=None):
    """An unordered sequence specific comparison. It asserts that
    actual_seq and expected_seq have the same element counts.
    Equivalent to::
        self.assertEqual(Counter(iter(actual_seq)),
                         Counter(iter(expected_seq)))
    Asserts that each element has the same count in both sequences.
    Example:
        - [0, 1, 1] and [1, 0, 1] compare equal.
        - [0, 0, 1] and [0, 1] compare unequal.
    """
    first_seq, second_seq = list(expected_seq), list(actual_seq)
    with warnings.catch_warnings():
        if sys.py3kwarning:
            # Silence Py3k warning raised during the sorting
            for _msg in ["(code|dict|type) inequality comparisons",
                         "builtin_function_or_method order comparisons",
                         "comparing unequal types"]:
                warnings.filterwarnings("ignore", _msg, DeprecationWarning)
        try:
            first = collections.Counter(first_seq)
            second = collections.Counter(second_seq)
        except TypeError:
            # Handle case with unhashable elements
            differences = _count_diff_all_purpose(first_seq, second_seq)
        else:
            if first == second:
                return
            differences = _count_diff_hashable(first_seq, second_seq)
    if differences:
        standardMsg = 'Element counts were not equal:\n'
        lines = ['First has %d, Second has %d:  %r' % diff for diff in differences]
        diffMsg = '\n'.join(lines)
        standardMsg = self._truncateMessage(standardMsg, diffMsg)
        msg = self._formatMessage(msg, standardMsg)
        self.fail(msg)

def assertJSONEqual(

self, raw, expected_data, msg=None)

def assertJSONEqual(self, raw, expected_data, msg=None):
    try:
        data = json.loads(raw)
    except ValueError:
        self.fail("First argument is not valid JSON: %r" % raw)
    if isinstance(expected_data, six.string_types):
        try:
            expected_data = json.loads(expected_data)
        except ValueError:
            self.fail("Second argument is not valid JSON: %r" % expected_data)
    self.assertEqual(data, expected_data, msg=msg)

def assertLess(

self, a, b, msg=None)

Just like self.assertTrue(a < b), but with a nicer default message.

def assertLess(self, a, b, msg=None):
    """Just like self.assertTrue(a < b), but with a nicer default message."""
    if not a < b:
        standardMsg = '%s not less than %s' % (safe_repr(a), safe_repr(b))
        self.fail(self._formatMessage(msg, standardMsg))

def assertLessEqual(

self, a, b, msg=None)

Just like self.assertTrue(a <= b), but with a nicer default message.

def assertLessEqual(self, a, b, msg=None):
    """Just like self.assertTrue(a <= b), but with a nicer default message."""
    if not a <= b:
        standardMsg = '%s not less than or equal to %s' % (safe_repr(a), safe_repr(b))
        self.fail(self._formatMessage(msg, standardMsg))

def assertListEqual(

self, list1, list2, msg=None)

A list-specific equality assertion.

Args: list1: The first list to compare. list2: The second list to compare. msg: Optional message to use on failure instead of a list of differences.

def assertListEqual(self, list1, list2, msg=None):
    """A list-specific equality assertion.
    Args:
        list1: The first list to compare.
        list2: The second list to compare.
        msg: Optional message to use on failure instead of a list of
                differences.
    """
    self.assertSequenceEqual(list1, list2, msg, seq_type=list)

def assertMultiLineEqual(

self, first, second, msg=None)

Assert that two multi-line strings are equal.

def assertMultiLineEqual(self, first, second, msg=None):
    """Assert that two multi-line strings are equal."""
    self.assertIsInstance(first, basestring,
            'First argument is not a string')
    self.assertIsInstance(second, basestring,
            'Second argument is not a string')
    if first != second:
        # don't use difflib if the strings are too long
        if (len(first) > self._diffThreshold or
            len(second) > self._diffThreshold):
            self._baseAssertEqual(first, second, msg)
        firstlines = first.splitlines(True)
        secondlines = second.splitlines(True)
        if len(firstlines) == 1 and first.strip('\r\n') == first:
            firstlines = [first + '\n']
            secondlines = [second + '\n']
        standardMsg = '%s != %s' % (safe_repr(first, True),
                                    safe_repr(second, True))
        diff = '\n' + ''.join(difflib.ndiff(firstlines, secondlines))
        standardMsg = self._truncateMessage(standardMsg, diff)
        self.fail(self._formatMessage(msg, standardMsg))

def assertNotAlmostEqual(

self, first, second, places=None, msg=None, delta=None)

Fail if the two objects are equal as determined by their difference rounded to the given number of decimal places (default 7) and comparing to zero, or by comparing that the between the two objects is less than the given delta.

Note that decimal places (from zero) are usually not the same as significant digits (measured from the most significant digit).

Objects that are equal automatically fail.

def assertNotAlmostEqual(self, first, second, places=None, msg=None, delta=None):
    """Fail if the two objects are equal as determined by their
       difference rounded to the given number of decimal places
       (default 7) and comparing to zero, or by comparing that the
       between the two objects is less than the given delta.
       Note that decimal places (from zero) are usually not the same
       as significant digits (measured from the most significant digit).
       Objects that are equal automatically fail.
    """
    if delta is not None and places is not None:
        raise TypeError("specify delta or places not both")
    if delta is not None:
        if not (first == second) and abs(first - second) > delta:
            return
        standardMsg = '%s == %s within %s delta' % (safe_repr(first),
                                                    safe_repr(second),
                                                    safe_repr(delta))
    else:
        if places is None:
            places = 7
        if not (first == second) and round(abs(second-first), places) != 0:
            return
        standardMsg = '%s == %s within %r places' % (safe_repr(first),
                                                     safe_repr(second),
                                                     places)
    msg = self._formatMessage(msg, standardMsg)
    raise self.failureException(msg)

def assertNotAlmostEquals(

self, first, second, places=None, msg=None, delta=None)

Fail if the two objects are equal as determined by their difference rounded to the given number of decimal places (default 7) and comparing to zero, or by comparing that the between the two objects is less than the given delta.

Note that decimal places (from zero) are usually not the same as significant digits (measured from the most significant digit).

Objects that are equal automatically fail.

def assertNotAlmostEqual(self, first, second, places=None, msg=None, delta=None):
    """Fail if the two objects are equal as determined by their
       difference rounded to the given number of decimal places
       (default 7) and comparing to zero, or by comparing that the
       between the two objects is less than the given delta.
       Note that decimal places (from zero) are usually not the same
       as significant digits (measured from the most significant digit).
       Objects that are equal automatically fail.
    """
    if delta is not None and places is not None:
        raise TypeError("specify delta or places not both")
    if delta is not None:
        if not (first == second) and abs(first - second) > delta:
            return
        standardMsg = '%s == %s within %s delta' % (safe_repr(first),
                                                    safe_repr(second),
                                                    safe_repr(delta))
    else:
        if places is None:
            places = 7
        if not (first == second) and round(abs(second-first), places) != 0:
            return
        standardMsg = '%s == %s within %r places' % (safe_repr(first),
                                                     safe_repr(second),
                                                     places)
    msg = self._formatMessage(msg, standardMsg)
    raise self.failureException(msg)

def assertNotContains(

self, response, text, status_code=200, msg_prefix=u'', html=False)

Asserts that a response indicates that some content was retrieved successfully, (i.e., the HTTP status code was as expected), and that text doesn't occurs in the content of the response.

def assertNotContains(self, response, text, status_code=200,
                      msg_prefix='', html=False):
    """
    Asserts that a response indicates that some content was retrieved
    successfully, (i.e., the HTTP status code was as expected), and that
    ``text`` doesn't occurs in the content of the response.
    """
    # If the response supports deferred rendering and hasn't been rendered
    # yet, then ensure that it does get rendered before proceeding further.
    if (hasattr(response, 'render') and callable(response.render)
        and not response.is_rendered):
        response.render()
    if msg_prefix:
        msg_prefix += ": "
    self.assertEqual(response.status_code, status_code,
        msg_prefix + "Couldn't retrieve content: Response code was %d"
        " (expected %d)" % (response.status_code, status_code))
    content = response.content
    if not isinstance(text, bytes) or html:
        text = force_text(text, encoding=response._charset)
        content = content.decode(response._charset)
        text_repr = "'%s'" % text
    else:
        text_repr = repr(text)
    if html:
        content = assert_and_parse_html(self, content, None,
            'Response\'s content is not valid HTML:')
        text = assert_and_parse_html(self, text, None,
            'Second argument is not valid HTML:')
    self.assertEqual(content.count(text), 0,
        msg_prefix + "Response should not contain %s" % text_repr)

def assertNotEqual(

self, first, second, msg=None)

Fail if the two objects are equal as determined by the '!=' operator.

def assertNotEqual(self, first, second, msg=None):
    """Fail if the two objects are equal as determined by the '!='
       operator.
    """
    if not first != second:
        msg = self._formatMessage(msg, '%s == %s' % (safe_repr(first),
                                                      safe_repr(second)))
        raise self.failureException(msg)

def assertNotEquals(

self, first, second, msg=None)

Fail if the two objects are equal as determined by the '!=' operator.

def assertNotEqual(self, first, second, msg=None):
    """Fail if the two objects are equal as determined by the '!='
       operator.
    """
    if not first != second:
        msg = self._formatMessage(msg, '%s == %s' % (safe_repr(first),
                                                      safe_repr(second)))
        raise self.failureException(msg)

def assertNotIn(

self, member, container, msg=None)

Just like self.assertTrue(a not in b), but with a nicer default message.

def assertNotIn(self, member, container, msg=None):
    """Just like self.assertTrue(a not in b), but with a nicer default message."""
    if member in container:
        standardMsg = '%s unexpectedly found in %s' % (safe_repr(member),
                                                    safe_repr(container))
        self.fail(self._formatMessage(msg, standardMsg))

def assertNotIsInstance(

self, obj, cls, msg=None)

Included for symmetry with assertIsInstance.

def assertNotIsInstance(self, obj, cls, msg=None):
    """Included for symmetry with assertIsInstance."""
    if isinstance(obj, cls):
        standardMsg = '%s is an instance of %r' % (safe_repr(obj), cls)
        self.fail(self._formatMessage(msg, standardMsg))

def assertNotRegexpMatches(

self, text, unexpected_regexp, msg=None)

Fail the test if the text matches the regular expression.

def assertNotRegexpMatches(self, text, unexpected_regexp, msg=None):
    """Fail the test if the text matches the regular expression."""
    if isinstance(unexpected_regexp, basestring):
        unexpected_regexp = re.compile(unexpected_regexp)
    match = unexpected_regexp.search(text)
    if match:
        msg = msg or "Regexp matched"
        msg = '%s: %r matches %r in %r' % (msg,
                                           text[match.start():match.end()],
                                           unexpected_regexp.pattern,
                                           text)
        raise self.failureException(msg)

def assertNumQueries(

self, num, func=None, *args, **kwargs)

def assertNumQueries(self, num, func=None, *args, **kwargs):
    using = kwargs.pop("using", DEFAULT_DB_ALIAS)
    conn = connections[using]
    context = _AssertNumQueriesContext(self, num, conn)
    if func is None:
        return context
    with context:
        func(*args, **kwargs)

def assertQuerysetEqual(

self, qs, values, transform=<built-in function repr>, ordered=True)

def assertQuerysetEqual(self, qs, values, transform=repr, ordered=True):
    items = six.moves.map(transform, qs)
    if not ordered:
        return self.assertEqual(set(items), set(values))
    values = list(values)
    # For example qs.iterator() could be passed as qs, but it does not
    # have 'ordered' attribute.
    if len(values) > 1 and hasattr(qs, 'ordered') and not qs.ordered:
        raise ValueError("Trying to compare non-ordered queryset "
                         "against more than one ordered values")
    return self.assertEqual(list(items), values)

def assertRaises(

self, excClass, callableObj=None, *args, **kwargs)

Fail unless an exception of class excClass is raised by callableObj when invoked with arguments args and keyword arguments kwargs. If a different type of exception is raised, it will not be caught, and the test case will be deemed to have suffered an error, exactly as for an unexpected exception.

If called with callableObj omitted or None, will return a context object used like this::

 with self.assertRaises(SomeException):
     do_something()

The context manager keeps a reference to the exception as the 'exception' attribute. This allows you to inspect the exception after the assertion::

with self.assertRaises(SomeException) as cm:
    do_something()
the_exception = cm.exception
self.assertEqual(the_exception.error_code, 3)
def assertRaises(self, excClass, callableObj=None, *args, **kwargs):
    """Fail unless an exception of class excClass is raised
       by callableObj when invoked with arguments args and keyword
       arguments kwargs. If a different type of exception is
       raised, it will not be caught, and the test case will be
       deemed to have suffered an error, exactly as for an
       unexpected exception.
       If called with callableObj omitted or None, will return a
       context object used like this::
            with self.assertRaises(SomeException):
                do_something()
       The context manager keeps a reference to the exception as
       the 'exception' attribute. This allows you to inspect the
       exception after the assertion::
           with self.assertRaises(SomeException) as cm:
               do_something()
           the_exception = cm.exception
           self.assertEqual(the_exception.error_code, 3)
    """
    context = _AssertRaisesContext(excClass, self)
    if callableObj is None:
        return context
    with context:
        callableObj(*args, **kwargs)

def assertRaisesMessage(

self, expected_exception, expected_message, callable_obj=None, *args, **kwargs)

Asserts that the message in a raised exception matches the passed value.

Args: expected_exception: Exception class expected to be raised. expected_message: expected error message string value. callable_obj: Function to be called. args: Extra args. kwargs: Extra kwargs.

def assertRaisesMessage(self, expected_exception, expected_message,
                       callable_obj=None, *args, **kwargs):
    """
    Asserts that the message in a raised exception matches the passed
    value.
    Args:
        expected_exception: Exception class expected to be raised.
        expected_message: expected error message string value.
        callable_obj: Function to be called.
        args: Extra args.
        kwargs: Extra kwargs.
    """
    return six.assertRaisesRegex(self, expected_exception,
            re.escape(expected_message), callable_obj, *args, **kwargs)

def assertRaisesRegexp(

self, expected_exception, expected_regexp, callable_obj=None, *args, **kwargs)

Asserts that the message in a raised exception matches a regexp.

Args: expected_exception: Exception class expected to be raised. expected_regexp: Regexp (re pattern object or string) expected to be found in error message. callable_obj: Function to be called. args: Extra args. kwargs: Extra kwargs.

def assertRaisesRegexp(self, expected_exception, expected_regexp,
                       callable_obj=None, *args, **kwargs):
    """Asserts that the message in a raised exception matches a regexp.
    Args:
        expected_exception: Exception class expected to be raised.
        expected_regexp: Regexp (re pattern object or string) expected
                to be found in error message.
        callable_obj: Function to be called.
        args: Extra args.
        kwargs: Extra kwargs.
    """
    if expected_regexp is not None:
        expected_regexp = re.compile(expected_regexp)
    context = _AssertRaisesContext(expected_exception, self, expected_regexp)
    if callable_obj is None:
        return context
    with context:
        callable_obj(*args, **kwargs)

def assertRedirects(

self, response, expected_url, status_code=302, target_status_code=200, host=None, msg_prefix=u'')

Asserts that a response redirected to a specific URL, and that the redirect URL can be loaded.

Note that assertRedirects won't work for external links since it uses TestClient to do a request.

def assertRedirects(self, response, expected_url, status_code=302,
                    target_status_code=200, host=None, msg_prefix=''):
    """Asserts that a response redirected to a specific URL, and that the
    redirect URL can be loaded.
    Note that assertRedirects won't work for external links since it uses
    TestClient to do a request.
    """
    if msg_prefix:
        msg_prefix += ": "
    if hasattr(response, 'redirect_chain'):
        # The request was a followed redirect
        self.assertTrue(len(response.redirect_chain) > 0,
            msg_prefix + "Response didn't redirect as expected: Response"
            " code was %d (expected %d)" %
                (response.status_code, status_code))
        self.assertEqual(response.redirect_chain[0][1], status_code,
            msg_prefix + "Initial response didn't redirect as expected:"
            " Response code was %d (expected %d)" %
                (response.redirect_chain[0][1], status_code))
        url, status_code = response.redirect_chain[-1]
        self.assertEqual(response.status_code, target_status_code,
            msg_prefix + "Response didn't redirect as expected: Final"
            " Response code was %d (expected %d)" %
                (response.status_code, target_status_code))
    else:
        # Not a followed redirect
        self.assertEqual(response.status_code, status_code,
            msg_prefix + "Response didn't redirect as expected: Response"
            " code was %d (expected %d)" %
                (response.status_code, status_code))
        url = response.url
        scheme, netloc, path, query, fragment = urlsplit(url)
        redirect_response = response.client.get(path, QueryDict(query))
        # Get the redirection page, using the same client that was used
        # to obtain the original response.
        self.assertEqual(redirect_response.status_code, target_status_code,
            msg_prefix + "Couldn't retrieve redirection page '%s':"
            " 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)
    if not (e_scheme or e_netloc):
        expected_url = urlunsplit(('http', host or 'testserver', e_path,
            e_query, e_fragment))
    self.assertEqual(url, expected_url,
        msg_prefix + "Response redirected to '%s', expected '%s'" %
            (url, expected_url))

def assertRegexpMatches(

self, text, expected_regexp, msg=None)

Fail the test unless the text matches the regular expression.

def assertRegexpMatches(self, text, expected_regexp, msg=None):
    """Fail the test unless the text matches the regular expression."""
    if isinstance(expected_regexp, basestring):
        expected_regexp = re.compile(expected_regexp)
    if not expected_regexp.search(text):
        msg = msg or "Regexp didn't match"
        msg = '%s: %r not found in %r' % (msg, expected_regexp.pattern, text)
        raise self.failureException(msg)

def assertSequenceEqual(

self, seq1, seq2, msg=None, seq_type=None)

An equality assertion for ordered sequences (like lists and tuples).

For the purposes of this function, a valid ordered sequence type is one which can be indexed, has a length, and has an equality operator.

Args: seq1: The first sequence to compare. seq2: The second sequence to compare. seq_type: The expected datatype of the sequences, or None if no datatype should be enforced. msg: Optional message to use on failure instead of a list of differences.

def assertSequenceEqual(self, seq1, seq2, msg=None, seq_type=None):
    """An equality assertion for ordered sequences (like lists and tuples).
    For the purposes of this function, a valid ordered sequence type is one
    which can be indexed, has a length, and has an equality operator.
    Args:
        seq1: The first sequence to compare.
        seq2: The second sequence to compare.
        seq_type: The expected datatype of the sequences, or None if no
                datatype should be enforced.
        msg: Optional message to use on failure instead of a list of
                differences.
    """
    if seq_type is not None:
        seq_type_name = seq_type.__name__
        if not isinstance(seq1, seq_type):
            raise self.failureException('First sequence is not a %s: %s'
                                    % (seq_type_name, safe_repr(seq1)))
        if not isinstance(seq2, seq_type):
            raise self.failureException('Second sequence is not a %s: %s'
                                    % (seq_type_name, safe_repr(seq2)))
    else:
        seq_type_name = "sequence"
    differing = None
    try:
        len1 = len(seq1)
    except (TypeError, NotImplementedError):
        differing = 'First %s has no length.    Non-sequence?' % (
                seq_type_name)
    if differing is None:
        try:
            len2 = len(seq2)
        except (TypeError, NotImplementedError):
            differing = 'Second %s has no length.    Non-sequence?' % (
                    seq_type_name)
    if differing is None:
        if seq1 == seq2:
            return
        seq1_repr = safe_repr(seq1)
        seq2_repr = safe_repr(seq2)
        if len(seq1_repr) > 30:
            seq1_repr = seq1_repr[:30] + '...'
        if len(seq2_repr) > 30:
            seq2_repr = seq2_repr[:30] + '...'
        elements = (seq_type_name.capitalize(), seq1_repr, seq2_repr)
        differing = '%ss differ: %s != %s\n' % elements
        for i in xrange(min(len1, len2)):
            try:
                item1 = seq1[i]
            except (TypeError, IndexError, NotImplementedError):
                differing += ('\nUnable to index element %d of first %s\n' %
                             (i, seq_type_name))
                break
            try:
                item2 = seq2[i]
            except (TypeError, IndexError, NotImplementedError):
                differing += ('\nUnable to index element %d of second %s\n' %
                             (i, seq_type_name))
                break
            if item1 != item2:
                differing += ('\nFirst differing element %d:\n%s\n%s\n' %
                             (i, safe_repr(item1), safe_repr(item2)))
                break
        else:
            if (len1 == len2 and seq_type is None and
                type(seq1) != type(seq2)):
                # The sequences are the same, but have differing types.
                return
        if len1 > len2:
            differing += ('\nFirst %s contains %d additional '
                         'elements.\n' % (seq_type_name, len1 - len2))
            try:
                differing += ('First extra element %d:\n%s\n' %
                              (len2, safe_repr(seq1[len2])))
            except (TypeError, IndexError, NotImplementedError):
                differing += ('Unable to index element %d '
                              'of first %s\n' % (len2, seq_type_name))
        elif len1 < len2:
            differing += ('\nSecond %s contains %d additional '
                         'elements.\n' % (seq_type_name, len2 - len1))
            try:
                differing += ('First extra element %d:\n%s\n' %
                              (len1, safe_repr(seq2[len1])))
            except (TypeError, IndexError, NotImplementedError):
                differing += ('Unable to index element %d '
                              'of second %s\n' % (len1, seq_type_name))
    standardMsg = differing
    diffMsg = '\n' + '\n'.join(
        difflib.ndiff(pprint.pformat(seq1).splitlines(),
                      pprint.pformat(seq2).splitlines()))
    standardMsg = self._truncateMessage(standardMsg, diffMsg)
    msg = self._formatMessage(msg, standardMsg)
    self.fail(msg)

def assertSetEqual(

self, set1, set2, msg=None)

A set-specific equality assertion.

Args: set1: The first set to compare. set2: The second set to compare. msg: Optional message to use on failure instead of a list of differences.

assertSetEqual uses ducktyping to support different types of sets, and is optimized for sets specifically (parameters must support a difference method).

def assertSetEqual(self, set1, set2, msg=None):
    """A set-specific equality assertion.
    Args:
        set1: The first set to compare.
        set2: The second set to compare.
        msg: Optional message to use on failure instead of a list of
                differences.
    assertSetEqual uses ducktyping to support different types of sets, and
    is optimized for sets specifically (parameters must support a
    difference method).
    """
    try:
        difference1 = set1.difference(set2)
    except TypeError, e:
        self.fail('invalid type when attempting set difference: %s' % e)
    except AttributeError, e:
        self.fail('first argument does not support set difference: %s' % e)
    try:
        difference2 = set2.difference(set1)
    except TypeError, e:
        self.fail('invalid type when attempting set difference: %s' % e)
    except AttributeError, e:
        self.fail('second argument does not support set difference: %s' % e)
    if not (difference1 or difference2):
        return
    lines = []
    if difference1:
        lines.append('Items in the first set but not the second:')
        for item in difference1:
            lines.append(repr(item))
    if difference2:
        lines.append('Items in the second set but not the first:')
        for item in difference2:
            lines.append(repr(item))
    standardMsg = '\n'.join(lines)
    self.fail(self._formatMessage(msg, standardMsg))

def assertTemplateNotUsed(

self, response=None, template_name=None, msg_prefix=u'')

Asserts that the template with the provided name was NOT used in rendering the response. Also usable as context manager.

def assertTemplateNotUsed(self, response=None, template_name=None, msg_prefix=''):
    """
    Asserts that the template with the provided name was NOT used in
    rendering the response. Also usable as context manager.
    """
    if response is None and template_name is None:
        raise TypeError('response and/or template_name argument must be provided')
    if msg_prefix:
        msg_prefix += ": "
    # Use assertTemplateUsed as context manager.
    if not hasattr(response, 'templates') or (response is None and template_name):
        if response:
            template_name = response
            response = None
        context = _AssertTemplateNotUsedContext(self, template_name)
        return context
    template_names = [t.name for t in response.templates]
    self.assertFalse(template_name in template_names,
        msg_prefix + "Template '%s' was used unexpectedly in rendering"
        " the response" % template_name)

def assertTemplateUsed(

self, response=None, template_name=None, msg_prefix=u'')

Asserts that the template with the provided name was used in rendering the response. Also usable as context manager.

def assertTemplateUsed(self, response=None, template_name=None, msg_prefix=''):
    """
    Asserts that the template with the provided name was used in rendering
    the response. Also usable as context manager.
    """
    if response is None and template_name is None:
        raise TypeError('response and/or template_name argument must be provided')
    if msg_prefix:
        msg_prefix += ": "
    # Use assertTemplateUsed as context manager.
    if not hasattr(response, 'templates') or (response is None and template_name):
        if response:
            template_name = response
            response = None
        context = _AssertTemplateUsedContext(self, template_name)
        return context
    template_names = [t.name for t in response.templates]
    if not template_names:
        self.fail(msg_prefix + "No templates used to render the response")
    self.assertTrue(template_name in template_names,
        msg_prefix + "Template '%s' was not a template used to render"
        " the response. Actual template(s) used: %s" %
            (template_name, ', '.join(template_names)))

def assertTrue(

self, expr, msg=None)

Check that the expression is true.

def assertTrue(self, expr, msg=None):
    """Check that the expression is true."""
    if not expr:
        msg = self._formatMessage(msg, "%s is not true" % safe_repr(expr))
        raise self.failureException(msg)

def assertTupleEqual(

self, tuple1, tuple2, msg=None)

A tuple-specific equality assertion.

Args: tuple1: The first tuple to compare. tuple2: The second tuple to compare. msg: Optional message to use on failure instead of a list of differences.

def assertTupleEqual(self, tuple1, tuple2, msg=None):
    """A tuple-specific equality assertion.
    Args:
        tuple1: The first tuple to compare.
        tuple2: The second tuple to compare.
        msg: Optional message to use on failure instead of a list of
                differences.
    """
    self.assertSequenceEqual(tuple1, tuple2, msg, seq_type=tuple)

def assertXMLEqual(

self, xml1, xml2, msg=None)

Asserts that two XML snippets are semantically the same. Whitespace in most cases is ignored, and attribute ordering is not significant. The passed-in arguments must be valid XML.

def assertXMLEqual(self, xml1, xml2, msg=None):
    """
    Asserts that two XML snippets are semantically the same.
    Whitespace in most cases is ignored, and attribute ordering is not
    significant. The passed-in arguments must be valid XML.
    """
    try:
        result = compare_xml(xml1, xml2)
    except Exception as e:
        standardMsg = 'First or second argument is not valid XML\n%s' % e
        self.fail(self._formatMessage(msg, standardMsg))
    else:
        if not result:
            standardMsg = '%s != %s' % (safe_repr(xml1, True), safe_repr(xml2, True))
            self.fail(self._formatMessage(msg, standardMsg))

def assertXMLNotEqual(

self, xml1, xml2, msg=None)

Asserts that two XML snippets are not semantically equivalent. Whitespace in most cases is ignored, and attribute ordering is not significant. The passed-in arguments must be valid XML.

def assertXMLNotEqual(self, xml1, xml2, msg=None):
    """
    Asserts that two XML snippets are not semantically equivalent.
    Whitespace in most cases is ignored, and attribute ordering is not
    significant. The passed-in arguments must be valid XML.
    """
    try:
        result = compare_xml(xml1, xml2)
    except Exception as e:
        standardMsg = 'First or second argument is not valid XML\n%s' % e
        self.fail(self._formatMessage(msg, standardMsg))
    else:
        if result:
            standardMsg = '%s == %s' % (safe_repr(xml1, True), safe_repr(xml2, True))
            self.fail(self._formatMessage(msg, standardMsg))

def assert_(

self, expr, msg=None)

Check that the expression is true.

def assertTrue(self, expr, msg=None):
    """Check that the expression is true."""
    if not expr:
        msg = self._formatMessage(msg, "%s is not true" % safe_repr(expr))
        raise self.failureException(msg)

def countTestCases(

self)

def countTestCases(self):
    return 1

def debug(

self)

Run the test without collecting errors in a TestResult

def debug(self):
    """Run the test without collecting errors in a TestResult"""
    self.setUp()
    getattr(self, self._testMethodName)()
    self.tearDown()
    while self._cleanups:
        function, args, kwargs = self._cleanups.pop(-1)
        function(*args, **kwargs)

def defaultTestResult(

self)

def defaultTestResult(self):
    return result.TestResult()

def doCleanups(

self)

Execute all cleanup functions. Normally called for you after tearDown.

def doCleanups(self):
    """Execute all cleanup functions. Normally called for you after
    tearDown."""
    result = self._resultForDoCleanups
    ok = True
    while self._cleanups:
        function, args, kwargs = self._cleanups.pop(-1)
        try:
            function(*args, **kwargs)
        except KeyboardInterrupt:
            raise
        except:
            ok = False
            result.addError(self, sys.exc_info())
    return ok

def fail(

self, msg=None)

Fail immediately, with the given message.

def fail(self, msg=None):
    """Fail immediately, with the given message."""
    raise self.failureException(msg)

def failIf(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failIfAlmostEqual(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failIfEqual(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failUnless(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failUnlessAlmostEqual(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failUnlessEqual(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def failUnlessRaises(

*args, **kwargs)

def deprecated_func(*args, **kwargs):
    warnings.warn(
        'Please use {0} instead.'.format(original_func.__name__),
        PendingDeprecationWarning, 2)
    return original_func(*args, **kwargs)

def id(

self)

def id(self):
    return "%s.%s" % (strclass(self.__class__), self._testMethodName)

def restore_warnings_state(

self)

Restores the state of the warnings module to the state saved by save_warnings_state()

def restore_warnings_state(self):
    """
    Restores the state of the warnings module to the state
    saved by save_warnings_state()
    """
    warnings.warn(self._warn_txt, DeprecationWarning, stacklevel=2)
    warnings.filters = self._warnings_state[:]

def run(

self, result=None)

def run(self, result=None):
    orig_result = result
    if result is None:
        result = self.defaultTestResult()
        startTestRun = getattr(result, 'startTestRun', None)
        if startTestRun is not None:
            startTestRun()
    self._resultForDoCleanups = result
    result.startTest(self)
    testMethod = getattr(self, self._testMethodName)
    if (getattr(self.__class__, "__unittest_skip__", False) or
        getattr(testMethod, "__unittest_skip__", False)):
        # If the class or method was skipped.
        try:
            skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
                        or getattr(testMethod, '__unittest_skip_why__', ''))
            self._addSkip(result, skip_why)
        finally:
            result.stopTest(self)
        return
    try:
        success = False
        try:
            self.setUp()
        except SkipTest as e:
            self._addSkip(result, str(e))
        except KeyboardInterrupt:
            raise
        except:
            result.addError(self, sys.exc_info())
        else:
            try:
                testMethod()
            except KeyboardInterrupt:
                raise
            except self.failureException:
                result.addFailure(self, sys.exc_info())
            except _ExpectedFailure as e:
                addExpectedFailure = getattr(result, 'addExpectedFailure', None)
                if addExpectedFailure is not None:
                    addExpectedFailure(self, e.exc_info)
                else:
                    warnings.warn("TestResult has no addExpectedFailure method, reporting as passes",
                                  RuntimeWarning)
                    result.addSuccess(self)
            except _UnexpectedSuccess:
                addUnexpectedSuccess = getattr(result, 'addUnexpectedSuccess', None)
                if addUnexpectedSuccess is not None:
                    addUnexpectedSuccess(self)
                else:
                    warnings.warn("TestResult has no addUnexpectedSuccess method, reporting as failures",
                                  RuntimeWarning)
                    result.addFailure(self, sys.exc_info())
            except SkipTest as e:
                self._addSkip(result, str(e))
            except:
                result.addError(self, sys.exc_info())
            else:
                success = True
            try:
                self.tearDown()
            except KeyboardInterrupt:
                raise
            except:
                result.addError(self, sys.exc_info())
                success = False
        cleanUpSuccess = self.doCleanups()
        success = success and cleanUpSuccess
        if success:
            result.addSuccess(self)
    finally:
        result.stopTest(self)
        if orig_result is None:
            stopTestRun = getattr(result, 'stopTestRun', None)
            if stopTestRun is not None:
                stopTestRun()

def save_warnings_state(

self)

Saves the state of the warnings module

def save_warnings_state(self):
    """
    Saves the state of the warnings module
    """
    warnings.warn(self._warn_txt, DeprecationWarning, stacklevel=2)
    self._warnings_state = warnings.filters[:]

def setUp(

self)

Hook method for setting up the test fixture before exercising it.

def setUp(self):
    "Hook method for setting up the test fixture before exercising it."
    pass

def setUpClass(

cls)

Hook method for setting up class fixture before running tests in the class.

@classmethod
def setUpClass(cls):
    "Hook method for setting up class fixture before running tests in the class."

def settings(

self, **kwargs)

A context manager that temporarily sets a setting and reverts back to the original value when exiting the context.

def settings(self, **kwargs):
    """
    A context manager that temporarily sets a setting and reverts
    back to the original value when exiting the context.
    """
    return override_settings(**kwargs)

def shortDescription(

self)

Returns a one-line description of the test, or None if no description has been provided.

The default implementation of this method returns the first line of the specified test method's docstring.

def shortDescription(self):
    """Returns a one-line description of the test, or None if no
    description has been provided.
    The default implementation of this method returns the first line of
    the specified test method's docstring.
    """
    doc = self._testMethodDoc
    return doc and doc.split("\n")[0].strip() or None

def skipTest(

self, reason)

Skip this test.

def skipTest(self, reason):
    """Skip this test."""
    raise SkipTest(reason)

def tearDown(

self)

Hook method for deconstructing the test fixture after testing it.

def tearDown(self):
    "Hook method for deconstructing the test fixture after testing it."
    pass

def tearDownClass(

cls)

Hook method for deconstructing the class fixture after running all tests in the class.

@classmethod
def tearDownClass(cls):
    "Hook method for deconstructing the class fixture after running all tests in the class."

def testSorting(

self)

def testSorting(self):
    strings = [u'Métro', u'évasion', u'àccent', u'È', u'île', u'arrivée', u'elle']
    strings.sort(unaccent_icmp)
    expected = [u'àccent', u'arrivée', u'È', u'elle', u'évasion', u'île', u'Métro']
    self.assertEquals(strings, expected)