mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
Add tests for punycode encoding
This commit is contained in:
parent
8f9165bfed
commit
988e3f9460
@ -14,6 +14,7 @@ from django.utils.encoding import (
|
|||||||
force_str,
|
force_str,
|
||||||
get_system_encoding,
|
get_system_encoding,
|
||||||
iri_to_uri,
|
iri_to_uri,
|
||||||
|
punycode,
|
||||||
repercent_broken_unicode,
|
repercent_broken_unicode,
|
||||||
smart_bytes,
|
smart_bytes,
|
||||||
smart_str,
|
smart_str,
|
||||||
@ -22,6 +23,12 @@ from django.utils.encoding import (
|
|||||||
from django.utils.functional import SimpleLazyObject
|
from django.utils.functional import SimpleLazyObject
|
||||||
from django.utils.translation import gettext_lazy
|
from django.utils.translation import gettext_lazy
|
||||||
|
|
||||||
|
try:
|
||||||
|
# try importing idna package for IDNA 2008 compliance
|
||||||
|
import idna
|
||||||
|
except ImportError:
|
||||||
|
idna = None
|
||||||
|
|
||||||
|
|
||||||
class TestEncodingUtils(SimpleTestCase):
|
class TestEncodingUtils(SimpleTestCase):
|
||||||
def test_force_str_exception(self):
|
def test_force_str_exception(self):
|
||||||
@ -218,3 +225,32 @@ class TestRFC3987IEncodingUtils(unittest.TestCase):
|
|||||||
for uri, expected in cases:
|
for uri, expected in cases:
|
||||||
with self.subTest(uri):
|
with self.subTest(uri):
|
||||||
self.assertEqual(escape_uri_path(uri), expected)
|
self.assertEqual(escape_uri_path(uri), expected)
|
||||||
|
|
||||||
|
|
||||||
|
class TestPunycodeEncoding(unittest.TestCase):
|
||||||
|
def test_valid_punycode(self):
|
||||||
|
self.assertIsNone(punycode(None))
|
||||||
|
self.assertEqual(punycode(""), "")
|
||||||
|
|
||||||
|
cases = [
|
||||||
|
("xn----f38am99bqvcd5liy1cxsg.test", "xn----f38am99bqvcd5liy1cxsg.test"),
|
||||||
|
("test.xn--rhqv96g", "test.xn--rhqv96g"),
|
||||||
|
("test.شبك", "test.xn--ngbx0c"),
|
||||||
|
("普遍接受-测试.top", "xn----f38am99bqvcd5liy1cxsg.top"),
|
||||||
|
("मेल.डाटामेल.भारत", "xn--r2bi6d.xn--c2bd4bq1db8d.xn--h2brj9c"),
|
||||||
|
("fußball.de", "xn--fuball-cta.de" if idna else "fussball.de"),
|
||||||
|
]
|
||||||
|
|
||||||
|
for ulabel, alabel in cases:
|
||||||
|
with self.subTest(ulabel):
|
||||||
|
self.assertEqual(punycode(ulabel), alabel)
|
||||||
|
|
||||||
|
def test_invalid_punycode(self):
|
||||||
|
cases = [".test.top"]
|
||||||
|
if idna:
|
||||||
|
cases += ["in--valid", "\\u0557w.test"]
|
||||||
|
|
||||||
|
for label in cases:
|
||||||
|
with self.subTest(label):
|
||||||
|
with self.assertRaises(UnicodeError):
|
||||||
|
punycode(label)
|
||||||
|
Loading…
Reference in New Issue
Block a user