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

inheritance.py (4978B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\jinja2\testsuite\inheritance.py
      2 import unittest
      3 from jinja2.testsuite import JinjaTestCase
      4 from jinja2 import Environment, DictLoader
      5 LAYOUTTEMPLATE = '|{% block block1 %}block 1 from layout{% endblock %}\n|{% block block2 %}block 2 from layout{% endblock %}\n|{% block block3 %}\n{% block block4 %}nested block 4 from layout{% endblock %}\n{% endblock %}|'
      6 LEVEL1TEMPLATE = '{% extends "layout" %}\n{% block block1 %}block 1 from level1{% endblock %}'
      7 LEVEL2TEMPLATE = '{% extends "level1" %}\n{% block block2 %}{% block block5 %}nested block 5 from level2{%\nendblock %}{% endblock %}'
      8 LEVEL3TEMPLATE = '{% extends "level2" %}\n{% block block5 %}block 5 from level3{% endblock %}\n{% block block4 %}block 4 from level3{% endblock %}\n'
      9 LEVEL4TEMPLATE = '{% extends "level3" %}\n{% block block3 %}block 3 from level4{% endblock %}\n'
     10 WORKINGTEMPLATE = '{% extends "layout" %}\n{% block block1 %}\n  {% if false %}\n    {% block block2 %}\n      this should workd\n    {% endblock %}\n  {% endif %}\n{% endblock %}\n'
     11 env = Environment(loader=DictLoader({'layout': LAYOUTTEMPLATE,
     12  'level1': LEVEL1TEMPLATE,
     13  'level2': LEVEL2TEMPLATE,
     14  'level3': LEVEL3TEMPLATE,
     15  'level4': LEVEL4TEMPLATE,
     16  'working': WORKINGTEMPLATE}), trim_blocks=True)
     17 
     18 class InheritanceTestCase(JinjaTestCase):
     19 
     20     def test_layout(self):
     21         tmpl = env.get_template('layout')
     22 
     23     def test_level1(self):
     24         tmpl = env.get_template('level1')
     25 
     26     def test_level2(self):
     27         tmpl = env.get_template('level2')
     28 
     29     def test_level3(self):
     30         tmpl = env.get_template('level3')
     31 
     32     def test_level4(sel):
     33         tmpl = env.get_template('level4')
     34 
     35     def test_super(self):
     36         env = Environment(loader=DictLoader({'a': '{% block intro %}INTRO{% endblock %}|BEFORE|{% block data %}INNER{% endblock %}|AFTER',
     37          'b': '{% extends "a" %}{% block data %}({{ super() }}){% endblock %}',
     38          'c': '{% extends "b" %}{% block intro %}--{{ super() }}--{% endblock %}\n{% block data %}[{{ super() }}]{% endblock %}'}))
     39         tmpl = env.get_template('c')
     40 
     41     def test_working(self):
     42         tmpl = env.get_template('working')
     43 
     44     def test_reuse_blocks(self):
     45         tmpl = env.from_string('{{ self.foo() }}|{% block foo %}42{% endblock %}|{{ self.foo() }}')
     46 
     47     def test_preserve_blocks(self):
     48         env = Environment(loader=DictLoader({'a': '{% if false %}{% block x %}A{% endblock %}{% endif %}{{ self.x() }}',
     49          'b': '{% extends "a" %}{% block x %}B{{ super() }}{% endblock %}'}))
     50         tmpl = env.get_template('b')
     51 
     52     def test_dynamic_inheritance(self):
     53         env = Environment(loader=DictLoader({'master1': 'MASTER1{% block x %}{% endblock %}',
     54          'master2': 'MASTER2{% block x %}{% endblock %}',
     55          'child': '{% extends master %}{% block x %}CHILD{% endblock %}'}))
     56         tmpl = env.get_template('child')
     57         for m in range(1, 3):
     58             pass
     59 
     60     def test_multi_inheritance(self):
     61         env = Environment(loader=DictLoader({'master1': 'MASTER1{% block x %}{% endblock %}',
     62          'master2': 'MASTER2{% block x %}{% endblock %}',
     63          'child': "{% if master %}{% extends master %}{% else %}{% extends\n                        'master1' %}{% endif %}{% block x %}CHILD{% endblock %}"}))
     64         tmpl = env.get_template('child')
     65 
     66     def test_scoped_block(self):
     67         env = Environment(loader=DictLoader({'master.html': '{% for item in seq %}[{% block item scoped %}{% endblock %}]{% endfor %}'}))
     68         t = env.from_string('{% extends "master.html" %}{% block item %}{{ item }}{% endblock %}')
     69 
     70     def test_super_in_scoped_block(self):
     71         env = Environment(loader=DictLoader({'master.html': '{% for item in seq %}[{% block item scoped %}{{ item }}{% endblock %}]{% endfor %}'}))
     72         t = env.from_string('{% extends "master.html" %}{% block item %}{{ super() }}|{{ item * 2 }}{% endblock %}')
     73 
     74     def test_scoped_block_after_inheritance(self):
     75         env = Environment(loader=DictLoader({'layout.html': '\n            {% block useless %}{% endblock %}\n            ',
     76          'index.html': "\n            {%- extends 'layout.html' %}\n            {% from 'helpers.html' import foo with context %}\n            {% block useless %}\n                {% for x in [1, 2, 3] %}\n                    {% block testing scoped %}\n                        {{ foo(x) }}\n                    {% endblock %}\n                {% endfor %}\n            {% endblock %}\n            ",
     77          'helpers.html': '\n            {% macro foo(x) %}{{ the_foo + x }}{% endmacro %}\n            '}))
     78         rv = env.get_template('index.html').render(the_foo=42).split()
     79 
     80 
     81 class BugFixTestCase(JinjaTestCase):
     82 
     83     def test_fixed_macro_scoping_bug(self):
     84         pass
     85 
     86 
     87 def suite():
     88     suite = unittest.TestSuite()
     89     suite.addTest(unittest.makeSuite(InheritanceTestCase))
     90     suite.addTest(unittest.makeSuite(BugFixTestCase))
     91     return suite