1# -*- coding: utf-8 -*- 2import unittest 3from bottle import Jinja2Template, jinja2_template, jinja2_view, touni 4from tools import warn 5 6 7class TestJinja2Template(unittest.TestCase): 8 9 def test_string(self): 10 """ Templates: Jinja2 string""" 11 t = Jinja2Template('start {{var}} end').render(var='var') 12 self.assertEqual('start var end', ''.join(t)) 13 14 def test_file(self): 15 """ Templates: Jinja2 file""" 16 t = Jinja2Template(name='./views/jinja2_simple.tpl').render(var='var') 17 self.assertEqual('start var end', ''.join(t)) 18 19 def test_name(self): 20 """ Templates: Jinja2 lookup by name """ 21 t = Jinja2Template(name='jinja2_simple', lookup=['./views/']).render(var='var') 22 self.assertEqual('start var end', ''.join(t)) 23 24 def test_notfound(self): 25 """ Templates: Unavailable templates""" 26 self.assertRaises(Exception, Jinja2Template, name="abcdef") 27 28 def test_error(self): 29 """ Templates: Exceptions""" 30 self.assertRaises(Exception, Jinja2Template, '{% for badsyntax') 31 32 def test_inherit(self): 33 """ Templates: Jinja2 lookup and inherience """ 34 t = Jinja2Template(name='jinja2_inherit', lookup=['./views/']).render() 35 self.assertEqual('begin abc end', ''.join(t)) 36 37 def test_custom_filters(self): 38 """Templates: jinja2 custom filters """ 39 from bottle import jinja2_template as template 40 settings = dict(filters = {"star": lambda var: touni("").join((touni('*'), var, touni('*')))}) 41 t = Jinja2Template("start {{var|star}} end", **settings) 42 self.assertEqual("start *var* end", t.render(var="var")) 43 44 def test_custom_tests(self): 45 """Templates: jinja2 custom tests """ 46 from bottle import jinja2_template as template 47 TEMPL = touni("{% if var is even %}gerade{% else %}ungerade{% endif %}") 48 settings = dict(tests={"even": lambda x: False if x % 2 else True}) 49 t = Jinja2Template(TEMPL, **settings) 50 self.assertEqual("gerade", t.render(var=2)) 51 self.assertEqual("ungerade", t.render(var=1)) 52 53 def test_template_shortcut(self): 54 result = jinja2_template('start {{var}} end', var='middle') 55 self.assertEqual(touni('start middle end'), result) 56 57 def test_view_decorator(self): 58 @jinja2_view('start {{var}} end') 59 def test(): 60 return dict(var='middle') 61 self.assertEqual(touni('start middle end'), test()) 62 63 64try: 65 import jinja2 66except ImportError: 67 warn("No Jinja2 template support. Skipping tests.") 68 del TestJinja2Template 69 70if __name__ == '__main__': #pragma: no cover 71 unittest.main() 72 73