diff options
| author | Jannis Leidel <jannis@leidel.info> | 2011-08-12 14:15:17 +0000 |
|---|---|---|
| committer | Jannis Leidel <jannis@leidel.info> | 2011-08-12 14:15:17 +0000 |
| commit | 958e049d4d90fb5e0fe582eb4339af3c58dd5c07 (patch) | |
| tree | 60d6fc0d96d226ab923d33d02240da2670fa4855 /tests | |
| parent | 1d485cf14ffa58dbeb130db2d50aa147556e0244 (diff) | |
Fixed #5831 -- Made sure the ForNode reports the correct source of an exception happening in one of the loops. Thanks, Charmless and vladmos.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16605 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/templates/nodelist.py | 38 | ||||
| -rw-r--r-- | tests/regressiontests/templates/templatetags/bad_tag.py | 4 | ||||
| -rw-r--r-- | tests/regressiontests/templates/tests.py | 2 |
3 files changed, 41 insertions, 3 deletions
diff --git a/tests/regressiontests/templates/nodelist.py b/tests/regressiontests/templates/nodelist.py index 48775397ae..3568424222 100644 --- a/tests/regressiontests/templates/nodelist.py +++ b/tests/regressiontests/templates/nodelist.py @@ -1,8 +1,8 @@ +from django.conf import settings +from django.template import VariableNode, Context, TemplateSyntaxError from django.template.loader import get_template_from_string -from django.template import VariableNode from django.utils.unittest import TestCase - class NodelistTest(TestCase): def test_for(self): @@ -28,3 +28,37 @@ class NodelistTest(TestCase): template = get_template_from_string(source) vars = template.nodelist.get_nodes_by_type(VariableNode) self.assertEqual(len(vars), 1) + + +class ErrorIndexTest(TestCase): + """ + Checks whether index of error is calculated correctly in + template debugger in for loops. Refs ticket #5831 + """ + def setUp(self): + self.old_template_debug = settings.TEMPLATE_DEBUG + settings.TEMPLATE_DEBUG = True + + def tearDown(self): + settings.TEMPLATE_DEBUG = self.old_template_debug + + def test_correct_exception_index(self): + tests = [ + ('{% load bad_tag %}{% for i in range %}{% badsimpletag %}{% endfor %}', (38, 56)), + ('{% load bad_tag %}{% for i in range %}{% for j in range %}{% badsimpletag %}{% endfor %}{% endfor %}', (58, 76)), + ('{% load bad_tag %}{% for i in range %}{% badsimpletag %}{% for j in range %}Hello{% endfor %}{% endfor %}', (38, 56)), + ('{% load bad_tag %}{% for i in range %}{% for j in five %}{% badsimpletag %}{% endfor %}{% endfor %}', (38, 57)), + ('{% load bad_tag %}{% for j in five %}{% badsimpletag %}{% endfor %}', (18, 37)), + ] + context = Context({ + 'range': range(5), + 'five': 5, + }) + for source, expected_error_source_index in tests: + template = get_template_from_string(source) + try: + template.render(context) + except TemplateSyntaxError, e: + error_source_index = e.source[1] + self.assertEqual(error_source_index, + expected_error_source_index) diff --git a/tests/regressiontests/templates/templatetags/bad_tag.py b/tests/regressiontests/templates/templatetags/bad_tag.py index 86c275bb05..2274395a11 100644 --- a/tests/regressiontests/templates/templatetags/bad_tag.py +++ b/tests/regressiontests/templates/templatetags/bad_tag.py @@ -5,3 +5,7 @@ register = template.Library() @register.tag def badtag(parser, token): raise RuntimeError("I am a bad tag") + +@register.simple_tag +def badsimpletag(): + raise RuntimeError("I am a bad simpletag") diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index 2481792db9..1d1efe52c7 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -32,7 +32,7 @@ from context import ContextTests from custom import CustomTagTests, CustomFilterTests from parser import ParserTests from unicode import UnicodeTests -from nodelist import NodelistTest +from nodelist import NodelistTest, ErrorIndexTest from smartif import * from response import * |
