diff options
| author | Tim Graham <timograham@gmail.com> | 2017-02-22 20:54:55 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-02-22 20:54:55 -0500 |
| commit | 007d4e030cbb20d3773609fa3bbae7cab8fadba2 (patch) | |
| tree | 34cb904e7709205b804cf9aa4d6cfb5372536e80 /tests/utils_tests/test_encoding.py | |
| parent | 098f181e180ad91d2fccc0de3536d4cd66da04b7 (diff) | |
Completed test coverage for django.utils.encoding.
Diffstat (limited to 'tests/utils_tests/test_encoding.py')
| -rw-r--r-- | tests/utils_tests/test_encoding.py | 37 |
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=✓'), |
