summaryrefslogtreecommitdiff
path: root/tests/utils_tests
diff options
context:
space:
mode:
authorfarhan <farhanalirazaazeemi@gmail.com>2025-06-03 10:32:34 +0500
committernessita <124304+nessita@users.noreply.github.com>2025-08-14 21:53:14 -0300
commit5e06b970956af4854e970e74990cb971ba31c96b (patch)
tree59fb79f5e255298625af1ad072ad4026e64f582d /tests/utils_tests
parentfda3c1712a1eb7b20dfc91e6c9abae32bd64d081 (diff)
Fixed #36410 -- Added support for Template Partials to the Django Template Language.
Introduced `{% partialdef %}` and `{% partial %}` template tags to define and render reusable named fragments within a template file. Partials can also be accessed using the `template_name#partial_name` syntax via `get_template()`, `render()`, `{% include %}`, and other template-loading tools. Adjusted `get_template()` behavior to support partial resolution, with appropriate error handling for invalid names and edge cases. Introduced `PartialTemplate` to encapsulate partial rendering behavior. Includes tests and internal refactors to support partial context binding, exception reporting, and tag validation. Co-authored-by: Carlton Gibson <carlton@noumenal.es> Co-authored-by: Natalia <124304+nessita@users.noreply.github.com> Co-authored-by: Nick Pope <nick@nickpope.me.uk>
Diffstat (limited to 'tests/utils_tests')
-rw-r--r--tests/utils_tests/test_datastructures.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/utils_tests/test_datastructures.py b/tests/utils_tests/test_datastructures.py
index d5d90b68fc..460ff0042e 100644
--- a/tests/utils_tests/test_datastructures.py
+++ b/tests/utils_tests/test_datastructures.py
@@ -9,6 +9,7 @@ import pickle
from django.test import SimpleTestCase
from django.utils.datastructures import (
CaseInsensitiveMapping,
+ DeferredSubDict,
DictWrapper,
ImmutableList,
MultiValueDict,
@@ -367,3 +368,42 @@ class CaseInsensitiveMappingTests(SimpleTestCase):
with self.assertRaisesMessage(TypeError, msg):
self.dict1["New Key"] = 1
self.assertEqual(len(self.dict1), 2)
+
+
+class DeferredSubDictTests(SimpleTestCase):
+ def test_basic(self):
+ parent = {
+ "settings": {"theme": "dark", "language": "en"},
+ "config": {"enabled": True, "timeout": 30},
+ }
+ sub = DeferredSubDict(parent, "settings")
+ self.assertEqual(sub["theme"], "dark")
+ self.assertEqual(sub["language"], "en")
+ with self.assertRaises(KeyError):
+ sub["enabled"]
+
+ def test_reflects_changes_in_parent(self):
+ parent = {"settings": {"theme": "dark"}}
+ sub = DeferredSubDict(parent, "settings")
+ parent["settings"]["theme"] = "light"
+ self.assertEqual(sub["theme"], "light")
+ parent["settings"]["mode"] = "tight"
+ self.assertEqual(sub["mode"], "tight")
+
+ def test_missing_deferred_key_raises_keyerror(self):
+ parent = {"settings": {"theme": "dark"}}
+ sub = DeferredSubDict(parent, "nonexistent")
+ with self.assertRaises(KeyError):
+ sub["anything"]
+
+ def test_missing_child_key_raises_keyerror(self):
+ parent = {"settings": {"theme": "dark"}}
+ sub = DeferredSubDict(parent, "settings")
+ with self.assertRaises(KeyError):
+ sub["nonexistent"]
+
+ def test_child_not_a_dict_raises_typeerror(self):
+ parent = {"bad": "not_a_dict"}
+ sub = DeferredSubDict(parent, "bad")
+ with self.assertRaises(TypeError):
+ sub["any_key"]