# -*- coding: utf-8 -*- import sys import unittest from mako import exceptions, util from mako.template import Template from mako.lookup import TemplateLookup from util import result_lines class ExceptionsTest(unittest.TestCase): def test_html_error_template(self): """test the html_error_template""" code = """ % i = 0 """ try: template = Template(code) template.render_unicode() except exceptions.CompileException, ce: html_error = exceptions.html_error_template().render_unicode() assert ("CompileException: Fragment 'i = 0' is not a partial " "control statement") in html_error assert '' in html_error html_error_stripped = html_error.strip() assert html_error_stripped.startswith('') assert html_error_stripped.endswith('') not_full = exceptions.html_error_template().render_unicode(full=False) assert '' not in not_full assert '' not in not_full assert '' in not_full no_css = exceptions.html_error_template().render_unicode(css=False) assert '' not in no_css else: assert False, ("This function should trigger a CompileException, " "but didn't") def test_utf8_html_error_template(self): """test the html_error_template with a Template containing utf8 chars""" if util.py3k: code = """# -*- coding: utf-8 -*- % if 2 == 2: /an error ${'привет'} % endif """ else: code = """# -*- coding: utf-8 -*- % if 2 == 2: /an error ${u'привет'} % endif """ try: template = Template(code) template.render_unicode() except exceptions.CompileException, ce: html_error = exceptions.html_error_template().render() assert ("CompileException: Fragment 'if 2 == 2: /an " "error' is not a partial control " "statement at line: 2 char: 1") in html_error.decode('utf-8') if util.py3k: assert u"3 ${'привет'}".encode(sys.getdefaultencoding(), 'htmlentityreplace') in html_error else: assert u"3 ${u'привет'}".encode(sys.getdefaultencoding(), 'htmlentityreplace') in html_error else: assert False, ("This function should trigger a CompileException, " "but didn't") def test_py_utf8_html_error_template(self): try: foo = u'日本' raise RuntimeError('test') except: html_error = exceptions.html_error_template().render() if util.py3k: assert 'RuntimeError: test' in html_error.decode('utf-8') assert u"foo = '日本'" in html_error.decode('utf-8') else: assert 'RuntimeError: test' in html_error assert "foo = u'日本'" in html_error def test_py_unicode_error_html_error_template(self): try: raise RuntimeError(u'日本') except: html_error = exceptions.html_error_template().render() assert u"RuntimeError: 日本".encode('ascii', 'ignore') in html_error def test_format_exceptions(self): l = TemplateLookup(format_exceptions=True) l.put_string("foo.html", """ <%inherit file="base.html"/> ${foobar} """) l.put_string("base.html", """ ${self.body()} """) assert '