aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mako/util.py22
-rw-r--r--test/__init__.py65
-rw-r--r--test/templates/badbom.html2
-rw-r--r--test/templates/bom.html1
-rw-r--r--test/templates/bommagic.html2
-rw-r--r--test/templates/chs_unicode.html (renamed from test_htdocs/chs_unicode.html)0
-rw-r--r--test/templates/chs_utf8.html (renamed from test_htdocs/chs_utf8.html)0
-rw-r--r--test/templates/crlf.html (renamed from test_htdocs/crlf.html)0
-rw-r--r--test/templates/foo/modtest.html.py25
-rw-r--r--test/templates/gettext.mako (renamed from test_htdocs/gettext.mako)0
-rw-r--r--test/templates/index.html1
-rw-r--r--test/templates/internationalization.html (renamed from test_htdocs/internationalization.html)0
-rw-r--r--test/templates/modtest.html1
-rw-r--r--test/templates/read_unicode.html (renamed from test_htdocs/read_unicode.html)0
-rw-r--r--test/templates/subdir/foo/modtest.html.py25
-rw-r--r--test/templates/subdir/incl.html2
-rw-r--r--test/templates/subdir/index.html3
-rw-r--r--test/templates/subdir/modtest.html1
-rw-r--r--test/templates/unicode.html2
-rw-r--r--test/templates/unicode_code.html7
-rw-r--r--test/templates/unicode_expr.html2
-rw-r--r--test/templates/unicode_runtime_error.html2
-rw-r--r--test/templates/unicode_syntax_error.html2
-rw-r--r--test/test_babelplugin.py69
-rw-r--r--test/test_cache.py87
-rw-r--r--test/test_lexer.py6
-rw-r--r--test/test_lookup.py18
-rw-r--r--test/test_template.py425
-rw-r--r--test/test_tgplugin.py5
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()) == [