summaryrefslogtreecommitdiffstats
path: root/tests/scene
diff options
context:
space:
mode:
authorSeptian <septgsk@gmail.com>2023-08-09 00:12:34 +0700
committerSeptian <septgsk@gmail.com>2023-08-09 00:28:53 +0700
commit56d7ff6e93bcf720983f6d57671953508116e541 (patch)
tree4bf47f93e02d0898f52f2b9cfec901e173823840 /tests/scene
parentf2acfb1ffc94d0e381064070108e7a773d86177d (diff)
downloadredot-engine-56d7ff6e93bcf720983f6d57671953508116e541.tar.gz
Improve PackedScene unit test for complex scene
Diffstat (limited to 'tests/scene')
-rw-r--r--tests/scene/test_packed_scene.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/scene/test_packed_scene.h b/tests/scene/test_packed_scene.h
index 9e525ab5bf..3517aba31f 100644
--- a/tests/scene/test_packed_scene.h
+++ b/tests/scene/test_packed_scene.h
@@ -109,6 +109,47 @@ TEST_CASE("[PackedScene] Instantiate Packed Scene") {
memdelete(instance);
}
+TEST_CASE("[PackedScene] Instantiate Packed Scene With Children") {
+ // Create a scene to pack.
+ Node *scene = memnew(Node);
+ scene->set_name("TestScene");
+
+ // Add persisting child nodes to the scene.
+ Node *child1 = memnew(Node);
+ child1->set_name("Child1");
+ scene->add_child(child1);
+ child1->set_owner(scene);
+
+ Node *child2 = memnew(Node);
+ child2->set_name("Child2");
+ scene->add_child(child2);
+ child2->set_owner(scene);
+
+ // Add non persisting child node to the scene.
+ Node *child3 = memnew(Node);
+ child3->set_name("Child3");
+ scene->add_child(child3);
+
+ // Pack the scene.
+ PackedScene packed_scene;
+ packed_scene.pack(scene);
+
+ // Instantiate the packed scene.
+ Node *instance = packed_scene.instantiate();
+ CHECK(instance != nullptr);
+ CHECK(instance->get_name() == "TestScene");
+
+ // Validate the child nodes of the instantiated scene.
+ CHECK(instance->get_child_count() == 2);
+ CHECK(instance->get_child(0)->get_name() == "Child1");
+ CHECK(instance->get_child(1)->get_name() == "Child2");
+ CHECK(instance->get_child(0)->get_owner() == instance);
+ CHECK(instance->get_child(1)->get_owner() == instance);
+
+ memdelete(scene);
+ memdelete(instance);
+}
+
} // namespace TestPackedScene
#endif // TEST_PACKED_SCENE_H