32
32
#define TEST_NODE_2D_H
33
33
34
34
#include " scene/2d/node_2d.h"
35
+ #include " scene/main/window.h"
35
36
36
37
#include " tests/test_macros.h"
37
38
@@ -56,6 +57,33 @@ TEST_CASE("[SceneTree][Node2D]") {
56
57
memdelete (test_child);
57
58
memdelete (test_node);
58
59
}
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
+ }
59
87
}
60
88
61
89
} // namespace TestNode2D
0 commit comments