mirror of
https://github.com/django/django.git
synced 2025-08-03 18:38:50 +00:00
Fixed #23768 -- Rewrote template tests as unit tests.
This commit is contained in:
parent
4a4ad27712
commit
b872134bfc
41 changed files with 4855 additions and 1369 deletions
179
tests/template_tests/syntax_tests/test_for.py
Normal file
179
tests/template_tests/syntax_tests/test_for.py
Normal file
|
@ -0,0 +1,179 @@
|
|||
import warnings
|
||||
|
||||
from django.conf import settings
|
||||
from django.template.base import TemplateSyntaxError
|
||||
from django.test import TestCase
|
||||
from django.utils.deprecation import RemovedInDjango20Warning
|
||||
|
||||
from .utils import render, setup
|
||||
|
||||
|
||||
class ForTagTests(TestCase):
|
||||
|
||||
@setup({'for-tag01': '{% for val in values %}{{ val }}{% endfor %}'})
|
||||
def test_for_tag01(self):
|
||||
output = render('for-tag01', {'values': [1, 2, 3]})
|
||||
self.assertEqual(output, '123')
|
||||
|
||||
@setup({'for-tag02': '{% for val in values reversed %}{{ val }}{% endfor %}'})
|
||||
def test_for_tag02(self):
|
||||
output = render('for-tag02', {'values': [1, 2, 3]})
|
||||
self.assertEqual(output, '321')
|
||||
|
||||
@setup({'for-tag-vars01': '{% for val in values %}{{ forloop.counter }}{% endfor %}'})
|
||||
def test_for_tag_vars01(self):
|
||||
output = render('for-tag-vars01', {'values': [6, 6, 6]})
|
||||
self.assertEqual(output, '123')
|
||||
|
||||
@setup({'for-tag-vars02': '{% for val in values %}{{ forloop.counter0 }}{% endfor %}'})
|
||||
def test_for_tag_vars02(self):
|
||||
output = render('for-tag-vars02', {'values': [6, 6, 6]})
|
||||
self.assertEqual(output, '012')
|
||||
|
||||
@setup({'for-tag-vars03': '{% for val in values %}{{ forloop.revcounter }}{% endfor %}'})
|
||||
def test_for_tag_vars03(self):
|
||||
output = render('for-tag-vars03', {'values': [6, 6, 6]})
|
||||
self.assertEqual(output, '321')
|
||||
|
||||
@setup({'for-tag-vars04': '{% for val in values %}{{ forloop.revcounter0 }}{% endfor %}'})
|
||||
def test_for_tag_vars04(self):
|
||||
output = render('for-tag-vars04', {'values': [6, 6, 6]})
|
||||
self.assertEqual(output, '210')
|
||||
|
||||
@setup({'for-tag-vars05': '{% for val in values %}'
|
||||
'{% if forloop.first %}f{% else %}x{% endif %}{% endfor %}'})
|
||||
def test_for_tag_vars05(self):
|
||||
output = render('for-tag-vars05', {'values': [6, 6, 6]})
|
||||
self.assertEqual(output, 'fxx')
|
||||
|
||||
@setup({'for-tag-vars06': '{% for val in values %}'
|
||||
'{% if forloop.last %}l{% else %}x{% endif %}{% endfor %}'})
|
||||
def test_for_tag_vars06(self):
|
||||
output = render('for-tag-vars06', {'values': [6, 6, 6]})
|
||||
self.assertEqual(output, 'xxl')
|
||||
|
||||
@setup({'for-tag-unpack01': '{% for key,value in items %}{{ key }}:{{ value }}/{% endfor %}'})
|
||||
def test_for_tag_unpack01(self):
|
||||
output = render('for-tag-unpack01', {'items': (('one', 1), ('two', 2))})
|
||||
self.assertEqual(output, 'one:1/two:2/')
|
||||
|
||||
@setup({'for-tag-unpack03': '{% for key, value in items %}{{ key }}:{{ value }}/{% endfor %}'})
|
||||
def test_for_tag_unpack03(self):
|
||||
output = render('for-tag-unpack03', {'items': (('one', 1), ('two', 2))})
|
||||
self.assertEqual(output, 'one:1/two:2/')
|
||||
|
||||
@setup({'for-tag-unpack04': '{% for key , value in items %}{{ key }}:{{ value }}/{% endfor %}'})
|
||||
def test_for_tag_unpack04(self):
|
||||
output = render('for-tag-unpack04', {'items': (('one', 1), ('two', 2))})
|
||||
self.assertEqual(output, 'one:1/two:2/')
|
||||
|
||||
@setup({'for-tag-unpack05': '{% for key ,value in items %}{{ key }}:{{ value }}/{% endfor %}'})
|
||||
def test_for_tag_unpack05(self):
|
||||
output = render('for-tag-unpack05', {'items': (('one', 1), ('two', 2))})
|
||||
self.assertEqual(output, 'one:1/two:2/')
|
||||
|
||||
@setup({'for-tag-unpack06': '{% for key value in items %}{{ key }}:{{ value }}/{% endfor %}'})
|
||||
def test_for_tag_unpack06(self):
|
||||
with self.assertRaises(TemplateSyntaxError):
|
||||
render('for-tag-unpack06', {'items': (('one', 1), ('two', 2))})
|
||||
|
||||
@setup({'for-tag-unpack07': '{% for key,,value in items %}{{ key }}:{{ value }}/{% endfor %}'})
|
||||
def test_for_tag_unpack07(self):
|
||||
with self.assertRaises(TemplateSyntaxError):
|
||||
render('for-tag-unpack07', {'items': (('one', 1), ('two', 2))})
|
||||
|
||||
@setup({'for-tag-unpack08': '{% for key,value, in items %}{{ key }}:{{ value }}/{% endfor %}'})
|
||||
def test_for_tag_unpack08(self):
|
||||
with self.assertRaises(TemplateSyntaxError):
|
||||
render('for-tag-unpack08', {'items': (('one', 1), ('two', 2))})
|
||||
|
||||
@setup({'for-tag-unpack09': '{% for val in items %}{{ val.0 }}:{{ val.1 }}/{% endfor %}'})
|
||||
def test_for_tag_unpack09(self):
|
||||
"""
|
||||
Ensure that a single loopvar doesn't truncate the list in val.
|
||||
"""
|
||||
output = render('for-tag-unpack09', {'items': (('one', 1), ('two', 2))})
|
||||
self.assertEqual(output, 'one:1/two:2/')
|
||||
|
||||
@setup({'for-tag-unpack13': '{% for x,y,z in items %}{{ x }}:{{ y }},{{ z }}/{% endfor %}'})
|
||||
def test_for_tag_unpack13(self):
|
||||
output = render('for-tag-unpack13', {'items': (('one', 1, 'carrot'), ('two', 2, 'cheese'))})
|
||||
if settings.TEMPLATE_STRING_IF_INVALID:
|
||||
self.assertEqual(output, 'one:1,carrot/two:2,cheese/')
|
||||
else:
|
||||
self.assertEqual(output, 'one:1,carrot/two:2,cheese/')
|
||||
|
||||
@setup({'for-tag-empty01': '{% for val in values %}{{ val }}{% empty %}empty text{% endfor %}'})
|
||||
def test_for_tag_empty01(self):
|
||||
output = render('for-tag-empty01', {'values': [1, 2, 3]})
|
||||
self.assertEqual(output, '123')
|
||||
|
||||
@setup({'for-tag-empty02': '{% for val in values %}{{ val }}{% empty %}values array empty{% endfor %}'})
|
||||
def test_for_tag_empty02(self):
|
||||
output = render('for-tag-empty02', {'values': []})
|
||||
self.assertEqual(output, 'values array empty')
|
||||
|
||||
@setup({'for-tag-empty03': '{% for val in values %}'
|
||||
'{{ val }}{% empty %}values array not found{% endfor %}'})
|
||||
def test_for_tag_empty03(self):
|
||||
output = render('for-tag-empty03')
|
||||
self.assertEqual(output, 'values array not found')
|
||||
|
||||
@setup({'for-tag-filter-ws': "{% load custom %}{% for x in s|noop:'x y' %}{{ x }}{% endfor %}"})
|
||||
def test_for_tag_filter_ws(self):
|
||||
"""
|
||||
#19882
|
||||
"""
|
||||
output = render('for-tag-filter-ws', {'s': 'abc'})
|
||||
self.assertEqual(output, 'abc')
|
||||
|
||||
# These tests raise deprecation warnings and will raise an exception
|
||||
# in Django 2.0. The existing behavior is silent truncation if the
|
||||
# length of loopvars differs to the length of each set of items.
|
||||
@setup({'for-tag-unpack10': '{% for x,y in items %}{{ x }}:{{ y }}/{% endfor %}'})
|
||||
def test_for_tag_unpack10(self):
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore", RemovedInDjango20Warning)
|
||||
output = render(
|
||||
'for-tag-unpack10',
|
||||
{'items': (('one', 1, 'carrot'), ('two', 2, 'orange'))},
|
||||
)
|
||||
self.assertEqual(output, 'one:1/two:2/')
|
||||
|
||||
@setup({'for-tag-unpack11': '{% for x,y,z in items %}{{ x }}:{{ y }},{{ z }}/{% endfor %}'})
|
||||
def test_for_tag_unpack11(self):
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore", RemovedInDjango20Warning)
|
||||
output = render(
|
||||
'for-tag-unpack11',
|
||||
{'items': (('one', 1), ('two', 2))},
|
||||
)
|
||||
|
||||
if settings.TEMPLATE_STRING_IF_INVALID:
|
||||
self.assertEqual(output, 'one:1,INVALID/two:2,INVALID/')
|
||||
else:
|
||||
self.assertEqual(output, 'one:1,/two:2,/')
|
||||
|
||||
@setup({'for-tag-unpack12': '{% for x,y,z in items %}{{ x }}:{{ y }},{{ z }}/{% endfor %}'})
|
||||
def test_for_tag_unpack12(self):
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore", RemovedInDjango20Warning)
|
||||
output = render(
|
||||
'for-tag-unpack12',
|
||||
{'items': (('one', 1, 'carrot'), ('two', 2))}
|
||||
)
|
||||
if settings.TEMPLATE_STRING_IF_INVALID:
|
||||
self.assertEqual(output, 'one:1,carrot/two:2,INVALID/')
|
||||
else:
|
||||
self.assertEqual(output, 'one:1,carrot/two:2,/')
|
||||
|
||||
@setup({'for-tag-unpack14': '{% for x,y in items %}{{ x }}:{{ y }}/{% endfor %}'})
|
||||
def test_for_tag_unpack14(self):
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore", RemovedInDjango20Warning)
|
||||
output = render('for-tag-unpack14', {'items': (1, 2)})
|
||||
|
||||
if settings.TEMPLATE_STRING_IF_INVALID:
|
||||
self.assertEqual(output, 'INVALID:INVALID/INVALID:INVALID/')
|
||||
else:
|
||||
self.assertEqual(output, ':/:/')
|
Loading…
Add table
Add a link
Reference in a new issue