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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 | from django.contrib.auth.models import User
from django.template import Template, Context
from django.test import TestCase
from django.conf import settings
from django.core.serializers import deserialize
from template_utils import functions
def render(src, ctx=None):
return Template(src).render(Context(ctx))
class TemplateTest(TestCase):
def setUp(self):
self.test_user = User.objects.create(username='tester',email='test')
def test_load(self):
render("{% load func_tools comparison %}")
def test_numeric(self):
t = """{% if_less 1 2 %}y{% endif_less %}{% if_less_or_equal 1 2 %}y{% endif_less_or_equal %}{% if_greater 2 1 %}n{% endif_greater %}{% if_greater_or_equal 1 1 %}y{% endif_greater_or_equal %}"""
self.assertEquals(render(t), u'yyny')
def test_set_tag(self):
t = "{% set src='import this' %}{{ src }}"
self.assertEquals(render(t), u'import this')
def test_del_tag(self):
t = "{% del test %}{{ test }}"
self.assertEquals(render(t,{'test': 'yup'}), u'')
def test_serialize(self):
t = "{% serialize json users %}"
json = render(t, {'users':User.objects.all()})
self.assertEquals(deserialize('json', json).next().object.username, 'tester')
def test_matches(self):
t = "{% if_matches 'hiya' '\w{4}' %}yup{% endif_matches %}"
self.assertEquals(render(t), u'yup')
def test_contains(self):
t = "{% if_contains 'team' 'i' %}yup{% endif_contains %}"
self.assertEquals(render(t), u'')
def test_divisible_by(self):
t = "{% if_divisible_by 150 5 %}buzz{% endif_divisible_by %}"
self.assertEquals(render(t), u'buzz')
def test_startswith(self):
t = "{% if_startswith 'python' 'p' %}yup{% endif_startswith %}"
self.assertEquals(render(t), u'yup')
def test_subset(self):
t = "{% if_subset l1 l2 %}yup{% endif_subset %}"
self.assertEquals(render(t, {'l1':[2,3], 'l2':range(5)}), u'yup')
def test_negate(self):
t = "{% if_startswith 'python' 'p' negate %}yup{% endif_startswith %}"
self.assertEquals(render(t), u'')
def test_negate_else(self):
t = "{% if_startswith 'python' 'p' negate %}yup{% else %}nope{% endif_startswith %}"
self.assertEquals(render(t), u'nope')
def test_ctx_varname(self):
t = "{% serialize json users as jsoncontent %}{{ jsoncontent|safe }}"
json = render(t, {'users':User.objects.all()})
self.assertEquals(deserialize('json', json).next().object.username, 'tester')
def test_hassetting(self):
t = "{% if_setting 'DEBUG' %}debug{% endif_setting %}"
self.assertEquals(render(t), u'debug')
def test_hash(self):
ctx = {'foo':'bar'}
sha1 = '62cdb7020ff920e5aa642c3d4066950dd1f01f4d'
self.assertEqual(render('{{ foo|sha1 }}{% sha1 foo %}', ctx), sha1*2)
md5 = '37b51d194a7513e45b56f6524f2d51f2'
self.assertEqual(render('{{ foo|md5 }}{% md5 foo %}', ctx), md5*2)
# To test this next one:
# get markdown (pip install markdown)
# add 'django.contrib.markup' to your INSTALLED_APPS
# set DEFAULT_BUILTIN_TAGS = ('django.contrib.markup' ,) in your settings
if hasattr(settings, 'DEFAULT_BUILTIN_TAGS') and 'django.contrib.markup' in settings.INSTALLED_APPS:
def test_defaults(self):
t = "{{ src|markdown }}"
self.assertEquals(render(t, {'src':'`i`'}), u'<p><code>i</code></p>')
|