Code

Ticket #1919: 1919-1.diff

File 1919-1.diff, 2.5 KB (added by mattmcc, 7 years ago)

Add a regression test

Line 
1Index: django/utils/text.py
2===================================================================
3--- django/utils/text.py        (revision 6252)
4+++ django/utils/text.py        (working copy)
5@@ -36,16 +36,17 @@
6     return u''.join(_generator())
7 wrap = allow_lazy(wrap, unicode)
8 
9+word_re = re.compile(r'((?:\*|_)*\w+(?:\*|_)*)',re.UNICODE)
10 def truncate_words(s, num):
11-    "Truncates a string after a certain number of words."
12+    "Truncates a string after a certain number of words, preserving whites."
13     s = force_unicode(s)
14     length = int(num)
15-    words = s.split()
16-    if len(words) > length:
17-        words = words[:length]
18+    words = word_re.split(s,length)
19+    if len(words) > (2*length):
20+        words = words[:-1]
21         if not words[-1].endswith('...'):
22-            words.append('...')
23-    return u' '.join(words)
24+            words.append(' ...')
25+    return u''.join(words)
26 truncate_words = allow_lazy(truncate_words, unicode)
27 
28 def truncate_html_words(s, num):
29Index: tests/regressiontests/templates/tests.py
30===================================================================
31--- tests/regressiontests/templates/tests.py    (revision 6252)
32+++ tests/regressiontests/templates/tests.py    (working copy)
33@@ -781,6 +781,24 @@
34             'timeuntil04' : ('{{ a|timeuntil:b }}', {'a':NOW - timedelta(days=1), 'b':NOW - timedelta(days=2)}, '1 day'),
35             'timeuntil05' : ('{{ a|timeuntil:b }}', {'a':NOW - timedelta(days=2), 'b':NOW - timedelta(days=2, minutes=1)}, '1 minute'),
36 
37+            # TRUNCATEWORDS TAG ################################################
38+            # Ensure that newlines are preserved
39+            'truncatewords01': ('{{ var|truncatewords:4 }}',
40+                                {'var': """
41+                                        Hello,
42+                                        boys.
43+                                        How
44+                                        are
45+                                        you
46+                                        gentlemen.
47+                                        """},
48+                                        """
49+                                        Hello,
50+                                        boys.
51+                                        How
52+                                        are ..."""
53+                                        ),
54+
55             ### URL TAG ########################################################
56             # Successes
57             'url01' : ('{% url regressiontests.templates.views.client client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'),