Commit 427b5949 authored by Claude Paroz's avatar Claude Paroz
Browse files

[1.5.x] Fixed #20237 -- Reenabled assertContains with binary parameter

Thanks Baptiste Mispelon for the review.
Backport of fe01404b from master.
parent 82b5e10e
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -638,11 +638,13 @@ class TransactionTestCase(SimpleTestCase):
        self.assertEqual(response.status_code, status_code,
            msg_prefix + "Couldn't retrieve content: Response code was %d"
            " (expected %d)" % (response.status_code, status_code))
        text = force_text(text, encoding=response._charset)

        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)
        if html:
            content = assert_and_parse_html(self, content, None,
@@ -678,8 +680,11 @@ class TransactionTestCase(SimpleTestCase):
        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 = response.content.decode(response._charset)
            content = content.decode(response._charset)
        if html:
            content = assert_and_parse_html(self, content, None,
                'Response\'s content is not valid HTML:')
+7 −0
Original line number Diff line number Diff line
@@ -131,6 +131,13 @@ class AssertContainsTests(TestCase):
        self.assertNotContains(r, 'はたけ')
        self.assertNotContains(r, b'\xe3\x81\xaf\xe3\x81\x9f\xe3\x81\x91'.decode('utf-8'))

    def test_binary_contains(self):
        r = self.client.get('/test_client_regress/check_binary/')
        self.assertContains(r, b'PDF document')
        with self.assertRaises(AssertionError):
            self.assertContains(r, b'PDF document', count=2)
        self.assertNotContains(r, b'ODF document')

    def test_nontext_contains(self):
        r = self.client.get('/test_client_regress/no_template_view/')
        self.assertContains(r, ugettext_lazy('once'))
+1 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ urlpatterns = patterns('',
    (r'^check_session/$', views.check_session_view),
    (r'^request_methods/$', views.request_methods_view),
    (r'^check_unicode/$', views.return_unicode),
    (r'^check_binary/$', views.return_undecodable_binary),
    (r'^parse_unicode_json/$', views.return_json_file),
    (r'^check_headers/$', views.check_headers),
    (r'^check_headers_redirect/$', RedirectView.as_view(url='/test_client_regress/check_headers/')),
+5 −0
Original line number Diff line number Diff line
@@ -70,6 +70,11 @@ def request_methods_view(request):
def return_unicode(request):
    return render_to_response('unicode.html')

def return_undecodable_binary(request):
    return HttpResponse(
        b'%PDF-1.4\r\n%\x93\x8c\x8b\x9e ReportLab Generated PDF document http://www.reportlab.com'
    )

def return_json_file(request):
    "A view that parses and returns a JSON string as a file."
    match = CONTENT_TYPE_RE.match(request.META['CONTENT_TYPE'])