From 2326dedde81c59950d2b1e0653a837e1d7019acd Mon Sep 17 00:00:00 2001 From: Florian Apolloner Date: Fri, 6 Sep 2013 19:16:06 +0200 Subject: Fixed #20812 -- Error out if __unicode__/__str__ doesn't return a text type. --- tests/utils_tests/test_encoding.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'tests/utils_tests/test_encoding.py') diff --git a/tests/utils_tests/test_encoding.py b/tests/utils_tests/test_encoding.py index 5730eca6d5..81a4c4f5da 100644 --- a/tests/utils_tests/test_encoding.py +++ b/tests/utils_tests/test_encoding.py @@ -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): """ -- cgit v1.3