from django.template.defaultfilters import urlizetrunc from django.test import SimpleTestCase from django.utils.safestring import mark_safe from ..utils import setup class UrlizetruncTests(SimpleTestCase): @setup({'urlizetrunc01': '{% autoescape off %}{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}{% endautoescape %}'}) def test_urlizetrunc01(self): output = self.engine.render_to_string( 'urlizetrunc01', { 'a': '"Unsafe" http://example.com/x=&y=', 'b': mark_safe('"Safe" http://example.com?x=&y='), }, ) self.assertEqual( output, '"Unsafe" http:... ' '"Safe" http:...' ) @setup({'urlizetrunc02': '{{ a|urlizetrunc:"8" }} {{ b|urlizetrunc:"8" }}'}) def test_urlizetrunc02(self): output = self.engine.render_to_string( 'urlizetrunc02', { 'a': '"Unsafe" http://example.com/x=&y=', 'b': mark_safe('"Safe" http://example.com?x=&y='), }, ) self.assertEqual( output, '"Unsafe" http:... ' '"Safe" http:...' ) class FunctionTests(SimpleTestCase): def test_truncate(self): uri = 'http://31characteruri.com/test/' self.assertEqual(len(uri), 31) self.assertEqual( urlizetrunc(uri, 31), '' 'http://31characteruri.com/test/', ) self.assertEqual( urlizetrunc(uri, 30), '' 'http://31characteruri.com/t...', ) self.assertEqual( urlizetrunc(uri, 2), '...', ) def test_overtruncate(self): self.assertEqual( urlizetrunc('http://short.com/', 20), 'http://short.com/', ) def test_query_string(self): self.assertEqual( urlizetrunc('http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=', 20), 'http://www.google...', ) def test_non_string_input(self): self.assertEqual(urlizetrunc(123, 1), '123') def test_autoescape(self): self.assertEqual( urlizetrunc('foobarbuz', 10), 'foo<a href=" google.com ">bar</a>buz' ) def test_autoescape_off(self): self.assertEqual( urlizetrunc('foobarbuz', 9, autoescape=False), 'foogoogle... ">barbuz', )