diff options
29 files changed, 486 insertions, 289 deletions
diff --git a/mako/util.py b/mako/util.py index 1f9f3d4..472535d 100644 --- a/mako/util.py +++ b/mako/util.py @@ -5,17 +5,17 @@ # the MIT License: http://www.opensource.org/licenses/mit-license.php import sys -try: - Set = set -except: - import sets - Set = sets.Set +Set = set try: from cStringIO import StringIO except: from StringIO import StringIO +py3k = getattr(sys, 'py3kwarning', False) or sys.version_info >= (3, 0) +jython = sys.platform.startswith('java') +win32 = sys.platform.startswith('win') + import codecs, re, weakref, os, time try: @@ -25,11 +25,21 @@ except ImportError: import dummy_threading as threading import dummy_thread as thread -if sys.platform.startswith('win') or sys.platform.startswith('java'): +if win32 or jython: time_func = time.clock else: time_func = time.time +def function_named(fn, name): + """Return a function with a given __name__. + + Will assign to __name__ and return the original function if possible on + the Python implementation, otherwise a new function will be constructed. + + """ + fn.__name__ = name + return fn + def verify_directory(dir): """create and/or verify a filesystem directory.""" diff --git a/test/__init__.py b/test/__init__.py index e69de29..c8c2a4d 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -0,0 +1,65 @@ +from mako.template import Template +import unittest, os +from mako.util import function_named, py3k + +from nose import SkipTest + + +template_base = os.path.join(os.path.dirname(__file__), 'templates') +module_base = os.path.join(template_base, 'modules') + +class TemplateTest(unittest.TestCase): + + def _file_template(self, filename, **kw): + filepath = self._file_path(filename) + return Template(uri=filename, filename=filepath, module_directory=module_base, **kw) + + def _file_path(self, filename): + return os.path.join(template_base, filename) + + def _do_file_test(self, filename, expected, filters=None, + unicode_=True, template_args=None, **kw): + t1 = self._file_template(filename, **kw) + self._do_test(t1, expected, filters=filters, unicode_=unicode_, template_args=template_args) + + def _do_memory_test(self, source, expected, filters=None, + unicode_=True, template_args=None, **kw): + t1 = Template(text=source, **kw) + self._do_test(t1, expected, filters=filters, unicode_=unicode_, template_args=template_args) + + def _do_test(self, template, expected, filters=None, template_args=None, unicode_=True): + if template_args is None: + template_args = {} + if unicode_: + output = template.render_unicode(**template_args) + else: + output = template.render(**template_args) + + if filters: + output = filters(output) + eq_(output, expected) + +def eq_(a, b, msg=None): + """Assert a == b, with repr messaging on failure.""" + assert a == b, msg or "%r != %r" % (a, b) + +def teardown(): + import shutil + shutil.rmtree(module_base, True) + + +def skip_if(predicate, reason=None): + """Skip a test if predicate is true.""" + reason = reason or predicate.__name__ + + def decorate(fn): + fn_name = fn.__name__ + def maybe(*args, **kw): + if predicate(): + msg = "'%s' skipped: %s" % ( + fn_name, reason) + raise SkipTest(msg) + else: + return fn(*args, **kw) + return function_named(maybe, fn_name) + return decorate diff --git a/test/templates/badbom.html b/test/templates/badbom.html new file mode 100644 index 0000000..8837abe --- /dev/null +++ b/test/templates/badbom.html @@ -0,0 +1,2 @@ +## -*- coding: ascii -*- +Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »
\ No newline at end of file diff --git a/test/templates/bom.html b/test/templates/bom.html new file mode 100644 index 0000000..e62cadd --- /dev/null +++ b/test/templates/bom.html @@ -0,0 +1 @@ +Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »
\ No newline at end of file diff --git a/test/templates/bommagic.html b/test/templates/bommagic.html new file mode 100644 index 0000000..d5da799 --- /dev/null +++ b/test/templates/bommagic.html @@ -0,0 +1,2 @@ +## -*- coding: utf-8 -*- +Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »
\ No newline at end of file diff --git a/test_htdocs/chs_unicode.html b/test/templates/chs_unicode.html index 6e7c090..6e7c090 100644 --- a/test_htdocs/chs_unicode.html +++ b/test/templates/chs_unicode.html diff --git a/test_htdocs/chs_utf8.html b/test/templates/chs_utf8.html index f9a7035..f9a7035 100644 --- a/test_htdocs/chs_utf8.html +++ b/test/templates/chs_utf8.html diff --git a/test_htdocs/crlf.html b/test/templates/crlf.html index d2620db..d2620db 100644 --- a/test_htdocs/crlf.html +++ b/test/templates/crlf.html diff --git a/test/templates/foo/modtest.html.py b/test/templates/foo/modtest.html.py new file mode 100644 index 0000000..c5fb76a --- /dev/null +++ b/test/templates/foo/modtest.html.py @@ -0,0 +1,25 @@ +from mako import runtime, filters, cache +UNDEFINED = runtime.UNDEFINED +__M_dict_builtin = dict +__M_locals_builtin = locals +_magic_number = 5 +_modified_time = 1267565427.7968459 +_template_filename='/Users/classic/dev/mako/test/templates/modtest.html' +_template_uri='/modtest.html' +_template_cache=cache.Cache(__name__, _modified_time) +_source_encoding=None +_exports = [] + + +def render_body(context,**pageargs): + context.caller_stack._push_frame() + try: + __M_locals = __M_dict_builtin(pageargs=pageargs) + __M_writer = context.writer() + # SOURCE LINE 1 + __M_writer(u'this is a test') + return '' + finally: + context.caller_stack._pop_frame() + + diff --git a/test_htdocs/gettext.mako b/test/templates/gettext.mako index 8b7dfbb..8b7dfbb 100644 --- a/test_htdocs/gettext.mako +++ b/test/templates/gettext.mako diff --git a/test/templates/index.html b/test/templates/index.html new file mode 100644 index 0000000..591e380 --- /dev/null +++ b/test/templates/index.html @@ -0,0 +1 @@ +this is index
\ No newline at end of file diff --git a/test_htdocs/internationalization.html b/test/templates/internationalization.html index 12ae25b..12ae25b 100644 --- a/test_htdocs/internationalization.html +++ b/test/templates/internationalization.html diff --git a/test/templates/modtest.html b/test/templates/modtest.html new file mode 100644 index 0000000..a8a9406 --- /dev/null +++ b/test/templates/modtest.html @@ -0,0 +1 @@ +this is a test
\ No newline at end of file diff --git a/test_htdocs/read_unicode.html b/test/templates/read_unicode.html index 50f00c3..50f00c3 100644 --- a/test_htdocs/read_unicode.html +++ b/test/templates/read_unicode.html diff --git a/test/templates/subdir/foo/modtest.html.py b/test/templates/subdir/foo/modtest.html.py new file mode 100644 index 0000000..ca6f37b --- /dev/null +++ b/test/templates/subdir/foo/modtest.html.py @@ -0,0 +1,25 @@ +from mako import runtime, filters, cache +UNDEFINED = runtime.UNDEFINED +__M_dict_builtin = dict +__M_locals_builtin = locals +_magic_number = 5 +_modified_time = 1267565427.799504 +_template_filename='/Users/classic/dev/mako/test/templates/subdir/modtest.html' +_template_uri='/subdir/modtest.html' +_template_cache=cache.Cache(__name__, _modified_time) +_source_encoding=None +_exports = [] + + +def render_body(context,**pageargs): + context.caller_stack._push_frame() + try: + __M_locals = __M_dict_builtin(pageargs=pageargs) + __M_writer = context.writer() + # SOURCE LINE 1 + __M_writer(u'this is a test') + return '' + finally: + context.caller_stack._pop_frame() + + diff --git a/test/templates/subdir/incl.html b/test/templates/subdir/incl.html new file mode 100644 index 0000000..6505b7c --- /dev/null +++ b/test/templates/subdir/incl.html @@ -0,0 +1,2 @@ + + this is include 2 diff --git a/test/templates/subdir/index.html b/test/templates/subdir/index.html new file mode 100644 index 0000000..5b878b8 --- /dev/null +++ b/test/templates/subdir/index.html @@ -0,0 +1,3 @@ + + this is sub index + <%include file="incl.html"/> diff --git a/test/templates/subdir/modtest.html b/test/templates/subdir/modtest.html new file mode 100644 index 0000000..a8a9406 --- /dev/null +++ b/test/templates/subdir/modtest.html @@ -0,0 +1 @@ +this is a test
\ No newline at end of file diff --git a/test/templates/unicode.html b/test/templates/unicode.html new file mode 100644 index 0000000..d9a583e --- /dev/null +++ b/test/templates/unicode.html @@ -0,0 +1,2 @@ +## -*- coding: utf-8 -*- +Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »
\ No newline at end of file diff --git a/test/templates/unicode_code.html b/test/templates/unicode_code.html new file mode 100644 index 0000000..9c2fae1 --- /dev/null +++ b/test/templates/unicode_code.html @@ -0,0 +1,7 @@ +## -*- coding: utf-8 -*- +<% + x = u"drôle de petit voix m’a réveillé." +%> +% if x==u"drôle de petit voix m’a réveillé.": + hi, ${x} +% endif diff --git a/test/templates/unicode_expr.html b/test/templates/unicode_expr.html new file mode 100644 index 0000000..9b3878a --- /dev/null +++ b/test/templates/unicode_expr.html @@ -0,0 +1,2 @@ +## -*- coding: utf-8 -*- +${u"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"} diff --git a/test/templates/unicode_runtime_error.html b/test/templates/unicode_runtime_error.html new file mode 100644 index 0000000..6a4fd46 --- /dev/null +++ b/test/templates/unicode_runtime_error.html @@ -0,0 +1,2 @@ +## -*- coding: utf-8 -*- +<% print 'Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »' + int(5/0) %>
\ No newline at end of file diff --git a/test/templates/unicode_syntax_error.html b/test/templates/unicode_syntax_error.html new file mode 100644 index 0000000..c60f8fe --- /dev/null +++ b/test/templates/unicode_syntax_error.html @@ -0,0 +1,2 @@ +## -*- coding: utf-8 -*- +<% print 'Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! » %>
\ No newline at end of file diff --git a/test/test_babelplugin.py b/test/test_babelplugin.py index 1a7f9d0..2fea024 100644 --- a/test/test_babelplugin.py +++ b/test/test_babelplugin.py @@ -1,41 +1,42 @@ -import unittest + +from test import TemplateTest, template_base, skip_if try: import babel - - import os from mako.ext.babelplugin import extract +except: + babel = None + +import os - class ExtractMakoTestCase(unittest.TestCase): - def test_extract(self): - mako_tmpl = open(os.path.join('test_htdocs', 'gettext.mako')) - messages = list(extract(mako_tmpl, {'_': None, 'gettext': None, - 'ungettext': (1, 2)}, - ['TRANSLATOR:'], {})) - expected = \ - [(1, '_', u'Page arg 1', []), - (1, '_', u'Page arg 2', []), - (10, 'gettext', u'Begin', []), - (14, '_', u'Hi there!', [u'TRANSLATOR: Hi there!']), - (19, '_', u'Hello', []), - (22, '_', u'Welcome', []), - (25, '_', u'Yo', []), - (36, '_', u'The', [u'TRANSLATOR: Ensure so and', u'so, thanks']), - (36, 'ungettext', (u'bunny', u'bunnies', None), []), - (41, '_', u'Goodbye', [u'TRANSLATOR: Good bye']), - (44, '_', u'Babel', []), - (45, 'ungettext', (u'hella', u'hellas', None), []), - (62, '_', u'Goodbye, really!', [u'TRANSLATOR: HTML comment']), - (65, '_', u'P.S. byebye', []), - (71, '_', u'Top', []), - (77, '_', u'foo', []), - (77, '_', u'baz', []), - (79, '_', u'bar', []) - ] - self.assertEqual(expected, messages) -except ImportError: - import warnings - warnings.warn('babel not installed: skipping babelplugin test', - RuntimeWarning, 1) +class ExtractMakoTestCase(TemplateTest): + @skip_if(lambda: not babel, 'babel not installed: skipping babelplugin test') + + def test_extract(self): + mako_tmpl = open(os.path.join(template_base, 'gettext.mako')) + messages = list(extract(mako_tmpl, {'_': None, 'gettext': None, + 'ungettext': (1, 2)}, + ['TRANSLATOR:'], {})) + expected = \ + [(1, '_', u'Page arg 1', []), + (1, '_', u'Page arg 2', []), + (10, 'gettext', u'Begin', []), + (14, '_', u'Hi there!', [u'TRANSLATOR: Hi there!']), + (19, '_', u'Hello', []), + (22, '_', u'Welcome', []), + (25, '_', u'Yo', []), + (36, '_', u'The', [u'TRANSLATOR: Ensure so and', u'so, thanks']), + (36, 'ungettext', (u'bunny', u'bunnies', None), []), + (41, '_', u'Goodbye', [u'TRANSLATOR: Good bye']), + (44, '_', u'Babel', []), + (45, 'ungettext', (u'hella', u'hellas', None), []), + (62, '_', u'Goodbye, really!', [u'TRANSLATOR: HTML comment']), + (65, '_', u'P.S. byebye', []), + (71, '_', u'Top', []), + (77, '_', u'foo', []), + (77, '_', u'baz', []), + (79, '_', u'bar', []) + ] + self.assertEqual(expected, messages) diff --git a/test/test_cache.py b/test/test_cache.py index ced515e..11469f5 100644 --- a/test/test_cache.py +++ b/test/test_cache.py @@ -3,15 +3,14 @@ from mako.lookup import TemplateLookup from mako import lookup import shutil, unittest, os from util import result_lines +from test import TemplateTest, template_base, module_base -if not os.access('./test_htdocs', os.F_OK): - os.mkdir('./test_htdocs') -for cache_dir in ('container_dbm', 'container_dbm_lock', 'container_file', - 'container_file_lock'): - fullpath = os.path.join('./test_htdocs', cache_dir) - if os.path.exists(fullpath): - shutil.rmtree(fullpath) - +try: + import beaker +except: + from nose import SkipTest + raise SkipTest("Beaker is required for these tests.") + class MockCache(object): def __init__(self, realcache): self.realcache = realcache @@ -22,7 +21,7 @@ class MockCache(object): self.kwargs.pop('defname', None) return self.realcache.get(key, **kwargs) -class CacheTest(unittest.TestCase): +class CacheTest(TemplateTest): def test_def(self): t = Template(""" <%! @@ -177,7 +176,7 @@ class CacheTest(unittest.TestCase): assert m.kwargs == {} def test_fileargs_implicit(self): - l = lookup.TemplateLookup(module_directory='./test_htdocs') + l = lookup.TemplateLookup(module_directory=module_base) l.put_string("test",""" <%! callcount = [0] @@ -202,25 +201,25 @@ class CacheTest(unittest.TestCase): 'this is foo', 'callcount: [1]', ] - assert m.kwargs == {'type':'dbm', 'data_dir':'./test_htdocs'} + assert m.kwargs == {'type':'dbm', 'data_dir':module_base} def test_fileargs_deftag(self): t = Template(""" - <%! + <%%! callcount = [0] - %> - <%def name="foo()" cached="True" cache_type='file' cache_dir='./test_htdocs'> + %%> + <%%def name="foo()" cached="True" cache_type='file' cache_dir='%s'> this is foo - <% + <%% callcount[0] += 1 - %> - </%def> + %%> + </%%def> ${foo()} ${foo()} ${foo()} callcount: ${callcount} -""") +""" % module_base) m = self._install_mock_cache(t) assert result_lines(t.render()) == [ 'this is foo', @@ -228,26 +227,26 @@ class CacheTest(unittest.TestCase): 'this is foo', 'callcount: [1]', ] - assert m.kwargs == {'type':'file','data_dir':'./test_htdocs'} + assert m.kwargs == {'type':'file','data_dir':module_base} def test_fileargs_pagetag(self): t = Template(""" - <%page cache_dir='./test_htdocs' cache_type='dbm'/> - <%! + <%%page cache_dir='%s' cache_type='dbm'/> + <%%! callcount = [0] - %> - <%def name="foo()" cached="True"> + %%> + <%%def name="foo()" cached="True"> this is foo - <% + <%% callcount[0] += 1 - %> - </%def> + %%> + </%%def> ${foo()} ${foo()} ${foo()} callcount: ${callcount} -""") +""" % module_base) m = self._install_mock_cache(t) assert result_lines(t.render()) == [ 'this is foo', @@ -255,30 +254,30 @@ class CacheTest(unittest.TestCase): 'this is foo', 'callcount: [1]', ] - assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'dbm'} + assert m.kwargs == {'data_dir':module_base, 'type':'dbm'} def test_args_complete(self): t = Template(""" - <%def name="foo()" cached="True" cache_timeout="30" cache_dir="./test_htdocs" cache_type="file" cache_key='somekey'> + <%%def name="foo()" cached="True" cache_timeout="30" cache_dir="%s" cache_type="file" cache_key='somekey'> this is foo - </%def> + </%%def> ${foo()} -""") +""" % module_base) m = self._install_mock_cache(t) t.render() - assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file', 'expiretime':30} + assert m.kwargs == {'data_dir':module_base, 'type':'file', 'expiretime':30} t2 = Template(""" - <%page cached="True" cache_timeout="30" cache_dir="./test_htdocs" cache_type="file" cache_key='somekey'/> + <%%page cached="True" cache_timeout="30" cache_dir="%s" cache_type="file" cache_key='somekey'/> hi - """) + """ % module_base) m = self._install_mock_cache(t2) t2.render() - assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file', 'expiretime':30} + assert m.kwargs == {'data_dir':module_base, 'type':'file', 'expiretime':30} def test_fileargs_lookup(self): - l = lookup.TemplateLookup(cache_dir='./test_htdocs', cache_type='file') + l = lookup.TemplateLookup(cache_dir=module_base, cache_type='file') l.put_string("test",""" <%! callcount = [0] @@ -304,7 +303,7 @@ class CacheTest(unittest.TestCase): 'this is foo', 'callcount: [1]', ] - assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file'} + assert m.kwargs == {'data_dir':module_base, 'type':'file'} def test_buffered(self): t = Template(""" @@ -371,15 +370,15 @@ class CacheTest(unittest.TestCase): def test_invalidate(self): t = Template(""" - <%def name="foo()" cached="True"> + <%%def name="foo()" cached="True"> foo: ${x} - </%def> + </%%def> - <%def name="bar()" cached="True" cache_type='dbm' cache_dir='./test_htdocs'> + <%%def name="bar()" cached="True" cache_type='dbm' cache_dir='%s'> bar: ${x} - </%def> + </%%def> ${foo()} ${bar()} - """) + """ % module_base) assert result_lines(t.render(x=1)) == ["foo: 1", "bar: 1"] assert result_lines(t.render(x=2)) == ["foo: 1", "bar: 1"] t.cache.invalidate_def('foo') @@ -388,10 +387,10 @@ class CacheTest(unittest.TestCase): assert result_lines(t.render(x=4)) == ["foo: 3", "bar: 4"] t = Template(""" - <%page cached="True" cache_type="dbm" cache_dir="./test_htdocs"/> + <%%page cached="True" cache_type="dbm" cache_dir="%s"/> page: ${x} - """) + """ % module_base) assert result_lines(t.render(x=1)) == ["page: 1"] assert result_lines(t.render(x=2)) == ["page: 1"] t.cache.invalidate_body() diff --git a/test/test_lexer.py b/test/test_lexer.py index 21c18a2..d934860 100644 --- a/test/test_lexer.py +++ b/test/test_lexer.py @@ -5,8 +5,10 @@ from mako import exceptions from util import flatten_result, result_lines from mako.template import Template import re +from test import TemplateTest, template_base, skip_if -class LexerTest(unittest.TestCase): + +class LexerTest(TemplateTest): def test_text_and_tag(self): template = """ <b>Hello world</b> @@ -419,7 +421,7 @@ text text la la assert repr(nodes) == r"""TemplateNode({}, [Text(u'\n', (1, 1)), ControlLine(u'if', u'if x: #comment', False, (2, 1)), Text(u' hi\n', (3, 1)), ControlLine(u'else', u'else: #next', False, (4, 1)), Text(u' hi\n', (5, 1)), ControlLine(u'if', u'endif #end', True, (6, 1))])""" def test_crlf(self): - template = file("./test_htdocs/crlf.html").read() + template = file(self._file_path("crlf.html")).read() nodes = Lexer(template).parse() assert repr(nodes) == r"""TemplateNode({}, [Text(u'<html>\r\n\r\n', (1, 1)), PageTag(u'page', {u'args': u"a=['foo',\n 'bar']"}, (3, 1), []), Text(u'\r\n\r\nlike the name says.\r\n\r\n', (4, 26)), ControlLine(u'for', u'for x in [1,2,3]:', False, (8, 1)), Text(u' ', (9, 1)), Expression(u'x', [], (9, 9)), Text(u'', (9, 13)), ControlLine(u'for', u'endfor', True, (10, 1)), Text(u'\r\n', (11, 1)), Expression(u"trumpeter == 'Miles' and trumpeter or \\\n 'Dizzy'", [], (12, 1)), Text(u'\r\n\r\n', (13, 15)), DefTag(u'def', {u'name': u'hi()'}, (15, 1), ["Text(u'\\r\\n hi!\\r\\n', (15, 19))"]), Text(u'\r\n\r\n</html>\r\n', (17, 8))])""" assert flatten_result(Template(template).render()) == """<html> like the name says. 1 2 3 Dizzy </html>""" diff --git a/test/test_lookup.py b/test/test_lookup.py index 81bb7ec..4d6644d 100644 --- a/test/test_lookup.py +++ b/test/test_lookup.py @@ -3,23 +3,9 @@ from mako import lookup, exceptions from util import flatten_result, result_lines import unittest -import os +from test import TemplateTest, template_base, module_base -if not os.access('./test_htdocs', os.F_OK): - os.mkdir('./test_htdocs') -file('./test_htdocs/index.html', 'w').write("this is index") -file('./test_htdocs/incl.html', 'w').write("this is include 1") -if not os.access('./test_htdocs/subdir', os.F_OK): - os.mkdir('./test_htdocs/subdir') -file('./test_htdocs/subdir/incl.html', 'w').write(""" - this is include 2 -""") -file('./test_htdocs/subdir/index.html', 'w').write(""" - this is sub index - <%include file="incl.html"/> -""") - -tl = lookup.TemplateLookup(directories=['./test_htdocs']) +tl = lookup.TemplateLookup(directories=[template_base]) class LookupTest(unittest.TestCase): def test_basic(self): t = tl.get_template('index.html') diff --git a/test/test_template.py b/test/test_template.py index f5ee121..8b6b7d2 100644 --- a/test/test_template.py +++ b/test/test_template.py @@ -4,101 +4,88 @@ from mako.template import Template, ModuleTemplate from mako.lookup import TemplateLookup from mako.ext.preprocessors import convert_comments from mako import exceptions -import unittest, re, os +import re, os from util import flatten_result, result_lines import codecs -if not os.access('./test_htdocs', os.F_OK): - os.mkdir('./test_htdocs') -if not os.access('./test_htdocs/subdir', os.F_OK): - os.mkdir('./test_htdocs/subdir') +from test import TemplateTest, eq_, template_base, module_base, skip_if -# TODO: all these need to become static files in source control - -file('./test_htdocs/unicode.html', 'w').write("""## -*- coding: utf-8 -*- -Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") - -file('./test_htdocs/unicode_code.html', 'w').write("""## -*- coding: utf-8 -*- -<% - x = u"drôle de petit voix m’a réveillé." -%> -% if x==u"drôle de petit voix m’a réveillé.": - hi, ${x} -% endif -""") - -file('./test_htdocs/unicode_syntax_error.html', 'w').write("""## -*- coding: utf-8 -*- -<% print 'Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! » %>""") - -file('./test_htdocs/unicode_expr.html', 'w').write("""## -*- coding: utf-8 -*- -${u"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"} -""") - -file('./test_htdocs/unicode_runtime_error.html', 'w').write("""## -*- coding: utf-8 -*- -<% print 'Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »' + int(5/0) %>""") - -file('./test_htdocs/bommagic.html', 'w').write(codecs.BOM_UTF8 + """## -*- coding: utf-8 -*- -Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") -file('./test_htdocs/badbom.html', 'w').write(codecs.BOM_UTF8 + """## -*- coding: ascii -*- -Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") -file('./test_htdocs/bom.html', 'w').write(codecs.BOM_UTF8 + """Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") - -# TODO: all these tests need to derive from the -# file based tests, and run in an automated fashion. -# everything here needs to be tested as file template + memory template -class EncodingTest(unittest.TestCase): +class EncodingTest(TemplateTest): def test_unicode(self): - template = Template(u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") - assert template.render_unicode() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_memory_test( + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + ) def test_encoding_doesnt_conflict(self): - template = Template(u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", output_encoding='utf-8') - assert template.render_unicode() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_memory_test( + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + output_encoding='utf-8' + ) def test_unicode_arg(self): val = u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" - template = Template("${val}") - assert template.render_unicode(val=val) == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_memory_test( + "${val}", + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + template_args={'val':val} + ) def test_unicode_file(self): - template = Template(filename='./test_htdocs/unicode.html', module_directory='./test_htdocs') - assert template.render_unicode() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_file_test( + "unicode.html", + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + ) def test_unicode_file_code(self): - template = Template(filename='./test_htdocs/unicode_code.html', module_directory='./test_htdocs') - assert flatten_result(template.render_unicode()) == u"""hi, drôle de petit voix m’a réveillé.""" + self._do_file_test( + 'unicode_code.html', + u"""hi, drôle de petit voix m’a réveillé.""", + filters=flatten_result + ) def test_unicode_file_lookup(self): - lookup = TemplateLookup(directories=['./test_htdocs'], output_encoding='utf-8', default_filters=['decode.utf8']) + lookup = TemplateLookup( + directories=[template_base], + output_encoding='utf-8', + default_filters=['decode.utf8']) template = lookup.get_template('/chs_unicode.html') - assert flatten_result(template.render(name='毛泽东')) == '毛泽东 是 新中国的主席<br/> Welcome 你 to 北京.' + eq_( + flatten_result(template.render(name='毛泽东')), + '毛泽东 是 新中国的主席<br/> Welcome 你 to 北京.' + ) def test_unicode_bom(self): - template = Template(filename='./test_htdocs/bom.html', module_directory='./test_htdocs') - assert template.render_unicode() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" - - template = Template(filename='./test_htdocs/bommagic.html', module_directory='./test_htdocs') - assert template.render_unicode() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" - - try: - template = Template(filename='./test_htdocs/badbom.html', module_directory='./test_htdocs') - assert False - except exceptions.CompileException: - assert True + self._do_file_test( + 'bom.html', + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + ) + + self._do_file_test( + 'bommagic.html', + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + ) + + self.assertRaises( + exceptions.CompileException, + Template, filename=self._file_path('badbom.html'), + module_directory=module_base + ) def test_unicode_memory(self): val = u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" - val = "## coding: utf-8\n" + val.encode('utf-8') - template = Template(val) - assert isinstance(template.code, unicode) - assert template.render_unicode() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_memory_test( + "## -*- coding: utf-8 -*-\n" + val.encode('utf-8'), + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + ) def test_unicode_text(self): val = u"""<%text>Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »</%text>""" - val = "## -*- coding: utf-8 -*-\n" + val.encode('utf-8') - template = Template(val) - #print template.code - assert template.render_unicode() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_memory_test( + "## -*- coding: utf-8 -*-\n" + val.encode('utf-8'), + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + ) def test_unicode_text_ccall(self): val = u""" @@ -108,106 +95,155 @@ class EncodingTest(unittest.TestCase): <%call expr="foo()"> <%text>Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »</%text> </%call>""" - val = "## -*- coding: utf-8 -*-\n" + val.encode('utf-8') - template = Template(val) - #print template.code - assert flatten_result(template.render_unicode()) == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_memory_test( + "## -*- coding: utf-8 -*-\n" + val.encode('utf-8'), + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + filters=flatten_result + ) def test_unicode_literal_in_expr(self): - template = Template(u"""## -*- coding: utf-8 -*- - ${u"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"} - """.encode('utf-8')) - assert template.render_unicode().strip() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_memory_test( + u"""## -*- coding: utf-8 -*- + ${u"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"} + """.encode('utf-8'), + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + filters = lambda s:s.strip() + ) def test_unicode_literal_in_expr_file(self): - template = Template(filename='./test_htdocs/unicode_expr.html', module_directory='./test_htdocs') - - assert template.render_unicode().strip() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" + self._do_file_test( + 'unicode_expr.html', + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + lambda t:t.strip() + ) def test_unicode_literal_in_code(self): - template = Template(u"""## -*- coding: utf-8 -*- - <% - context.write(u"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »") - %> - """.encode('utf-8')) - assert template.render_unicode().strip() == u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" - + self._do_memory_test( + u"""## -*- coding: utf-8 -*- + <% + context.write(u"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »") + %> + """.encode('utf-8'), + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + filters=lambda s:s.strip() + ) + def test_unicode_literal_in_controlline(self): - template = Template(u"""## -*- coding: utf-8 -*- - <% - x = u"drôle de petit voix m’a réveillé." - %> - % if x==u"drôle de petit voix m’a réveillé.": - hi, ${x} - % endif - """.encode('utf-8')) - assert template.render_unicode().strip() == u"""hi, drôle de petit voix m’a réveillé.""" + self._do_memory_test( + u"""## -*- coding: utf-8 -*- + <% + x = u"drôle de petit voix m’a réveillé." + %> + % if x==u"drôle de petit voix m’a réveillé.": + hi, ${x} + % endif + """.encode('utf-8'), + u"""hi, drôle de petit voix m’a réveillé.""", + filters=lambda s:s.strip(), + ) def test_unicode_literal_in_def(self): - template = Template(u"""## -*- coding: utf-8 -*- - <%def name="bello(foo, bar)"> - Foo: ${ foo } - Bar: ${ bar } - </%def> - <%call expr="bello(foo=u'árvíztűrő tükörfúrógép', bar=u'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> - </%call>""".encode('utf-8')) - assert flatten_result(template.render_unicode()) == u"""Foo: árvíztűrő tükörfúrógép Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP""" + self._do_memory_test( + u"""## -*- coding: utf-8 -*- + <%def name="bello(foo, bar)"> + Foo: ${ foo } + Bar: ${ bar } + </%def> + <%call expr="bello(foo=u'árvíztűrő tükörfúrógép', bar=u'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> + </%call>""".encode('utf-8'), + u"""Foo: árvíztűrő tükörfúrógép Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP""", + filters=flatten_result + ) - template = Template(u"""## -*- coding: utf-8 -*- - <%def name="hello(foo=u'árvíztűrő tükörfúrógép', bar=u'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> - Foo: ${ foo } - Bar: ${ bar } - </%def> - ${ hello() }""".encode('utf-8')) - assert flatten_result(template.render_unicode()) == u"""Foo: árvíztűrő tükörfúrógép Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP""" + self._do_memory_test( + u"""## -*- coding: utf-8 -*- + <%def name="hello(foo=u'árvíztűrő tükörfúrógép', bar=u'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> + Foo: ${ foo } + Bar: ${ bar } + </%def> + ${ hello() }""".encode('utf-8'), + u"""Foo: árvíztűrő tükörfúrógép Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP""", + filters=flatten_result + ) def test_input_encoding(self): - """test the 'input_encoding' flag on Template, and that unicode objects arent double-decoded""" - s2 = u"hello ${f(u'śląsk')}" - res = Template(s2, input_encoding='utf-8').render_unicode(f=lambda x:x) - assert res == u"hello śląsk" - - s2 = u"## -*- coding: utf-8 -*-\nhello ${f(u'śląsk')}" - res = Template(s2).render_unicode(f=lambda x:x) - assert res == u"hello śląsk" + """test the 'input_encoding' flag on Template, and that unicode + objects arent double-decoded""" + + self._do_memory_test( + u"hello ${f(u'śląsk')}", + u"hello śląsk", + input_encoding='utf-8', + template_args={'f':lambda x:x} + ) + + self._do_memory_test( + u"## -*- coding: utf-8 -*-\nhello ${f(u'śląsk')}", + u"hello śląsk", + template_args={'f':lambda x:x} + ) def test_raw_strings(self): """test that raw strings go straight thru with default_filters turned off""" - g = 'śląsk' - s = u"## -*- coding: utf-8 -*-\nhello ${x}" - t = Template(s, default_filters=[]) - y = t.render(x=g) - assert y == "hello śląsk" + + self._do_memory_test( + u"## -*- coding: utf-8 -*-\nhello ${x}", + "hello śląsk", + default_filters=[], + template_args={'x':'śląsk'}, + unicode_=False + ) # now, the way you *should* be doing it.... - q = g.decode('utf-8') - y = t.render_unicode(x=q) - assert y == u"hello śląsk" + self._do_memory_test( + u"## -*- coding: utf-8 -*-\nhello ${x}", + u"hello śląsk", + template_args={'x':u'śląsk'} + ) def test_encoding(self): - val = u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""" - template = Template(val, output_encoding='utf-8') - assert template.render() == val.encode('utf-8') + self._do_memory_test( + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""", + u"""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""".encode('utf-8'), + output_encoding='utf-8', + unicode_=False + ) def test_encoding_errors(self): - val = u"""KGB (transliteration of "КГБ") is the Russian-language abbreviation for Committee for State Security, (Russian: Комит́ет Госуд́арственной Безоп́асности (help·info); Komitet Gosudarstvennoy Bezopasnosti)""" - template = Template(val, output_encoding='iso-8859-1', encoding_errors='replace') - assert template.render() == val.encode('iso-8859-1', 'replace') + self._do_memory_test( + u"""KGB (transliteration of "КГБ") is the Russian-language abbreviation for Committee for State Security, (Russian: Комит́ет Госуд́арственной Безоп́асности (help·info); Komitet Gosudarstvennoy Bezopasnosti)""", + u"""KGB (transliteration of "КГБ") is the Russian-language abbreviation for Committee for State Security, (Russian: Комит́ет Госуд́арственной Безоп́асности (help·info); Komitet Gosudarstvennoy Bezopasnosti)""".encode('iso-8859-1', 'replace'), + output_encoding='iso-8859-1', encoding_errors='replace', + unicode_=False + ) def test_read_unicode(self): - lookup = TemplateLookup(directories=['./test_htdocs'], filesystem_checks=True, output_encoding='utf-8') + lookup = TemplateLookup(directories=[template_base], + filesystem_checks=True, output_encoding='utf-8') template = lookup.get_template('/read_unicode.html') - data = template.render(path=os.path.join('./test_htdocs', 'internationalization.html')) + data = template.render(path=self._file_path('internationalization.html')) def test_bytestring_passthru(self): - lookup = TemplateLookup(directories=['./test_htdocs'], default_filters=[], disable_unicode=True) - template = lookup.get_template('/chs_utf8.html') - self.assertEquals(flatten_result(template.render(name='毛泽东')), '毛泽东 是 新中国的主席<br/> Welcome 你 to 北京. Welcome 你 to 北京.') - - lookup = TemplateLookup(directories=['./test_htdocs'], disable_unicode=True) - template = lookup.get_template('/chs_utf8.html') - self.assertEquals(flatten_result(template.render(name='毛泽东')), '毛泽东 是 新中国的主席<br/> Welcome 你 to 北京. Welcome 你 to 北京.') - + self._do_file_test( + 'chs_utf8.html', + '毛泽东 是 新中国的主席<br/> Welcome 你 to 北京. Welcome 你 to 北京.', + default_filters=[], + disable_unicode=True, + template_args={'name':'毛泽东'}, + filters=flatten_result, + unicode_=False + ) + + self._do_file_test( + 'chs_utf8.html', + '毛泽东 是 新中国的主席<br/> Welcome 你 to 北京. Welcome 你 to 北京.', + disable_unicode=True, + template_args={'name':'毛泽东'}, + filters=flatten_result, + unicode_=False + ) + + template = self._file_template('chs_utf8.html', disable_unicode=True) self.assertRaises(UnicodeDecodeError, template.render_unicode, name='毛泽东') template = Template("""${'Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petit voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »'}""", disable_unicode=True, input_encoding='utf-8') @@ -216,7 +252,7 @@ class EncodingTest(unittest.TestCase): self.assertRaises(UnicodeDecodeError, template.render) # raises because expression contains an encoded bytestring which cannot be decoded -class PageArgsTest(unittest.TestCase): +class PageArgsTest(TemplateTest): def test_basic(self): template = Template(""" <%page args="x, y, z=7"/> @@ -287,7 +323,7 @@ class PageArgsTest(unittest.TestCase): """) assert flatten_result(template.render()) == "dict: this is dict locals: this is locals" -class IncludeTest(unittest.TestCase): +class IncludeTest(TemplateTest): def test_basic(self): lookup = TemplateLookup() lookup.put_string("a", """ @@ -354,7 +390,7 @@ class IncludeTest(unittest.TestCase): """) assert flatten_result(lookup.get_template("c").render()) == "bar: calling bar this is a" -class ControlTest(unittest.TestCase): +class ControlTest(TemplateTest): def test_control(self): t = Template(""" ## this is a template. @@ -382,23 +418,29 @@ class ControlTest(unittest.TestCase): #print t.code assert flatten_result(t.render()) == "1 2 3" -class GlobalsTest(unittest.TestCase): +class GlobalsTest(TemplateTest): def test_globals(self): - t= Template(""" - <%! - y = "hi" - %> - y is ${y} -""") - assert t.render().strip() == "y is hi" - -class RichTracebackTest(unittest.TestCase): + self._do_memory_test( + """ + <%! + y = "hi" + %> + y is ${y} + """, + "y is hi", + filters=lambda t:t.strip() + ) + +class RichTracebackTest(TemplateTest): + def _do_test_traceback(self, utf8, memory, syntax): if memory: if syntax: - source = u'## coding: utf-8\n<% print "m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! » %>' + source = u'## coding: utf-8\n<% print "m’a réveillé. '\ + u'Elle disait: « S’il vous plaît… dessine-moi un mouton! » %>' else: - source = u'## coding: utf-8\n<% print u"m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »" + str(5/0) %>' + source = u'## coding: utf-8\n<% print u"m’a réveillé. '\ + u'Elle disait: « S’il vous plaît… dessine-moi un mouton! »" + str(5/0) %>' if utf8: source = source.encode('utf-8') else: @@ -406,13 +448,13 @@ class RichTracebackTest(unittest.TestCase): templateargs = {'text':source} else: if syntax: - filename = './test_htdocs/unicode_syntax_error.html' + filename = 'unicode_syntax_error.html' else: - filename = './test_htdocs/unicode_runtime_error.html' - source = file(filename).read() + filename = 'unicode_runtime_error.html' + source = file(self._file_path(filename)).read() if not utf8: source = source.decode('utf-8') - templateargs = {'filename':filename} + templateargs = {'filename':self._file_path(filename)} try: template = Template(**templateargs) if not syntax: @@ -430,35 +472,48 @@ for utf8 in (True, False): for syntax in (True, False): def _do_test(self): self._do_test_traceback(utf8, memory, syntax) - name = 'test_%s_%s_%s' % (utf8 and 'utf8' or 'unicode', memory and 'memory' or 'file', syntax and 'syntax' or 'runtime') - try: - _do_test.__name__ = name - except: - pass + name = 'test_%s_%s_%s' % (utf8 and 'utf8' or 'unicode', + memory and 'memory' or 'file', + syntax and 'syntax' or 'runtime') + _do_test.__name__ = name setattr(RichTracebackTest, name, _do_test) del _do_test - -class ModuleDirTest(unittest.TestCase): +class ModuleDirTest(TemplateTest): def test_basic(self): - file('./test_htdocs/modtest.html', 'w').write("""this is a test""") - file('./test_htdocs/subdir/modtest.html', 'w').write("""this is a test""") - t = Template(filename='./test_htdocs/modtest.html', module_directory='./test_htdocs/modules') - t2 = Template(filename='./test_htdocs/subdir/modtest.html', module_directory='./test_htdocs/modules') - assert t.module.__file__ == os.path.abspath('./test_htdocs/modules/test_htdocs/modtest.html.py') - assert t2.module.__file__ == os.path.abspath('./test_htdocs/modules/test_htdocs/subdir/modtest.html.py') + t = self._file_template("modtest.html") + t2 = self._file_template('subdir/modtest.html') + + eq_( + t.module.__file__, + os.path.join(module_base, 'modtest.html.py') + ) + eq_( + t2.module.__file__, + os.path.join(module_base, 'subdir', 'modtest.html.py') + ) + def test_callable(self): - file('./test_htdocs/modtest.html', 'w').write("""this is a test""") - file('./test_htdocs/subdir/modtest.html', 'w').write("""this is a test""") def get_modname(filename, uri): - return os.path.dirname(filename) + "/foo/" + os.path.basename(filename) + ".py" - lookup = TemplateLookup('./test_htdocs', modulename_callable=get_modname) + return os.path.join( + module_base, + os.path.dirname(uri)[1:], + 'foo', + os.path.basename(filename) + ".py") + + lookup = TemplateLookup(template_base, modulename_callable=get_modname) t = lookup.get_template('/modtest.html') t2 = lookup.get_template('/subdir/modtest.html') - assert t.module.__file__ == 'test_htdocs/foo/modtest.html.py' - assert t2.module.__file__ == 'test_htdocs/subdir/foo/modtest.html.py' - -class ModuleTemplateTest(unittest.TestCase): + eq_( + t.module.__file__, + os.path.join(module_base, 'foo', 'modtest.html.py') + ) + eq_( + t2.module.__file__, + os.path.join(module_base, 'subdir', 'foo', 'modtest.html.py') + ) + +class ModuleTemplateTest(TemplateTest): def test_module_roundtrip(self): lookup = TemplateLookup() @@ -494,7 +549,7 @@ class ModuleTemplateTest(unittest.TestCase): ] -class PreprocessTest(unittest.TestCase): +class PreprocessTest(TemplateTest): def test_old_comments(self): t = Template(""" im a template diff --git a/test/test_tgplugin.py b/test/test_tgplugin.py index 701eb94..f611a37 100644 --- a/test/test_tgplugin.py +++ b/test/test_tgplugin.py @@ -2,10 +2,11 @@ import unittest from mako.ext.turbogears import TGPlugin from util import flatten_result, result_lines +from test import TemplateTest, template_base -tl = TGPlugin(options=dict(directories=['./test_htdocs']), extension='html') +tl = TGPlugin(options=dict(directories=[template_base]), extension='html') -class TestTGPlugun(unittest.TestCase): +class TestTGPlugin(TemplateTest): def test_basic(self): t = tl.load_template('/index.html') assert result_lines(t.render()) == [ |