loader.py (5869B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\jinja2\testsuite\loader.py 2 import os 3 import sys 4 import tempfile 5 import shutil 6 import unittest 7 from jinja2.testsuite import JinjaTestCase, dict_loader, package_loader, filesystem_loader, function_loader, choice_loader, prefix_loader 8 from jinja2 import Environment, loaders 9 from jinja2.loaders import split_template_path 10 from jinja2.exceptions import TemplateNotFound 11 12 class LoaderTestCase(JinjaTestCase): 13 14 def test_dict_loader(self): 15 env = Environment(loader=dict_loader) 16 tmpl = env.get_template('justdict.html') 17 self.assert_raises(TemplateNotFound, env.get_template, 'missing.html') 18 19 def test_package_loader(self): 20 env = Environment(loader=package_loader) 21 tmpl = env.get_template('test.html') 22 self.assert_raises(TemplateNotFound, env.get_template, 'missing.html') 23 24 def test_filesystem_loader(self): 25 env = Environment(loader=filesystem_loader) 26 tmpl = env.get_template('test.html') 27 tmpl = env.get_template('foo/test.html') 28 self.assert_raises(TemplateNotFound, env.get_template, 'missing.html') 29 30 def test_choice_loader(self): 31 env = Environment(loader=choice_loader) 32 tmpl = env.get_template('justdict.html') 33 tmpl = env.get_template('test.html') 34 self.assert_raises(TemplateNotFound, env.get_template, 'missing.html') 35 36 def test_function_loader(self): 37 env = Environment(loader=function_loader) 38 tmpl = env.get_template('justfunction.html') 39 self.assert_raises(TemplateNotFound, env.get_template, 'missing.html') 40 41 def test_prefix_loader(self): 42 env = Environment(loader=prefix_loader) 43 tmpl = env.get_template('a/test.html') 44 tmpl = env.get_template('b/justdict.html') 45 self.assert_raises(TemplateNotFound, env.get_template, 'missing') 46 47 def test_caching(self): 48 changed = False 49 50 class TestLoader(loaders.BaseLoader): 51 52 def get_source(self, environment, template): 53 return (u'foo', None, lambda : not changed) 54 55 env = Environment(loader=TestLoader(), cache_size=-1) 56 tmpl = env.get_template('template') 57 changed = True 58 changed = False 59 env = Environment(loader=TestLoader(), cache_size=0) 60 env = Environment(loader=TestLoader(), cache_size=2) 61 t1 = env.get_template('one') 62 t2 = env.get_template('two') 63 t3 = env.get_template('three') 64 65 def test_split_template_path(self): 66 self.assert_raises(TemplateNotFound, split_template_path, '../foo') 67 68 69 class ModuleLoaderTestCase(JinjaTestCase): 70 archive = None 71 72 def compile_down(self, zip = 'deflated', py_compile = False): 73 super(ModuleLoaderTestCase, self).setup() 74 log = [] 75 self.reg_env = Environment(loader=prefix_loader) 76 if zip is not None: 77 self.archive = tempfile.mkstemp(suffix='.zip')[1] 78 else: 79 self.archive = tempfile.mkdtemp() 80 self.reg_env.compile_templates(self.archive, zip=zip, log_function=log.append, py_compile=py_compile) 81 self.mod_env = Environment(loader=loaders.ModuleLoader(self.archive)) 82 return ''.join(log) 83 84 def teardown(self): 85 super(ModuleLoaderTestCase, self).teardown() 86 if hasattr(self, 'mod_env'): 87 if os.path.isfile(self.archive): 88 os.remove(self.archive) 89 else: 90 shutil.rmtree(self.archive) 91 self.archive = None 92 93 def test_log(self): 94 log = self.compile_down() 95 96 def _test_common(self): 97 tmpl1 = self.reg_env.get_template('a/test.html') 98 tmpl2 = self.mod_env.get_template('a/test.html') 99 tmpl1 = self.reg_env.get_template('b/justdict.html') 100 tmpl2 = self.mod_env.get_template('b/justdict.html') 101 102 def test_deflated_zip_compile(self): 103 self.compile_down(zip='deflated') 104 self._test_common() 105 106 def test_stored_zip_compile(self): 107 self.compile_down(zip='stored') 108 self._test_common() 109 110 def test_filesystem_compile(self): 111 self.compile_down(zip=None) 112 self._test_common() 113 114 def test_weak_references(self): 115 self.compile_down() 116 tmpl = self.mod_env.get_template('a/test.html') 117 key = loaders.ModuleLoader.get_template_key('a/test.html') 118 name = self.mod_env.loader.module.__name__ 119 self.mod_env = tmpl = None 120 try: 121 import gc 122 gc.collect() 123 except: 124 pass 125 126 def test_byte_compilation(self): 127 log = self.compile_down(py_compile=True) 128 tmpl1 = self.mod_env.get_template('a/test.html') 129 mod = self.mod_env.loader.module.tmpl_3c4ddf650c1a73df961a6d3d2ce2752f1b8fd490 130 131 def test_choice_loader(self): 132 log = self.compile_down(py_compile=True) 133 self.mod_env.loader = loaders.ChoiceLoader([self.mod_env.loader, loaders.DictLoader({'DICT_SOURCE': 'DICT_TEMPLATE'})]) 134 tmpl1 = self.mod_env.get_template('a/test.html') 135 self.assert_equal(tmpl1.render(), 'BAR') 136 tmpl2 = self.mod_env.get_template('DICT_SOURCE') 137 self.assert_equal(tmpl2.render(), 'DICT_TEMPLATE') 138 139 def test_prefix_loader(self): 140 log = self.compile_down(py_compile=True) 141 self.mod_env.loader = loaders.PrefixLoader({'MOD': self.mod_env.loader, 142 'DICT': loaders.DictLoader({'test.html': 'DICT_TEMPLATE'})}) 143 tmpl1 = self.mod_env.get_template('MOD/a/test.html') 144 self.assert_equal(tmpl1.render(), 'BAR') 145 tmpl2 = self.mod_env.get_template('DICT/test.html') 146 self.assert_equal(tmpl2.render(), 'DICT_TEMPLATE') 147 148 149 def suite(): 150 suite = unittest.TestSuite() 151 suite.addTest(unittest.makeSuite(LoaderTestCase)) 152 suite.addTest(unittest.makeSuite(ModuleLoaderTestCase)) 153 return suite