You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
jinja2.testsuite.debug
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Tests the debug system.
|
|
|
|
:copyright: (c) 2010 by the Jinja Team.
|
|
:license: BSD, see LICENSE for more details.
|
|
"""
|
|
import unittest
|
|
|
|
from jinja2.testsuite import JinjaTestCase, filesystem_loader
|
|
|
|
from jinja2 import Environment, TemplateSyntaxError
|
|
|
|
env = Environment(loader=filesystem_loader)
|
|
|
|
|
|
class DebugTestCase(JinjaTestCase):
|
|
|
|
def test_runtime_error(self):
|
|
def test():
|
|
tmpl.render(fail=lambda: 1 / 0)
|
|
tmpl = env.get_template('broken.html')
|
|
self.assert_traceback_matches(test, r'''
|
|
File ".*?broken.html", line 2, in (top-level template code|<module>)
|
|
\{\{ fail\(\) \}\}
|
|
File ".*?debug.pyc?", line \d+, in <lambda>
|
|
tmpl\.render\(fail=lambda: 1 / 0\)
|
|
ZeroDivisionError: (int(eger)? )?division (or modulo )?by zero
|
|
''')
|
|
|
|
def test_syntax_error(self):
|
|
# XXX: the .*? is necessary for python3 which does not hide
|
|
# some of the stack frames we don't want to show. Not sure
|
|
# what's up with that, but that is not that critical. Should
|
|
# be fixed though.
|
|
self.assert_traceback_matches(lambda: env.get_template('syntaxerror.html'), r'''(?sm)
|
|
File ".*?syntaxerror.html", line 4, in (template|<module>)
|
|
\{% endif %\}.*?
|
|
(jinja2\.exceptions\.)?TemplateSyntaxError: Encountered unknown tag 'endif'. Jinja was looking for the following tags: 'endfor' or 'else'. The innermost block that needs to be closed is 'for'.
|
|
''')
|
|
|
|
def test_regular_syntax_error(self):
|
|
def test():
|
|
raise TemplateSyntaxError('wtf', 42)
|
|
self.assert_traceback_matches(test, r'''
|
|
File ".*debug.pyc?", line \d+, in test
|
|
raise TemplateSyntaxError\('wtf', 42\)
|
|
(jinja2\.exceptions\.)?TemplateSyntaxError: wtf
|
|
line 42''')
|
|
|
|
|
|
def suite():
|
|
suite = unittest.TestSuite()
|
|
suite.addTest(unittest.makeSuite(DebugTestCase))
|
|
return suite
|