Commit 0686c6b0 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

Add the ability to do unordered comparisons in assertQuerysetEqual.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@16654 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 2664fa18
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -597,7 +597,9 @@ class TransactionTestCase(SimpleTestCase):
            msg_prefix + "Template '%s' was used unexpectedly in rendering"
            " the response" % template_name)

    def assertQuerysetEqual(self, qs, values, transform=repr):
    def assertQuerysetEqual(self, qs, values, transform=repr, ordered=True):
        if not ordered:
            return self.assertEqual(set(map(transform, qs)), set(values))
        return self.assertEqual(map(transform, qs), values)

    def assertNumQueries(self, num, func=None, *args, **kwargs):
+11 −4
Original line number Diff line number Diff line
@@ -1592,7 +1592,7 @@ your test suite.
    ``target_status_code`` will be the url and status code for the final
    point of the redirect chain.

.. method:: TestCase.assertQuerysetEqual(qs, values, transform=repr)
.. method:: TestCase.assertQuerysetEqual(qs, values, transform=repr, ordered=True)

    .. versionadded:: 1.3

@@ -1603,9 +1603,16 @@ your test suite.
    each value is compared. Any other callable can be used if ``repr()`` doesn't
    provide a unique or helpful comparison.

    The comparison is also ordering dependent. If ``qs`` doesn't provide an
    implicit ordering, you will need to apply a ``order_by()`` clause to your
    queryset to ensure that the test will pass reliably.
    By default, the comparison is also ordering dependent. If ``qs`` doesn't
    provide an implicit ordering, you can set the ``ordered`` parameter to
    ``False``, which turns the comparison into a Python set comparison.

    .. versionchanged:: 1.4
	The ``ordered`` parameter is new in version 1.4. In earlier versions,
	you would need to ensure the queryset is ordered consistently, possibly
	via an explicit ``order_by()`` call on the queryset prior to
	comparison.


.. method:: TestCase.assertNumQueries(num, func, *args, **kwargs)