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