blob: 9cc1dcc06aad2560ac9c40abe6cc6bc4b58d7125 [file] [log] [blame]
Armin Ronacher93e14c22007-03-20 16:17:48 +01001# -*- coding: utf-8 -*-
2"""
3 unit test for the loaders
4 ~~~~~~~~~~~~~~~~~~~~~~~~~
5
6 :copyright: 2007 by Armin Ronacher.
7 :license: BSD, see LICENSE for more details.
8"""
9
Armin Ronacher963f97d2008-04-25 11:44:59 +020010from py.test import raises
Armin Ronacherccf284b2007-05-21 16:44:26 +020011import time
12import tempfile
Christoph Hacke9e43bb2008-04-13 23:35:48 +020013from jinja2 import Environment, loaders
14from jinja2.exceptions import TemplateNotFound
Armin Ronacher93e14c22007-03-20 16:17:48 +010015
16
17dict_loader = loaders.DictLoader({
18 'justdict.html': 'FOO'
19})
Armin Ronacher93e14c22007-03-20 16:17:48 +010020package_loader = loaders.PackageLoader('loaderres', 'templates')
Armin Ronacher93e14c22007-03-20 16:17:48 +010021filesystem_loader = loaders.FileSystemLoader('loaderres/templates')
Armin Ronacher9baa5ba2007-03-21 18:05:32 +010022function_loader = loaders.FunctionLoader({'justfunction.html': 'FOO'}.get)
Armin Ronacher93e14c22007-03-20 16:17:48 +010023choice_loader = loaders.ChoiceLoader([dict_loader, package_loader])
Armin Ronachere62b7ef2008-05-24 20:47:29 +020024prefix_loader = loaders.PrefixLoader({
25 'a': filesystem_loader,
26 'b': dict_loader
27})
Armin Ronacher93e14c22007-03-20 16:17:48 +010028
29
30def test_dict_loader():
31 env = Environment(loader=dict_loader)
32 tmpl = env.get_template('justdict.html')
33 assert tmpl.render().strip() == 'FOO'
Armin Ronachere62b7ef2008-05-24 20:47:29 +020034 raises(TemplateNotFound, env.get_template, 'missing.html')
Armin Ronacher93e14c22007-03-20 16:17:48 +010035
36
37def test_package_loader():
38 env = Environment(loader=package_loader)
Armin Ronacher963f97d2008-04-25 11:44:59 +020039 tmpl = env.get_template('test.html')
40 assert tmpl.render().strip() == 'BAR'
Armin Ronachere62b7ef2008-05-24 20:47:29 +020041 raises(TemplateNotFound, env.get_template, 'missing.html')
Armin Ronacher93e14c22007-03-20 16:17:48 +010042
43
44def test_filesystem_loader():
45 env = Environment(loader=filesystem_loader)
46 tmpl = env.get_template('test.html')
47 assert tmpl.render().strip() == 'BAR'
Armin Ronachercb58db12007-05-30 00:05:24 +020048 tmpl = env.get_template('foo/test.html')
49 assert tmpl.render().strip() == 'FOO'
Armin Ronachere62b7ef2008-05-24 20:47:29 +020050 raises(TemplateNotFound, env.get_template, 'missing.html')
Armin Ronacher143a07e2007-06-02 01:47:34 +020051
52
Armin Ronacher93e14c22007-03-20 16:17:48 +010053def test_choice_loader():
54 env = Environment(loader=choice_loader)
55 tmpl = env.get_template('justdict.html')
56 assert tmpl.render().strip() == 'FOO'
57 tmpl = env.get_template('test.html')
58 assert tmpl.render().strip() == 'BAR'
Armin Ronachere62b7ef2008-05-24 20:47:29 +020059 raises(TemplateNotFound, env.get_template, 'missing.html')
Armin Ronacher9baa5ba2007-03-21 18:05:32 +010060
61
62def test_function_loader():
63 env = Environment(loader=function_loader)
64 tmpl = env.get_template('justfunction.html')
65 assert tmpl.render().strip() == 'FOO'
Armin Ronachere62b7ef2008-05-24 20:47:29 +020066 raises(TemplateNotFound, env.get_template, 'missing.html')
67
68
69def test_prefix_loader():
70 env = Environment(loader=prefix_loader)
71 tmpl = env.get_template('a/test.html')
72 assert tmpl.render().strip() == 'BAR'
73 tmpl = env.get_template('b/justdict.html')
74 assert tmpl.render().strip() == 'FOO'
75 raises(TemplateNotFound, env.get_template, 'missing')
76
77
78def test_caching():
79 changed = False
80 class TestLoader(loaders.BaseLoader):
81 def get_source(self, environment, template):
82 return u'foo', None, lambda: not changed
83 env = Environment(loader=TestLoader(), cache_size=-1)
84 tmpl = env.get_template('template')
85 assert tmpl is env.get_template('template')
86 changed = True
87 assert tmpl is not env.get_template('template')
88 changed = False
89
90 env = Environment(loader=TestLoader(), cache_size=0)
91 assert env.get_template('template') \
92 is not env.get_template('template')
93
94 env = Environment(loader=TestLoader(), cache_size=2)
95 t1 = env.get_template('one')
96 t2 = env.get_template('two')
97 print env.cache
98 assert t2 is env.get_template('two')
99 assert t1 is env.get_template('one')
100 t3 = env.get_template('three')
101 assert 'one' in env.cache
102 assert 'two' not in env.cache
103 assert 'three' in env.cache