Opened 4 years ago

Closed 4 years ago

#31378 closed New feature (wontfix)

Support bytes in assertXMLEqual()/assertXMLNotEqual().

Reported by: Joe Germuska Owned by: nobody
Component: Testing framework Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Joe Germuska)

In writing a test case, I found that passing the test client's response.content object into TestCase.assertXMLEqual() resulted in this error: a bytes-like object is required, not 'str'

In tracing the code, this originates from django.test.utils.compare_xml, where string literals \\n and \n are passed to replace() even though the types of want and got (particularly got) may be bytes and not str.

The workaround is to decode the response content before calling assertXMLEqual (response.content.decode('utf-8')) and to pass the assertion comparison ("want") also as a string, but if this method is going to be used in the testing framework, it seems that it should tolerate directly passing in response.content, even if that's a bytes.

Change History (2)

comment:1 by Joe Germuska, 4 years ago

Description: modified (diff)

comment:2 by Mariusz Felisiak, 4 years ago

Resolution: wontfix
Status: newclosed
Summary: django.test.utils compare_xml assumes string, errors on bytesSupport bytes in assertXMLEqual()/assertXMLNotEqual().
Type: UncategorizedNew feature

It's documented that assertXMLEqual() and assertXMLNotEqual() accept strings. I don't think we would like to complicate these methods, you can always use response.content.decode() (as you've already pointed out).

Note: See TracTickets for help on using tickets.
Back to Top