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><br><img><br></a>', ) def test_autoescape_off(self): self.assertEqual( join(['', '', ''], '
', autoescape=False), '<br><br>', )