From: Armin Ronacher Date: Sat, 24 May 2008 18:47:29 +0000 (+0200) Subject: more unittests X-Git-Tag: 2.0rc1~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e62b7eff81760c3ad3b73bae3792effd82e56f42;p=thirdparty%2Fjinja.git more unittests --HG-- branch : trunk --- diff --git a/jinja2/_speedups.c b/jinja2/_speedups.c index dcf72483..61bdec7d 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 fb5ca733..9cc1dcc0 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 5958250e..ee6c3532 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