mirror of
https://github.com/django/django.git
synced 2025-10-27 15:46:10 +00:00
Fixed #36559 -- Respected verbatim and comment blocks in PartialTemplate.source.
This commit is contained in:
@@ -32,33 +32,6 @@ class PartialTagsTests(TestCase):
|
||||
):
|
||||
engine.get_template(template_name)
|
||||
|
||||
def test_template_source_is_correct(self):
|
||||
partial = engine.get_template("partial_examples.html#test-partial")
|
||||
msg = (
|
||||
"PartialTemplate.source is only available when "
|
||||
"template debugging is enabled."
|
||||
)
|
||||
with self.assertRaisesMessage(RuntimeWarning, msg):
|
||||
self.assertEqual(
|
||||
partial.template.source,
|
||||
"{% partialdef test-partial %}\n"
|
||||
"TEST-PARTIAL-CONTENT\n"
|
||||
"{% endpartialdef %}",
|
||||
)
|
||||
|
||||
def test_template_source_inline_is_correct(self):
|
||||
partial = engine.get_template("partial_examples.html#inline-partial")
|
||||
msg = (
|
||||
"PartialTemplate.source is only available when "
|
||||
"template debugging is enabled."
|
||||
)
|
||||
with self.assertRaisesMessage(RuntimeWarning, msg):
|
||||
self.assertEqual(
|
||||
partial.template.source,
|
||||
"{% partialdef inline-partial inline %}\nINLINE-CONTENT\n"
|
||||
"{% endpartialdef %}",
|
||||
)
|
||||
|
||||
def test_full_template_from_loader(self):
|
||||
template = engine.get_template("partial_examples.html")
|
||||
rendered = template.render({})
|
||||
@@ -172,12 +145,7 @@ class PartialTagsTests(TestCase):
|
||||
"PartialTemplate.source is only available when template "
|
||||
"debugging is enabled.",
|
||||
):
|
||||
self.assertEqual(
|
||||
partial.template.source,
|
||||
"{% partialdef test-partial %}\n"
|
||||
"TEST-PARTIAL-CONTENT\n"
|
||||
"{% endpartialdef %}",
|
||||
)
|
||||
self.assertEqual(partial.template.source, "")
|
||||
|
||||
|
||||
class RobustPartialHandlingTests(TestCase):
|
||||
@@ -287,6 +255,20 @@ INLINE-CONTENT
|
||||
{% endpartialdef %}"""
|
||||
self.assertEqual(partial_proxy.source.strip(), expected.strip())
|
||||
|
||||
def test_find_partial_source_fallback_cases(self):
|
||||
cases = {"None offsets": (None, None), "Out of bounds offsets": (10, 20)}
|
||||
for name, (source_start, source_end) in cases.items():
|
||||
with self.subTest(name):
|
||||
partial = PartialTemplate(
|
||||
NodeList(),
|
||||
Origin("test"),
|
||||
"test",
|
||||
source_start=source_start,
|
||||
source_end=source_end,
|
||||
)
|
||||
result = partial.find_partial_source("nonexistent-partial")
|
||||
self.assertEqual(result, "")
|
||||
|
||||
@setup(
|
||||
{
|
||||
"empty_partial_template": ("{% partialdef empty %}{% endpartialdef %}"),
|
||||
@@ -297,7 +279,7 @@ INLINE-CONTENT
|
||||
template = self.engine.get_template("empty_partial_template")
|
||||
partial_proxy = template.extra_data["partials"]["empty"]
|
||||
|
||||
result = partial_proxy.find_partial_source(template.source, "empty")
|
||||
result = partial_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(result, "{% partialdef empty %}{% endpartialdef %}")
|
||||
|
||||
@setup(
|
||||
@@ -315,10 +297,10 @@ INLINE-CONTENT
|
||||
empty_proxy = template.extra_data["partials"]["empty"]
|
||||
other_proxy = template.extra_data["partials"]["other"]
|
||||
|
||||
empty_result = empty_proxy.find_partial_source(template.source, "empty")
|
||||
empty_result = empty_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(empty_result, "{% partialdef empty %}{% endpartialdef %}")
|
||||
|
||||
other_result = other_proxy.find_partial_source(template.source, "other")
|
||||
other_result = other_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(other_result, "{% partialdef other %}...{% endpartialdef %}")
|
||||
|
||||
def test_partials_with_duplicate_names(self):
|
||||
@@ -368,7 +350,7 @@ INLINE-CONTENT
|
||||
template = self.engine.get_template("named_end_tag_template")
|
||||
partial_proxy = template.extra_data["partials"]["thing"]
|
||||
|
||||
result = partial_proxy.find_partial_source(template.source, "thing")
|
||||
result = partial_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(
|
||||
result, "{% partialdef thing %}CONTENT{% endpartialdef thing %}"
|
||||
)
|
||||
@@ -389,7 +371,7 @@ INLINE-CONTENT
|
||||
empty_proxy = template.extra_data["partials"]["outer"]
|
||||
other_proxy = template.extra_data["partials"]["inner"]
|
||||
|
||||
outer_result = empty_proxy.find_partial_source(template.source, "outer")
|
||||
outer_result = empty_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(
|
||||
outer_result,
|
||||
(
|
||||
@@ -398,7 +380,7 @@ INLINE-CONTENT
|
||||
),
|
||||
)
|
||||
|
||||
inner_result = other_proxy.find_partial_source(template.source, "inner")
|
||||
inner_result = other_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(inner_result, "{% partialdef inner %}...{% endpartialdef %}")
|
||||
|
||||
@setup(
|
||||
@@ -417,7 +399,7 @@ INLINE-CONTENT
|
||||
empty_proxy = template.extra_data["partials"]["outer"]
|
||||
other_proxy = template.extra_data["partials"]["inner"]
|
||||
|
||||
outer_result = empty_proxy.find_partial_source(template.source, "outer")
|
||||
outer_result = empty_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(
|
||||
outer_result,
|
||||
(
|
||||
@@ -426,7 +408,7 @@ INLINE-CONTENT
|
||||
),
|
||||
)
|
||||
|
||||
inner_result = other_proxy.find_partial_source(template.source, "inner")
|
||||
inner_result = other_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(
|
||||
inner_result, "{% partialdef inner %}...{% endpartialdef inner %}"
|
||||
)
|
||||
@@ -447,7 +429,7 @@ INLINE-CONTENT
|
||||
empty_proxy = template.extra_data["partials"]["outer"]
|
||||
other_proxy = template.extra_data["partials"]["inner"]
|
||||
|
||||
outer_result = empty_proxy.find_partial_source(template.source, "outer")
|
||||
outer_result = empty_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(
|
||||
outer_result,
|
||||
(
|
||||
@@ -456,7 +438,7 @@ INLINE-CONTENT
|
||||
),
|
||||
)
|
||||
|
||||
inner_result = other_proxy.find_partial_source(template.source, "inner")
|
||||
inner_result = other_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(inner_result, "{% partialdef inner %}...{% endpartialdef %}")
|
||||
|
||||
@setup(
|
||||
@@ -475,7 +457,7 @@ INLINE-CONTENT
|
||||
empty_proxy = template.extra_data["partials"]["outer"]
|
||||
other_proxy = template.extra_data["partials"]["inner"]
|
||||
|
||||
outer_result = empty_proxy.find_partial_source(template.source, "outer")
|
||||
outer_result = empty_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(
|
||||
outer_result,
|
||||
(
|
||||
@@ -484,7 +466,138 @@ INLINE-CONTENT
|
||||
),
|
||||
)
|
||||
|
||||
inner_result = other_proxy.find_partial_source(template.source, "inner")
|
||||
inner_result = other_proxy.find_partial_source(template.source)
|
||||
self.assertEqual(
|
||||
inner_result, "{% partialdef inner %}...{% endpartialdef inner %}"
|
||||
)
|
||||
|
||||
@setup(
|
||||
{
|
||||
"partial_embedded_in_verbatim": (
|
||||
"{% verbatim %}\n"
|
||||
"{% partialdef testing-name %}\n"
|
||||
"<p>Should be ignored</p>"
|
||||
"{% endpartialdef testing-name %}\n"
|
||||
"{% endverbatim %}\n"
|
||||
"{% partialdef testing-name %}\n"
|
||||
"<p>Content</p>\n"
|
||||
"{% endpartialdef %}\n"
|
||||
),
|
||||
},
|
||||
debug_only=True,
|
||||
)
|
||||
def test_partial_template_embedded_in_verbatim(self):
|
||||
template = self.engine.get_template("partial_embedded_in_verbatim")
|
||||
partial_template = template.extra_data["partials"]["testing-name"]
|
||||
self.assertEqual(
|
||||
partial_template.source,
|
||||
"{% partialdef testing-name %}\n<p>Content</p>\n{% endpartialdef %}",
|
||||
)
|
||||
|
||||
@setup(
|
||||
{
|
||||
"partial_debug_source": (
|
||||
"{% partialdef testing-name %}\n"
|
||||
"<p>Content</p>\n"
|
||||
"{% endpartialdef %}\n"
|
||||
),
|
||||
},
|
||||
debug_only=True,
|
||||
)
|
||||
def test_partial_source_uses_offsets_in_debug(self):
|
||||
template = self.engine.get_template("partial_debug_source")
|
||||
partial_template = template.extra_data["partials"]["testing-name"]
|
||||
|
||||
self.assertEqual(partial_template._source_start, 0)
|
||||
self.assertEqual(partial_template._source_end, 64)
|
||||
expected = template.source[
|
||||
partial_template._source_start : partial_template._source_end
|
||||
]
|
||||
self.assertEqual(partial_template.source, expected)
|
||||
|
||||
@setup(
|
||||
{
|
||||
"partial_embedded_in_named_verbatim": (
|
||||
"{% verbatim block1 %}\n"
|
||||
"{% partialdef testing-name %}\n"
|
||||
"{% endverbatim block1 %}\n"
|
||||
"{% partialdef testing-name %}\n"
|
||||
"<p>Named Content</p>\n"
|
||||
"{% endpartialdef %}\n"
|
||||
),
|
||||
},
|
||||
debug_only=True,
|
||||
)
|
||||
def test_partial_template_embedded_in_named_verbatim(self):
|
||||
template = self.engine.get_template("partial_embedded_in_named_verbatim")
|
||||
partial_template = template.extra_data["partials"]["testing-name"]
|
||||
self.assertEqual(
|
||||
"{% partialdef testing-name %}\n<p>Named Content</p>\n{% endpartialdef %}",
|
||||
partial_template.source,
|
||||
)
|
||||
|
||||
@setup(
|
||||
{
|
||||
"partial_embedded_in_comment_block": (
|
||||
"{% comment %}\n"
|
||||
"{% partialdef testing-name %}\n"
|
||||
"{% endcomment %}\n"
|
||||
"{% partialdef testing-name %}\n"
|
||||
"<p>Comment Content</p>\n"
|
||||
"{% endpartialdef %}\n"
|
||||
),
|
||||
},
|
||||
debug_only=True,
|
||||
)
|
||||
def test_partial_template_embedded_in_comment_block(self):
|
||||
template = self.engine.get_template("partial_embedded_in_comment_block")
|
||||
partial_template = template.extra_data["partials"]["testing-name"]
|
||||
self.assertEqual(
|
||||
partial_template.source,
|
||||
"{% partialdef testing-name %}\n"
|
||||
"<p>Comment Content</p>\n"
|
||||
"{% endpartialdef %}",
|
||||
)
|
||||
|
||||
@setup(
|
||||
{
|
||||
"partial_embedded_in_inline_comment": (
|
||||
"{# {% partialdef testing-name %} #}\n"
|
||||
"{% partialdef testing-name %}\n"
|
||||
"<p>Inline Comment Content</p>\n"
|
||||
"{% endpartialdef %}\n"
|
||||
),
|
||||
},
|
||||
debug_only=True,
|
||||
)
|
||||
def test_partial_template_embedded_in_inline_comment(self):
|
||||
template = self.engine.get_template("partial_embedded_in_inline_comment")
|
||||
partial_template = template.extra_data["partials"]["testing-name"]
|
||||
self.assertEqual(
|
||||
partial_template.source,
|
||||
"{% partialdef testing-name %}\n"
|
||||
"<p>Inline Comment Content</p>\n"
|
||||
"{% endpartialdef %}",
|
||||
)
|
||||
|
||||
@setup(
|
||||
{
|
||||
"partial_contains_fake_end_inside_verbatim": (
|
||||
"{% partialdef testing-name %}\n"
|
||||
"{% verbatim %}{% endpartialdef %}{% endverbatim %}\n"
|
||||
"<p>Body</p>\n"
|
||||
"{% endpartialdef %}\n"
|
||||
),
|
||||
},
|
||||
debug_only=True,
|
||||
)
|
||||
def test_partial_template_contains_fake_end_inside_verbatim(self):
|
||||
template = self.engine.get_template("partial_contains_fake_end_inside_verbatim")
|
||||
partial_template = template.extra_data["partials"]["testing-name"]
|
||||
self.assertEqual(
|
||||
partial_template.source,
|
||||
"{% partialdef testing-name %}\n"
|
||||
"{% verbatim %}{% endpartialdef %}{% endverbatim %}\n"
|
||||
"<p>Body</p>\n"
|
||||
"{% endpartialdef %}",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user