Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/tests/template_tests/filter_tests/test_join.py
blob: 12d2f7257e88222b507d75a53ae9be2713546f23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from django.template.defaultfilters import join
from django.test import SimpleTestCase
from django.utils.safestring import mark_safe

from ..utils import setup


class JoinTests(SimpleTestCase):

    @setup({'join01': '{{ a|join:", " }}'})
    def test_join01(self):
        output = self.engine.render_to_string('join01', {'a': ['alpha', 'beta & me']})
        self.assertEqual(output, 'alpha, beta & me')

    @setup({'join02': '{% autoescape off %}{{ a|join:", " }}{% endautoescape %}'})
    def test_join02(self):
        output = self.engine.render_to_string('join02', {'a': ['alpha', 'beta & me']})
        self.assertEqual(output, 'alpha, beta & me')

    @setup({'join03': '{{ a|join:" & " }}'})
    def test_join03(self):
        output = self.engine.render_to_string('join03', {'a': ['alpha', 'beta & me']})
        self.assertEqual(output, 'alpha & beta & me')

    @setup({'join04': '{% autoescape off %}{{ a|join:" & " }}{% endautoescape %}'})
    def test_join04(self):
        output = self.engine.render_to_string('join04', {'a': ['alpha', 'beta & me']})
        self.assertEqual(output, 'alpha & beta & me')

    # #11377 Test that joining with unsafe joiners doesn't result in
    # unsafe strings
    @setup({'join05': '{{ a|join:var }}'})
    def test_join05(self):
        output = self.engine.render_to_string('join05', {'a': ['alpha', 'beta & me'], 'var': ' & '})
        self.assertEqual(output, 'alpha & beta & me')

    @setup({'join06': '{{ a|join:var }}'})
    def test_join06(self):
        output = self.engine.render_to_string('join06', {'a': ['alpha', 'beta & me'], 'var': mark_safe(' & ')})
        self.assertEqual(output, 'alpha & beta & me')

    @setup({'join07': '{{ a|join:var|lower }}'})
    def test_join07(self):
        output = self.engine.render_to_string('join07', {'a': ['Alpha', 'Beta & me'], 'var': ' & '})
        self.assertEqual(output, 'alpha & beta & me')

    @setup({'join08': '{{ a|join:var|lower }}'})
    def test_join08(self):
        output = self.engine.render_to_string('join08', {'a': ['Alpha', 'Beta & me'], 'var': mark_safe(' & ')})
        self.assertEqual(output, 'alpha & beta & me')


class FunctionTests(SimpleTestCase):

    def test_list(self):
        self.assertEqual(join([0, 1, 2], 'glue'), '0glue1glue2')

    def test_autoescape(self):
        self.assertEqual(
            join(['<a>', '<img>', '</a>'], '<br>'),
            '&lt;a&gt;&lt;br&gt;&lt;img&gt;&lt;br&gt;&lt;/a&gt;',
        )

    def test_autoescape_off(self):
        self.assertEqual(
            join(['<a>', '<img>', '</a>'], '<br>', autoescape=False),
            '<a>&lt;br&gt;<img>&lt;br&gt;</a>',
        )