blob: 345f6fe88d51c27c61dd21d001386ea3e874e88c [file] [log] [blame]
from mako.template import Template
from mako import lookup
import unittest, os
from util import result_lines
if not os.access('./test_htdocs', os.F_OK):
os.mkdir('./test_htdocs')
class MockCache(object):
def __init__(self, realcache):
self.realcache = realcache
def get(self, key, **kwargs):
self.key = key
self.kwargs = kwargs.copy()
self.kwargs.pop('createfunc', None)
return self.realcache.get(key, **kwargs)
class CacheTest(unittest.TestCase):
def test_component(self):
t = Template("""
<%!
callcount = [0]
%>
<%def name="foo()" cached="True">
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
m = self._install_mock_cache(t)
assert result_lines(t.render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {}
def test_page(self):
t = Template("""
<%!
callcount = [0]
%>
<%page cached="True"/>
this is foo
<%
callcount[0] += 1
%>
callcount: ${callcount}
""")
m = self._install_mock_cache(t)
t.render()
t.render()
assert result_lines(t.render()) == [
"this is foo",
"callcount: [1]"
]
assert m.kwargs == {}
def test_fileargs_implicit(self):
l = lookup.TemplateLookup(module_directory='./test_htdocs')
l.put_string("test","""
<%!
callcount = [0]
%>
<%def name="foo()" cached="True" cache_type='dbm'>
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
m = self._install_mock_cache(l.get_template('test'))
assert result_lines(l.get_template('test').render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {'type':'dbm', 'data_dir':'./test_htdocs'}
def test_fileargs_deftag(self):
t = Template("""
<%!
callcount = [0]
%>
<%def name="foo()" cached="True" cache_type='file' cache_dir='./test_htdocs'>
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
m = self._install_mock_cache(t)
assert result_lines(t.render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {'type':'file','data_dir':'./test_htdocs'}
def test_fileargs_pagetag(self):
t = Template("""
<%page cache_dir='./test_htdocs' cache_type='dbm'/>
<%!
callcount = [0]
%>
<%def name="foo()" cached="True">
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
m = self._install_mock_cache(t)
assert result_lines(t.render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'dbm'}
def test_fileargs_lookup(self):
l = lookup.TemplateLookup(cache_dir='./test_htdocs', cache_type='file')
l.put_string("test","""
<%!
callcount = [0]
%>
<%def name="foo()" cached="True">
this is foo
<%
callcount[0] += 1
%>
</%def>
${foo()}
${foo()}
${foo()}
callcount: ${callcount}
""")
t = l.get_template('test')
m = self._install_mock_cache(t)
assert result_lines(l.get_template('test').render()) == [
'this is foo',
'this is foo',
'this is foo',
'callcount: [1]',
]
assert m.kwargs == {'data_dir':'./test_htdocs', 'type':'file'}
def _install_mock_cache(self, template):
m = MockCache(template.module._template_cache)
template.module._template_cache = m
return m
if __name__ == '__main__':
unittest.main()