Commit 85359ec9 authored by Florian Apolloner's avatar Florian Apolloner
Browse files

Merge branch 't20812'

parents cc957cb1 2326dedd
Loading
Loading
Loading
Loading
+8 −9
Original line number Diff line number Diff line
@@ -67,14 +67,13 @@ def force_text(s, encoding='utf-8', strings_only=False, errors='strict'):
        return s
    try:
        if not isinstance(s, six.string_types):
            if hasattr(s, '__unicode__'):
                s = s.__unicode__()
            else:
            if six.PY3:
                if isinstance(s, bytes):
                    s = six.text_type(s, encoding, errors)
                else:
                    s = six.text_type(s)
            elif hasattr(s, '__unicode__'):
                s = six.text_type(s)
            else:
                s = six.text_type(bytes(s), encoding, errors)
        else:
+16 −1
Original line number Diff line number Diff line
@@ -4,10 +4,25 @@ from __future__ import unicode_literals
import unittest
import datetime

from django.utils.encoding import force_bytes, filepath_to_uri
from django.utils import six
from django.utils.encoding import force_bytes, force_text, filepath_to_uri


class TestEncodingUtils(unittest.TestCase):
    def test_force_text_exception(self):
        """
        Check that broken __unicode__/__str__ actually raises an error.
        """
        class MyString(object):
            def __str__(self):
                return b'\xc3\xb6\xc3\xa4\xc3\xbc'

            __unicode__ = __str__

        # str(s) raises a TypeError on python 3 if the result is not a text type.
        # python 2 fails when it tries converting from str to unicode (via ASCII).
        exception = TypeError if six.PY3 else UnicodeError
        self.assertRaises(exception, force_text, MyString())

    def test_force_bytes_exception(self):
        """