mirror of
https://github.com/django/django.git
synced 2025-08-04 19:08:28 +00:00
Fixed #20223 -- Added keep_lazy() as a replacement for allow_lazy().
Thanks to bmispelon and uruz for the initial patch.
This commit is contained in:
parent
93fc23b2d5
commit
d693074d43
21 changed files with 237 additions and 59 deletions
|
@ -8,6 +8,7 @@ from django.test import SimpleTestCase
|
|||
from django.utils import html, safestring, six
|
||||
from django.utils._os import upath
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.functional import lazystr
|
||||
|
||||
|
||||
class TestUtilsHtml(SimpleTestCase):
|
||||
|
@ -35,6 +36,7 @@ class TestUtilsHtml(SimpleTestCase):
|
|||
for value, output in items:
|
||||
for pattern in patterns:
|
||||
self.check_output(f, pattern % value, pattern % output)
|
||||
self.check_output(f, lazystr(pattern % value), pattern % output)
|
||||
# Check repeated values.
|
||||
self.check_output(f, value * 2, output * 2)
|
||||
# Verify it doesn't double replace &.
|
||||
|
@ -61,6 +63,7 @@ class TestUtilsHtml(SimpleTestCase):
|
|||
)
|
||||
for value, output in items:
|
||||
self.check_output(f, value, output)
|
||||
self.check_output(f, lazystr(value), output)
|
||||
|
||||
def test_strip_tags(self):
|
||||
f = html.strip_tags
|
||||
|
@ -86,6 +89,7 @@ class TestUtilsHtml(SimpleTestCase):
|
|||
)
|
||||
for value, output in items:
|
||||
self.check_output(f, value, output)
|
||||
self.check_output(f, lazystr(value), output)
|
||||
|
||||
# Some convoluted syntax for which parsing may differ between python versions
|
||||
output = html.strip_tags('<sc<!-- -->ript>test<<!-- -->/script>')
|
||||
|
@ -113,6 +117,7 @@ class TestUtilsHtml(SimpleTestCase):
|
|||
items = (' <adf>', '<adf> ', ' </adf> ', ' <f> x</f>')
|
||||
for value in items:
|
||||
self.check_output(f, value)
|
||||
self.check_output(f, lazystr(value))
|
||||
# Strings that have spaces to strip.
|
||||
items = (
|
||||
('<d> </d>', '<d></d>'),
|
||||
|
@ -121,6 +126,7 @@ class TestUtilsHtml(SimpleTestCase):
|
|||
)
|
||||
for value, output in items:
|
||||
self.check_output(f, value, output)
|
||||
self.check_output(f, lazystr(value), output)
|
||||
|
||||
def test_escapejs(self):
|
||||
f = html.escapejs
|
||||
|
@ -139,6 +145,7 @@ class TestUtilsHtml(SimpleTestCase):
|
|||
)
|
||||
for value, output in items:
|
||||
self.check_output(f, value, output)
|
||||
self.check_output(f, lazystr(value), output)
|
||||
|
||||
def test_smart_urlquote(self):
|
||||
quote = html.smart_urlquote
|
||||
|
|
|
@ -3,13 +3,12 @@ from __future__ import unicode_literals
|
|||
from django.template import Context, Template
|
||||
from django.test import SimpleTestCase
|
||||
from django.utils import html, six, text
|
||||
from django.utils.encoding import force_bytes, force_text
|
||||
from django.utils.functional import lazy
|
||||
from django.utils.encoding import force_bytes
|
||||
from django.utils.functional import lazy, lazystr
|
||||
from django.utils.safestring import (
|
||||
EscapeData, SafeData, mark_for_escaping, mark_safe,
|
||||
)
|
||||
|
||||
lazystr = lazy(force_text, six.text_type)
|
||||
lazybytes = lazy(force_bytes, bytes)
|
||||
|
||||
|
||||
|
|
|
@ -5,12 +5,9 @@ import json
|
|||
|
||||
from django.test import SimpleTestCase
|
||||
from django.utils import six, text
|
||||
from django.utils.encoding import force_text
|
||||
from django.utils.functional import lazy
|
||||
from django.utils.functional import lazystr
|
||||
from django.utils.translation import override
|
||||
|
||||
lazystr = lazy(force_text, six.text_type)
|
||||
|
||||
IS_WIDE_BUILD = (len('\U0001F4A9') == 1)
|
||||
|
||||
|
||||
|
@ -93,6 +90,8 @@ class TestUtilsText(SimpleTestCase):
|
|||
# Make a best effort to shorten to the desired length, but requesting
|
||||
# a length shorter than the ellipsis shouldn't break
|
||||
self.assertEqual('...', text.Truncator('asdf').chars(1))
|
||||
# Ensure that lazy strings are handled correctly
|
||||
self.assertEqual(text.Truncator(lazystr('The quick brown fox')).chars(12), 'The quick...')
|
||||
|
||||
def test_truncate_words(self):
|
||||
truncator = text.Truncator('The quick brown fox jumped over the lazy '
|
||||
|
@ -102,6 +101,9 @@ class TestUtilsText(SimpleTestCase):
|
|||
self.assertEqual('The quick brown fox...', truncator.words(4))
|
||||
self.assertEqual('The quick brown fox[snip]',
|
||||
truncator.words(4, '[snip]'))
|
||||
# Ensure that lazy strings are handled correctly
|
||||
truncator = text.Truncator(lazystr('The quick brown fox jumped over the lazy dog.'))
|
||||
self.assertEqual('The quick brown fox...', truncator.words(4))
|
||||
|
||||
def test_truncate_html_words(self):
|
||||
truncator = text.Truncator('<p id="par"><strong><em>The quick brown fox'
|
||||
|
@ -156,6 +158,7 @@ class TestUtilsText(SimpleTestCase):
|
|||
self.assertEqual(text.wrap(long_word, 20), long_word)
|
||||
self.assertEqual(text.wrap('a %s word' % long_word, 10),
|
||||
'a\n%s\nword' % long_word)
|
||||
self.assertEqual(text.wrap(lazystr(digits), 100), '1234 67 9')
|
||||
|
||||
def test_normalize_newlines(self):
|
||||
self.assertEqual(text.normalize_newlines("abc\ndef\rghi\r\n"),
|
||||
|
@ -163,6 +166,7 @@ class TestUtilsText(SimpleTestCase):
|
|||
self.assertEqual(text.normalize_newlines("\n\r\r\n\r"), "\n\n\n\n")
|
||||
self.assertEqual(text.normalize_newlines("abcdefghi"), "abcdefghi")
|
||||
self.assertEqual(text.normalize_newlines(""), "")
|
||||
self.assertEqual(text.normalize_newlines(lazystr("abc\ndef\rghi\r\n")), "abc\ndef\nghi\n")
|
||||
|
||||
def test_normalize_newlines_bytes(self):
|
||||
"""normalize_newlines should be able to handle bytes too"""
|
||||
|
@ -170,6 +174,12 @@ class TestUtilsText(SimpleTestCase):
|
|||
self.assertEqual(normalized, "abc\ndef\nghi\n")
|
||||
self.assertIsInstance(normalized, six.text_type)
|
||||
|
||||
def test_phone2numeric(self):
|
||||
numeric = text.phone2numeric('0800 flowers')
|
||||
self.assertEqual(numeric, '0800 3569377')
|
||||
lazy_numeric = lazystr(text.phone2numeric('0800 flowers'))
|
||||
self.assertEqual(lazy_numeric, '0800 3569377')
|
||||
|
||||
def test_slugify(self):
|
||||
items = (
|
||||
# given - expected - unicode?
|
||||
|
@ -195,10 +205,23 @@ class TestUtilsText(SimpleTestCase):
|
|||
]
|
||||
for value, output in items:
|
||||
self.assertEqual(text.unescape_entities(value), output)
|
||||
self.assertEqual(text.unescape_entities(lazystr(value)), output)
|
||||
|
||||
def test_unescape_string_literal(self):
|
||||
items = [
|
||||
('"abc"', 'abc'),
|
||||
("'abc'", 'abc'),
|
||||
('"a \"bc\""', 'a "bc"'),
|
||||
("'\'ab\' c'", "'ab' c"),
|
||||
]
|
||||
for value, output in items:
|
||||
self.assertEqual(text.unescape_string_literal(value), output)
|
||||
self.assertEqual(text.unescape_string_literal(lazystr(value)), output)
|
||||
|
||||
def test_get_valid_filename(self):
|
||||
filename = "^&'@{}[],$=!-#()%+~_123.txt"
|
||||
self.assertEqual(text.get_valid_filename(filename), "-_123.txt")
|
||||
self.assertEqual(text.get_valid_filename(lazystr(filename)), "-_123.txt")
|
||||
|
||||
def test_compress_sequence(self):
|
||||
data = [{'key': i} for i in range(10)]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue