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

regression.py (5929B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\jinja2\testsuite\regression.py
      2 import unittest
      3 from jinja2.testsuite import JinjaTestCase
      4 from jinja2 import Template, Environment, DictLoader, TemplateSyntaxError, TemplateNotFound, PrefixLoader
      5 env = Environment()
      6 
      7 class CornerTestCase(JinjaTestCase):
      8 
      9     def test_assigned_scoping(self):
     10         t = env.from_string('\n        {%- for item in (1, 2, 3, 4) -%}\n            [{{ item }}]\n        {%- endfor %}\n        {{- item -}}\n        ')
     11         t = env.from_string('\n        {%- for item in (1, 2, 3, 4) -%}\n            [{{ item }}]\n        {%- endfor %}\n        {%- set item = 42 %}\n        {{- item -}}\n        ')
     12         t = env.from_string('\n        {%- set item = 42 %}\n        {%- for item in (1, 2, 3, 4) -%}\n            [{{ item }}]\n        {%- endfor %}\n        {{- item -}}\n        ')
     13 
     14     def test_closure_scoping(self):
     15         t = env.from_string('\n        {%- set wrapper = "<FOO>" %}\n        {%- for item in (1, 2, 3, 4) %}\n            {%- macro wrapper() %}[{{ item }}]{% endmacro %}\n            {{- wrapper() }}\n        {%- endfor %}\n        {{- wrapper -}}\n        ')
     16         t = env.from_string('\n        {%- for item in (1, 2, 3, 4) %}\n            {%- macro wrapper() %}[{{ item }}]{% endmacro %}\n            {{- wrapper() }}\n        {%- endfor %}\n        {%- set wrapper = "<FOO>" %}\n        {{- wrapper -}}\n        ')
     17         t = env.from_string('\n        {%- for item in (1, 2, 3, 4) %}\n            {%- macro wrapper() %}[{{ item }}]{% endmacro %}\n            {{- wrapper() }}\n        {%- endfor %}\n        {{- wrapper -}}\n        ')
     18 
     19 
     20 class BugTestCase(JinjaTestCase):
     21 
     22     def test_keyword_folding(self):
     23         env = Environment()
     24         env.filters['testing'] = lambda value, some: value + some
     25 
     26     def test_extends_output_bugs(self):
     27         env = Environment(loader=DictLoader({'parent.html': '(({% block title %}{% endblock %}))'}))
     28         t = env.from_string('{% if expr %}{% extends "parent.html" %}{% endif %}[[{% block title %}title{% endblock %}]]{% for item in [1, 2, 3] %}({{ item }}){% endfor %}')
     29 
     30     def test_urlize_filter_escaping(self):
     31         tmpl = env.from_string('{{ "http://www.example.org/<foo"|urlize }}')
     32 
     33     def test_loop_call_loop(self):
     34         tmpl = env.from_string('\n\n        {% macro test() %}\n            {{ caller() }}\n        {% endmacro %}\n\n        {% for num1 in range(5) %}\n            {% call test() %}\n                {% for num2 in range(10) %}\n                    {{ loop.index }}\n                {% endfor %}\n            {% endcall %}\n        {% endfor %}\n\n        ')
     35 
     36     def test_weird_inline_comment(self):
     37         env = Environment(line_statement_prefix='%')
     38         self.assert_raises(TemplateSyntaxError, env.from_string, '% for item in seq {# missing #}\n...% endfor')
     39 
     40     def test_old_macro_loop_scoping_bug(self):
     41         tmpl = env.from_string('{% for i in (1, 2) %}{{ i }}{% endfor %}{% macro i() %}3{% endmacro %}{{ i() }}')
     42 
     43     def test_partial_conditional_assignments(self):
     44         tmpl = env.from_string('{% if b %}{% set a = 42 %}{% endif %}{{ a }}')
     45 
     46     def test_stacked_locals_scoping_bug(self):
     47         env = Environment(line_statement_prefix='#')
     48         t = env.from_string("# for j in [1, 2]:\n#   set x = 1\n#   for i in [1, 2]:\n#     print x\n#     if i % 2 == 0:\n#       set x = x + 1\n#     endif\n#   endfor\n# endfor\n# if a\n#   print 'A'\n# elif b\n#   print 'B'\n# elif c == d\n#   print 'C'\n# else\n#   print 'D'\n# endif\n    ")
     49 
     50     def test_stacked_locals_scoping_bug_twoframe(self):
     51         t = Template('\n            {% set x = 1 %}\n            {% for item in foo %}\n                {% if item == 1 %}\n                    {% set x = 2 %}\n                {% endif %}\n            {% endfor %}\n            {{ x }}\n        ')
     52         rv = t.render(foo=[1]).strip()
     53 
     54     def test_call_with_args(self):
     55         t = Template('{% macro dump_users(users) -%}\n        <ul>\n          {%- for user in users -%}\n            <li><p>{{ user.username|e }}</p>{{ caller(user) }}</li>\n          {%- endfor -%}\n          </ul>\n        {%- endmacro -%}\n\n        {% call(user) dump_users(list_of_user) -%}\n          <dl>\n            <dl>Realname</dl>\n            <dd>{{ user.realname|e }}</dd>\n            <dl>Description</dl>\n            <dd>{{ user.description }}</dd>\n          </dl>\n        {% endcall %}')
     56 
     57     def test_empty_if_condition_fails(self):
     58         self.assert_raises(TemplateSyntaxError, Template, '{% if %}....{% endif %}')
     59         self.assert_raises(TemplateSyntaxError, Template, '{% if foo %}...{% elif %}...{% endif %}')
     60         self.assert_raises(TemplateSyntaxError, Template, '{% for x in %}..{% endfor %}')
     61 
     62     def test_recursive_loop_bug(self):
     63         tpl1 = Template('\n        {% for p in foo recursive%}\n            {{p.bar}}\n            {% for f in p.fields recursive%}\n                {{f.baz}}\n                {{p.bar}}\n                {% if f.rec %}\n                    {{ loop(f.sub) }}\n                {% endif %}\n            {% endfor %}\n        {% endfor %}\n        ')
     64         tpl2 = Template('\n        {% for p in foo%}\n            {{p.bar}}\n            {% for f in p.fields recursive%}\n                {{f.baz}}\n                {{p.bar}}\n                {% if f.rec %}\n                    {{ loop(f.sub) }}\n                {% endif %}\n            {% endfor %}\n        {% endfor %}\n        ')
     65 
     66     def test_correct_prefix_loader_name(self):
     67         env = Environment(loader=PrefixLoader({'foo': DictLoader({})}))
     68         try:
     69             env.get_template('foo/bar.html')
     70         except TemplateNotFound as e:
     71             pass
     72 
     73 
     74 def suite():
     75     suite = unittest.TestSuite()
     76     suite.addTest(unittest.makeSuite(CornerTestCase))
     77     suite.addTest(unittest.makeSuite(BugTestCase))
     78     return suite