summaryrefslogtreecommitdiff
path: root/tests/utils_tests/test_tree.py
diff options
context:
space:
mode:
authorNick Pope <nick@nickpope.me.uk>2022-07-23 13:18:04 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2022-07-27 07:58:29 +0200
commitcc52e02c96e9e26d59c6512f18516657e353cbe1 (patch)
tree0739779447faea721fb8997e6d77d4cbfdbbd101 /tests/utils_tests/test_tree.py
parent4f8bc75bc310a6a206d2d1b9550d3df313eb63eb (diff)
Refs #32948 -- Added more tests for django.utils.tree.Node.
The tests for creating new instances or copying instances of Node and its subclasses didn't fully capture the behaviour of the implementation, particularly around whether the `children` list or is contents were the same as the source.
Diffstat (limited to 'tests/utils_tests/test_tree.py')
-rw-r--r--tests/utils_tests/test_tree.py42
1 files changed, 38 insertions, 4 deletions
diff --git a/tests/utils_tests/test_tree.py b/tests/utils_tests/test_tree.py
index fcc4c3147d..81002e68c9 100644
--- a/tests/utils_tests/test_tree.py
+++ b/tests/utils_tests/test_tree.py
@@ -69,11 +69,45 @@ class NodeTests(unittest.TestCase):
self.node1.negate()
self.assertFalse(self.node1.negated)
+ def test_new_instance(self):
+ SubNode = type("SubNode", (Node,), {})
+
+ a = SubNode([SubNode(["a", "b"], OR), "c"], AND)
+ b = SubNode._new_instance(a.children, a.connector, a.negated)
+ self.assertEqual(a, b)
+ # Children lists are the same object, but equal.
+ self.assertIsNot(a.children, b.children)
+ self.assertEqual(a.children, b.children)
+ # Child Node objects are the same objects.
+ for a_child, b_child in zip(a.children, b.children):
+ if isinstance(a_child, Node):
+ self.assertIs(a_child, b_child)
+ self.assertEqual(a_child, b_child)
+
+ def test_copy(self):
+ a = Node([Node(["a", "b"], OR), "c"], AND)
+ b = copy.copy(a)
+ self.assertEqual(a, b)
+ # Children lists are the same object.
+ self.assertIs(a.children, b.children)
+ # Child Node objects are the same objects.
+ for a_child, b_child in zip(a.children, b.children):
+ if isinstance(a_child, Node):
+ self.assertIs(a_child, b_child)
+ self.assertEqual(a_child, b_child)
+
def test_deepcopy(self):
- node4 = copy.copy(self.node1)
- node5 = copy.deepcopy(self.node1)
- self.assertIs(self.node1.children, node4.children)
- self.assertIsNot(self.node1.children, node5.children)
+ a = Node([Node(["a", "b"], OR), "c"], AND)
+ b = copy.deepcopy(a)
+ self.assertEqual(a, b)
+ # Children lists are not be the same object, but equal.
+ self.assertIsNot(a.children, b.children)
+ self.assertEqual(a.children, b.children)
+ # Child Node objects are not be the same objects.
+ for a_child, b_child in zip(a.children, b.children):
+ if isinstance(a_child, Node):
+ self.assertIsNot(a_child, b_child)
+ self.assertEqual(a_child, b_child)
def test_eq_children(self):
node = Node(self.node1_children)