From e62b7eff81760c3ad3b73bae3792effd82e56f42 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Sat, 24 May 2008 20:47:29 +0200 Subject: [PATCH] more unittests --HG-- branch : trunk --- jinja2/_speedups.c | 2 +- tests/test_loaders.py | 70 ++++++++++++++++++++++++++++--------------- tests/test_macros.py | 18 +++++++++++ 3 files changed, 65 insertions(+), 25 deletions(-) diff --git a/jinja2/_speedups.c b/jinja2/_speedups.c index dcf7248..61bdec7 100644 --- a/jinja2/_speedups.c +++ b/jinja2/_speedups.c @@ -92,7 +92,7 @@ escape_unicode(PyUnicodeObject *in) if (next_escp > inp) { /* copy unescaped chars between inp and next_escp */ Py_UNICODE_COPY(outp, inp, next_escp-inp); - outp += next_escp-inp; + outp += next_escp - inp; } /* escape 'next_escp' */ diff --git a/tests/test_loaders.py b/tests/test_loaders.py index fb5ca73..9cc1dcc 100644 --- a/tests/test_loaders.py +++ b/tests/test_loaders.py @@ -17,33 +17,28 @@ from jinja2.exceptions import TemplateNotFound dict_loader = loaders.DictLoader({ 'justdict.html': 'FOO' }) - package_loader = loaders.PackageLoader('loaderres', 'templates') - filesystem_loader = loaders.FileSystemLoader('loaderres/templates') - function_loader = loaders.FunctionLoader({'justfunction.html': 'FOO'}.get) - choice_loader = loaders.ChoiceLoader([dict_loader, package_loader]) +prefix_loader = loaders.PrefixLoader({ + 'a': filesystem_loader, + 'b': dict_loader +}) def test_dict_loader(): env = Environment(loader=dict_loader) tmpl = env.get_template('justdict.html') assert tmpl.render().strip() == 'FOO' - try: - env.get_template('missing.html') - except TemplateNotFound: - pass - else: - raise AssertionError('expected template exception') + raises(TemplateNotFound, env.get_template, 'missing.html') def test_package_loader(): env = Environment(loader=package_loader) tmpl = env.get_template('test.html') assert tmpl.render().strip() == 'BAR' - raises(TemplateNotFound, lambda: env.get_template('missing.html')) + raises(TemplateNotFound, env.get_template, 'missing.html') def test_filesystem_loader(): @@ -52,7 +47,7 @@ def test_filesystem_loader(): assert tmpl.render().strip() == 'BAR' tmpl = env.get_template('foo/test.html') assert tmpl.render().strip() == 'FOO' - raises(TemplateNotFound, lambda: env.get_template('missing.html')) + raises(TemplateNotFound, env.get_template, 'missing.html') def test_choice_loader(): @@ -61,21 +56,48 @@ def test_choice_loader(): assert tmpl.render().strip() == 'FOO' tmpl = env.get_template('test.html') assert tmpl.render().strip() == 'BAR' - try: - env.get_template('missing.html') - except TemplateNotFound: - pass - else: - raise AssertionError('expected template exception') + raises(TemplateNotFound, env.get_template, 'missing.html') def test_function_loader(): env = Environment(loader=function_loader) tmpl = env.get_template('justfunction.html') assert tmpl.render().strip() == 'FOO' - try: - env.get_template('missing.html') - except TemplateNotFound: - pass - else: - raise AssertionError('expected template exception') + raises(TemplateNotFound, env.get_template, 'missing.html') + + +def test_prefix_loader(): + env = Environment(loader=prefix_loader) + tmpl = env.get_template('a/test.html') + assert tmpl.render().strip() == 'BAR' + tmpl = env.get_template('b/justdict.html') + assert tmpl.render().strip() == 'FOO' + raises(TemplateNotFound, env.get_template, 'missing') + + +def test_caching(): + changed = False + class TestLoader(loaders.BaseLoader): + def get_source(self, environment, template): + return u'foo', None, lambda: not changed + env = Environment(loader=TestLoader(), cache_size=-1) + tmpl = env.get_template('template') + assert tmpl is env.get_template('template') + changed = True + assert tmpl is not env.get_template('template') + changed = False + + env = Environment(loader=TestLoader(), cache_size=0) + assert env.get_template('template') \ + is not env.get_template('template') + + env = Environment(loader=TestLoader(), cache_size=2) + t1 = env.get_template('one') + t2 = env.get_template('two') + print env.cache + assert t2 is env.get_template('two') + assert t1 is env.get_template('one') + t3 = env.get_template('three') + assert 'one' in env.cache + assert 'two' not in env.cache + assert 'three' in env.cache diff --git a/tests/test_macros.py b/tests/test_macros.py index 5958250..ee6c353 100644 --- a/tests/test_macros.py +++ b/tests/test_macros.py @@ -86,3 +86,21 @@ def test_caller_undefined(env): def test_include(env): tmpl = env.from_string('{% from "include" import test %}{{ test("foo") }}') assert tmpl.render() == '[foo]' + + +def test_macro_api(env): + tmpl = env.from_string('{% macro foo(a, b) %}{% endmacro %}' + '{% macro bar() %}{{ varargs }}{{ kwargs }}{% endmacro %}' + '{% macro baz() %}{{ caller() }}{% endmacro %}') + assert tmpl.module.foo.arguments == ('a', 'b') + assert tmpl.module.foo.defaults == () + assert tmpl.module.foo.name == 'foo' + assert not tmpl.module.foo.caller + assert not tmpl.module.foo.catch_kwargs + assert not tmpl.module.foo.catch_varargs + assert tmpl.module.bar.arguments == () + assert tmpl.module.bar.defaults == () + assert not tmpl.module.bar.caller + assert tmpl.module.bar.catch_kwargs + assert tmpl.module.bar.catch_varargs + assert tmpl.module.baz.caller -- 2.26.2