Completed test coverage for django.utils.encoding.

This commit is contained in:
Tim Graham 2017-02-22 20:54:55 -05:00 committed by GitHub
parent 098f181e18
commit 007d4e030c
1 changed files with 32 additions and 9 deletions

View File

@ -1,13 +1,16 @@
import datetime import datetime
import unittest import unittest
from unittest import mock
from urllib.parse import quote_plus from urllib.parse import quote_plus
from django.test import SimpleTestCase from django.test import SimpleTestCase
from django.utils.encoding import ( from django.utils.encoding import (
DjangoUnicodeDecodeError, escape_uri_path, filepath_to_uri, force_bytes, 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.functional import SimpleLazyObject
from django.utils.translation import gettext_lazy
class TestEncodingUtils(SimpleTestCase): class TestEncodingUtils(SimpleTestCase):
@ -49,27 +52,45 @@ class TestEncodingUtils(SimpleTestCase):
today = datetime.date.today() today = datetime.date.today()
self.assertEqual(force_bytes(today, strings_only=True), today) self.assertEqual(force_bytes(today, strings_only=True), today)
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 'ŠĐĆŽćžšđ'
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): def test_smart_text(self):
class Test: class Test:
def __str__(self): def __str__(self):
return 'ŠĐĆŽćžšđ' return 'ŠĐĆŽćžšđ'
class TestU: lazy_func = gettext_lazy('x')
def __str__(self): self.assertIs(smart_text(lazy_func), lazy_func)
return 'ŠĐĆŽćžšđ'
def __bytes__(self):
return b'Foo'
self.assertEqual(smart_text(Test()), '\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111') 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(1), '1')
self.assertEqual(smart_text('foo'), 'foo') 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): class TestRFC3987IEncodingUtils(unittest.TestCase):
def test_filepath_to_uri(self): 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') 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): def test_iri_to_uri(self):
@ -82,6 +103,7 @@ class TestRFC3987IEncodingUtils(unittest.TestCase):
# Reserved chars remain unescaped. # Reserved chars remain unescaped.
('%&', '%&'), ('%&', '%&'),
('red&♥ros%#red', 'red&%E2%99%A5ros%#red'), ('red&♥ros%#red', 'red&%E2%99%A5ros%#red'),
(gettext_lazy('red&♥ros%#red'), 'red&%E2%99%A5ros%#red'),
] ]
for iri, uri in cases: for iri, uri in cases:
@ -92,6 +114,7 @@ class TestRFC3987IEncodingUtils(unittest.TestCase):
def test_uri_to_iri(self): def test_uri_to_iri(self):
cases = [ cases = [
(None, None),
# Valid UTF-8 sequences are decoded. # Valid UTF-8 sequences are decoded.
('/%e2%89%Ab%E2%99%a5%E2%89%aB/', '/≫♥≫/'), ('/%e2%89%Ab%E2%99%a5%E2%89%aB/', '/≫♥≫/'),
('/%E2%99%A5%E2%99%A5/?utf8=%E2%9C%93', '/♥♥/?utf8=✓'), ('/%E2%99%A5%E2%99%A5/?utf8=%E2%9C%93', '/♥♥/?utf8=✓'),