mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #25404 -- Added line numbers to TemplateSyntaxError strings.
This makes it much easier to diagnose a test failure when all you have is the stack trace from an uncaught TemplateSyntaxError.
This commit is contained in:
		| @@ -470,7 +470,7 @@ class Parser(object): | |||||||
|                 self.extend_nodelist(nodelist, TextNode(token.contents), token) |                 self.extend_nodelist(nodelist, TextNode(token.contents), token) | ||||||
|             elif token.token_type == 1:  # TOKEN_VAR |             elif token.token_type == 1:  # TOKEN_VAR | ||||||
|                 if not token.contents: |                 if not token.contents: | ||||||
|                     raise self.error(token, 'Empty variable tag') |                     raise self.error(token, 'Empty variable tag on line %d' % token.lineno) | ||||||
|                 try: |                 try: | ||||||
|                     filter_expression = self.compile_filter(token.contents) |                     filter_expression = self.compile_filter(token.contents) | ||||||
|                 except TemplateSyntaxError as e: |                 except TemplateSyntaxError as e: | ||||||
| @@ -481,7 +481,7 @@ class Parser(object): | |||||||
|                 try: |                 try: | ||||||
|                     command = token.contents.split()[0] |                     command = token.contents.split()[0] | ||||||
|                 except IndexError: |                 except IndexError: | ||||||
|                     raise self.error(token, 'Empty block tag') |                     raise self.error(token, 'Empty block tag on line %d' % token.lineno) | ||||||
|                 if command in parse_until: |                 if command in parse_until: | ||||||
|                     # A matching token has been reached. Return control to |                     # A matching token has been reached. Return control to | ||||||
|                     # the caller. Put the token back on the token list so the |                     # the caller. Put the token back on the token list so the | ||||||
| @@ -545,13 +545,23 @@ class Parser(object): | |||||||
|  |  | ||||||
|     def invalid_block_tag(self, token, command, parse_until=None): |     def invalid_block_tag(self, token, command, parse_until=None): | ||||||
|         if parse_until: |         if parse_until: | ||||||
|             raise self.error(token, "Invalid block tag: '%s', expected %s" % |             raise self.error( | ||||||
|                 (command, get_text_list(["'%s'" % p for p in parse_until]))) |                 token, | ||||||
|         raise self.error(token, "Invalid block tag: '%s'" % command) |                 "Invalid block tag on line %d: '%s', expected %s" % ( | ||||||
|  |                     token.lineno, | ||||||
|  |                     command, | ||||||
|  |                     get_text_list(["'%s'" % p for p in parse_until]), | ||||||
|  |                 ), | ||||||
|  |             ) | ||||||
|  |         raise self.error(token, "Invalid block tag on line %d: '%s'" % (token.lineno, command)) | ||||||
|  |  | ||||||
|     def unclosed_block_tag(self, parse_until): |     def unclosed_block_tag(self, parse_until): | ||||||
|         command, token = self.command_stack.pop() |         command, token = self.command_stack.pop() | ||||||
|         msg = "Unclosed tag '%s'. Looking for one of: %s." % (command, ', '.join(parse_until)) |         msg = "Unclosed tag on line %d: '%s'. Looking for one of: %s." % ( | ||||||
|  |             token.lineno, | ||||||
|  |             command, | ||||||
|  |             ', '.join(parse_until), | ||||||
|  |         ) | ||||||
|         raise self.error(token, msg) |         raise self.error(token, msg) | ||||||
|  |  | ||||||
|     def next_token(self): |     def next_token(self): | ||||||
|   | |||||||
| @@ -61,7 +61,7 @@ class BasicSyntaxTests(SimpleTestCase): | |||||||
|         """ |         """ | ||||||
|         Raise TemplateSyntaxError for empty variable tags. |         Raise TemplateSyntaxError for empty variable tags. | ||||||
|         """ |         """ | ||||||
|         with self.assertRaises(TemplateSyntaxError): |         with self.assertRaisesMessage(TemplateSyntaxError, 'Empty variable tag on line 1'): | ||||||
|             self.engine.get_template('basic-syntax07') |             self.engine.get_template('basic-syntax07') | ||||||
|  |  | ||||||
|     @setup({'basic-syntax08': '{{        }}'}) |     @setup({'basic-syntax08': '{{        }}'}) | ||||||
| @@ -69,7 +69,7 @@ class BasicSyntaxTests(SimpleTestCase): | |||||||
|         """ |         """ | ||||||
|         Raise TemplateSyntaxError for empty variable tags. |         Raise TemplateSyntaxError for empty variable tags. | ||||||
|         """ |         """ | ||||||
|         with self.assertRaises(TemplateSyntaxError): |         with self.assertRaisesMessage(TemplateSyntaxError, 'Empty variable tag on line 1'): | ||||||
|             self.engine.get_template('basic-syntax08') |             self.engine.get_template('basic-syntax08') | ||||||
|  |  | ||||||
|     @setup({'basic-syntax09': '{{ var.method }}'}) |     @setup({'basic-syntax09': '{{ var.method }}'}) | ||||||
| @@ -314,13 +314,13 @@ class BasicSyntaxTests(SimpleTestCase): | |||||||
|  |  | ||||||
|     @setup({'template': '{% block content %}'}) |     @setup({'template': '{% block content %}'}) | ||||||
|     def test_unclosed_block(self): |     def test_unclosed_block(self): | ||||||
|         msg = "Unclosed tag 'block'. Looking for one of: endblock." |         msg = "Unclosed tag on line 1: 'block'. Looking for one of: endblock." | ||||||
|         with self.assertRaisesMessage(TemplateSyntaxError, msg): |         with self.assertRaisesMessage(TemplateSyntaxError, msg): | ||||||
|             self.engine.render_to_string('template') |             self.engine.render_to_string('template') | ||||||
|  |  | ||||||
|     @setup({'template': '{% if a %}'}) |     @setup({'template': '{% if a %}'}) | ||||||
|     def test_unclosed_block2(self): |     def test_unclosed_block2(self): | ||||||
|         msg = "Unclosed tag 'if'. Looking for one of: elif, else, endif." |         msg = "Unclosed tag on line 1: 'if'. Looking for one of: elif, else, endif." | ||||||
|         with self.assertRaisesMessage(TemplateSyntaxError, msg): |         with self.assertRaisesMessage(TemplateSyntaxError, msg): | ||||||
|             self.engine.render_to_string('template') |             self.engine.render_to_string('template') | ||||||
|  |  | ||||||
|   | |||||||
| @@ -71,9 +71,18 @@ class FilterSyntaxTests(SimpleTestCase): | |||||||
|         """ |         """ | ||||||
|         Raise TemplateSyntaxError for empty block tags |         Raise TemplateSyntaxError for empty block tags | ||||||
|         """ |         """ | ||||||
|         with self.assertRaises(TemplateSyntaxError): |         with self.assertRaisesMessage(TemplateSyntaxError, 'Empty block tag on line 1'): | ||||||
|             self.engine.get_template('filter-syntax08') |             self.engine.get_template('filter-syntax08') | ||||||
|  |  | ||||||
|  |     @setup({'filter-syntax08-multi-line': "line 1\nline 2\nline 3{% %}\nline 4\nline 5"}) | ||||||
|  |     def test_filter_syntax08_multi_line(self): | ||||||
|  |         """ | ||||||
|  |         Raise TemplateSyntaxError for empty block tags in templates with | ||||||
|  |         multiple lines. | ||||||
|  |         """ | ||||||
|  |         with self.assertRaisesMessage(TemplateSyntaxError, 'Empty block tag on line 3'): | ||||||
|  |             self.engine.get_template('filter-syntax08-multi-line') | ||||||
|  |  | ||||||
|     @setup({'filter-syntax09': '{{ var|cut:"o"|upper|lower }}'}) |     @setup({'filter-syntax09': '{{ var|cut:"o"|upper|lower }}'}) | ||||||
|     def test_filter_syntax09(self): |     def test_filter_syntax09(self): | ||||||
|         """ |         """ | ||||||
|   | |||||||
| @@ -74,7 +74,7 @@ class TemplateTests(SimpleTestCase): | |||||||
|  |  | ||||||
|         self.assertEqual( |         self.assertEqual( | ||||||
|             e.exception.args[0], |             e.exception.args[0], | ||||||
|             "Invalid block tag: 'endblock', expected 'elif', 'else' or 'endif'", |             "Invalid block tag on line 1: 'endblock', expected 'elif', 'else' or 'endif'", | ||||||
|         ) |         ) | ||||||
|  |  | ||||||
|     def test_compile_filter_expression_error(self): |     def test_compile_filter_expression_error(self): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user