Skip to content

Commit dfbd690

Browse files
committed
Merge pull request #87270 from Sauermann/fix-unittest-add-detached-child
Test global transform when adding detached tree
2 parents 29116a8 + 689dfd7 commit dfbd690

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

tests/scene/test_node_2d.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#define TEST_NODE_2D_H
3333

3434
#include "scene/2d/node_2d.h"
35+
#include "scene/main/window.h"
3536

3637
#include "tests/test_macros.h"
3738

@@ -56,6 +57,33 @@ TEST_CASE("[SceneTree][Node2D]") {
5657
memdelete(test_child);
5758
memdelete(test_node);
5859
}
60+
61+
SUBCASE("[Node2D][Global Transform] Global Transform should be correct after inserting node from detached tree into SceneTree.") { // GH-86841
62+
Node2D *main = memnew(Node2D);
63+
Node2D *outer = memnew(Node2D);
64+
Node2D *inner = memnew(Node2D);
65+
SceneTree::get_singleton()->get_root()->add_child(main);
66+
67+
main->set_position(Point2(100, 100));
68+
outer->set_position(Point2(10, 0));
69+
inner->set_position(Point2(0, 10));
70+
71+
outer->add_child(inner);
72+
// `inner` is still detached.
73+
CHECK_EQ(inner->get_global_position(), Point2(10, 10));
74+
75+
main->add_child(outer);
76+
// `inner` is in scene tree.
77+
CHECK_EQ(inner->get_global_position(), Point2(110, 110));
78+
79+
main->remove_child(outer);
80+
// `inner` is detached again.
81+
CHECK_EQ(inner->get_global_position(), Point2(10, 10));
82+
83+
memdelete(inner);
84+
memdelete(outer);
85+
memdelete(main);
86+
}
5987
}
6088

6189
} // namespace TestNode2D

0 commit comments

Comments
 (0)