NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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