1 # -*- coding: utf-8 -*-
3 unit test for the loaders
4 ~~~~~~~~~~~~~~~~~~~~~~~~~
6 :copyright: (c) 2009 by the Jinja Team.
7 :license: BSD, see LICENSE for more details.
12 from jinja2 import Environment, loaders
13 from jinja2.loaders import split_template_path
14 from jinja2.exceptions import TemplateNotFound
16 from nose.tools import assert_raises
19 dict_loader = loaders.DictLoader({
20 'justdict.html': 'FOO'
22 package_loader = loaders.PackageLoader('loaderres', 'templates')
23 filesystem_loader = loaders.FileSystemLoader('loaderres/templates')
24 function_loader = loaders.FunctionLoader({'justfunction.html': 'FOO'}.get)
25 choice_loader = loaders.ChoiceLoader([dict_loader, package_loader])
26 prefix_loader = loaders.PrefixLoader({
27 'a': filesystem_loader,
32 def test_dict_loader():
33 env = Environment(loader=dict_loader)
34 tmpl = env.get_template('justdict.html')
35 assert tmpl.render().strip() == 'FOO'
36 assert_raises(TemplateNotFound, env.get_template, 'missing.html')
39 def test_package_loader():
40 env = Environment(loader=package_loader)
41 tmpl = env.get_template('test.html')
42 assert tmpl.render().strip() == 'BAR'
43 assert_raises(TemplateNotFound, env.get_template, 'missing.html')
46 def test_filesystem_loader():
47 env = Environment(loader=filesystem_loader)
48 tmpl = env.get_template('test.html')
49 assert tmpl.render().strip() == 'BAR'
50 tmpl = env.get_template('foo/test.html')
51 assert tmpl.render().strip() == 'FOO'
52 assert_raises(TemplateNotFound, env.get_template, 'missing.html')
55 def test_choice_loader():
56 env = Environment(loader=choice_loader)
57 tmpl = env.get_template('justdict.html')
58 assert tmpl.render().strip() == 'FOO'
59 tmpl = env.get_template('test.html')
60 assert tmpl.render().strip() == 'BAR'
61 assert_raises(TemplateNotFound, env.get_template, 'missing.html')
64 def test_function_loader():
65 env = Environment(loader=function_loader)
66 tmpl = env.get_template('justfunction.html')
67 assert tmpl.render().strip() == 'FOO'
68 assert_raises(TemplateNotFound, env.get_template, 'missing.html')
71 def test_prefix_loader():
72 env = Environment(loader=prefix_loader)
73 tmpl = env.get_template('a/test.html')
74 assert tmpl.render().strip() == 'BAR'
75 tmpl = env.get_template('b/justdict.html')
76 assert tmpl.render().strip() == 'FOO'
77 assert_raises(TemplateNotFound, env.get_template, 'missing')
82 class TestLoader(loaders.BaseLoader):
83 def get_source(self, environment, template):
84 return u'foo', None, lambda: not changed
85 env = Environment(loader=TestLoader(), cache_size=-1)
86 tmpl = env.get_template('template')
87 assert tmpl is env.get_template('template')
89 assert tmpl is not env.get_template('template')
92 env = Environment(loader=TestLoader(), cache_size=0)
93 assert env.get_template('template') \
94 is not env.get_template('template')
96 env = Environment(loader=TestLoader(), cache_size=2)
97 t1 = env.get_template('one')
98 t2 = env.get_template('two')
100 assert t2 is env.get_template('two')
101 assert t1 is env.get_template('one')
102 t3 = env.get_template('three')
103 assert 'one' in env.cache
104 assert 'two' not in env.cache
105 assert 'three' in env.cache
108 def test_split_template_path():
109 assert split_template_path('foo/bar') == ['foo', 'bar']
110 assert split_template_path('./foo/bar') == ['foo', 'bar']
111 assert_raises(TemplateNotFound, split_template_path, '../foo')