summaryrefslogtreecommitdiff
path: root/tests/str/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/str/tests.py')
-rw-r--r--tests/str/tests.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/str/tests.py b/tests/str/tests.py
new file mode 100644
index 0000000000..bd85c48d05
--- /dev/null
+++ b/tests/str/tests.py
@@ -0,0 +1,45 @@
+ # -*- coding: utf-8 -*-
+from __future__ import absolute_import, unicode_literals
+
+import datetime
+
+from django.test import TestCase
+from django.utils import six
+from django.utils.unittest import skipIf
+
+from .models import Article, BrokenArticle, InternationalArticle
+
+
+class SimpleTests(TestCase):
+
+ @skipIf(six.PY3, "tests a __str__ method returning unicode under Python 2")
+ def test_basic(self):
+ a = Article.objects.create(
+ headline=b'Area man programs in Python',
+ pub_date=datetime.datetime(2005, 7, 28)
+ )
+ self.assertEqual(str(a), str('Area man programs in Python'))
+ self.assertEqual(repr(a), str('<Article: Area man programs in Python>'))
+
+ @skipIf(six.PY3, "tests Model's default __str__ method under Python 2")
+ def test_broken(self):
+ # Regression test for #19362.
+ a = BrokenArticle.objects.create(
+ headline='Girl wins €12.500 in lottery',
+ pub_date=datetime.datetime(2005, 7, 28)
+ )
+ six.assertRaisesRegex(self, RuntimeError, "Did you apply "
+ "@python_2_unicode_compatible without defining __str__\?", str, a)
+
+ def test_international(self):
+ a = InternationalArticle.objects.create(
+ headline='Girl wins €12.500 in lottery',
+ pub_date=datetime.datetime(2005, 7, 28)
+ )
+ if six.PY3:
+ self.assertEqual(str(a), 'Girl wins €12.500 in lottery')
+ else:
+ # On Python 2, the default str() output will be the UTF-8 encoded
+ # output of __unicode__() -- or __str__() when the
+ # python_2_unicode_compatible decorator is used.
+ self.assertEqual(str(a), b'Girl wins \xe2\x82\xac12.500 in lottery')