summaryrefslogtreecommitdiff
path: root/tests/utils_tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/utils_tests')
-rw-r--r--tests/utils_tests/test_encoding.py37
1 files changed, 30 insertions, 7 deletions
diff --git a/tests/utils_tests/test_encoding.py b/tests/utils_tests/test_encoding.py
index 1f5d5891ac..bca6549fe7 100644
--- a/tests/utils_tests/test_encoding.py
+++ b/tests/utils_tests/test_encoding.py
@@ -1,13 +1,16 @@
import datetime
import unittest
+from unittest import mock
from urllib.parse import quote_plus
from django.test import SimpleTestCase
from django.utils.encoding import (
DjangoUnicodeDecodeError, escape_uri_path, filepath_to_uri, force_bytes,
- force_text, iri_to_uri, smart_text, uri_to_iri,
+ force_text, get_system_encoding, iri_to_uri, smart_bytes, smart_text,
+ uri_to_iri,
)
from django.utils.functional import SimpleLazyObject
+from django.utils.translation import gettext_lazy
class TestEncodingUtils(SimpleTestCase):
@@ -49,27 +52,45 @@ class TestEncodingUtils(SimpleTestCase):
today = datetime.date.today()
self.assertEqual(force_bytes(today, strings_only=True), today)
- def test_smart_text(self):
+ def test_force_bytes_encoding(self):
+ error_msg = 'This is an exception, voilà'.encode()
+ result = force_bytes(error_msg, encoding='ascii', errors='ignore')
+ self.assertEqual(result, b'This is an exception, voil')
+
+ def test_force_bytes_memory_view(self):
+ self.assertEqual(force_bytes(memoryview(b'abc')), b'abc')
+
+ def test_smart_bytes(self):
class Test:
def __str__(self):
return 'ŠĐĆŽćžšđ'
- class TestU:
+ lazy_func = gettext_lazy('x')
+ self.assertIs(smart_bytes(lazy_func), lazy_func)
+ self.assertEqual(smart_bytes(Test()), b'\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91')
+ self.assertEqual(smart_bytes(1), b'1')
+ self.assertEqual(smart_bytes('foo'), b'foo')
+
+ def test_smart_text(self):
+ class Test:
def __str__(self):
return 'ŠĐĆŽćžšđ'
- def __bytes__(self):
- return b'Foo'
-
+ lazy_func = gettext_lazy('x')
+ self.assertIs(smart_text(lazy_func), lazy_func)
self.assertEqual(smart_text(Test()), '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
- self.assertEqual(smart_text(TestU()), '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111')
self.assertEqual(smart_text(1), '1')
self.assertEqual(smart_text('foo'), 'foo')
+ def test_get_default_encoding(self):
+ with mock.patch('locale.getdefaultlocale', side_effect=Exception):
+ self.assertEqual(get_system_encoding(), 'ascii')
+
class TestRFC3987IEncodingUtils(unittest.TestCase):
def test_filepath_to_uri(self):
+ self.assertEqual(filepath_to_uri(None), None)
self.assertEqual(filepath_to_uri('upload\\чубака.mp4'), 'upload/%D1%87%D1%83%D0%B1%D0%B0%D0%BA%D0%B0.mp4')
def test_iri_to_uri(self):
@@ -82,6 +103,7 @@ class TestRFC3987IEncodingUtils(unittest.TestCase):
# Reserved chars remain unescaped.
('%&', '%&'),
('red&♥ros%#red', 'red&%E2%99%A5ros%#red'),
+ (gettext_lazy('red&♥ros%#red'), 'red&%E2%99%A5ros%#red'),
]
for iri, uri in cases:
@@ -92,6 +114,7 @@ class TestRFC3987IEncodingUtils(unittest.TestCase):
def test_uri_to_iri(self):
cases = [
+ (None, None),
# Valid UTF-8 sequences are decoded.
('/%e2%89%Ab%E2%99%a5%E2%89%aB/', '/≫♥≫/'),
('/%E2%99%A5%E2%99%A5/?utf8=%E2%9C%93', '/♥♥/?utf8=✓'),