diff --git a/tests/scene/test_sky.h b/tests/scene/test_sky.h index 812ea9b5ad5..dd48172b9c1 100644 --- a/tests/scene/test_sky.h +++ b/tests/scene/test_sky.h @@ -38,16 +38,17 @@ namespace TestSky { TEST_CASE("[SceneTree][Sky] Constructor") { - Sky *test_sky = memnew(Sky); + Ref test_sky; + test_sky.instantiate(); CHECK(test_sky->get_process_mode() == Sky::PROCESS_MODE_AUTOMATIC); CHECK(test_sky->get_radiance_size() == Sky::RADIANCE_SIZE_256); CHECK(test_sky->get_material().is_null()); - memdelete(test_sky); } TEST_CASE("[SceneTree][Sky] Radiance size setter and getter") { - Sky *test_sky = memnew(Sky); + Ref test_sky; + test_sky.instantiate(); // Check default. CHECK(test_sky->get_radiance_size() == Sky::RADIANCE_SIZE_256); @@ -61,25 +62,25 @@ TEST_CASE("[SceneTree][Sky] Radiance size setter and getter") { ERR_PRINT_ON; CHECK(test_sky->get_radiance_size() == Sky::RADIANCE_SIZE_1024); - - memdelete(test_sky); } TEST_CASE("[SceneTree][Sky] Process mode setter and getter") { - Sky *test_sky = memnew(Sky); + Ref test_sky; + test_sky.instantiate(); // Check default. CHECK(test_sky->get_process_mode() == Sky::PROCESS_MODE_AUTOMATIC); test_sky->set_process_mode(Sky::PROCESS_MODE_INCREMENTAL); CHECK(test_sky->get_process_mode() == Sky::PROCESS_MODE_INCREMENTAL); - - memdelete(test_sky); } TEST_CASE("[SceneTree][Sky] Material setter and getter") { - Sky *test_sky = memnew(Sky); - Ref material = memnew(Material); + Ref test_sky; + test_sky.instantiate(); + + Ref material; + material.instantiate(); SUBCASE("Material passed to the class should remain the same") { test_sky->set_material(material); @@ -92,8 +93,10 @@ TEST_CASE("[SceneTree][Sky] Material setter and getter") { CHECK(test_sky->get_material() == material); } SUBCASE("Material rewrite testing") { - Ref material1 = memnew(Material); - Ref material2 = memnew(Material); + Ref material1; + Ref material2; + material1.instantiate(); + material2.instantiate(); test_sky->set_material(material1); test_sky->set_material(material2); @@ -104,19 +107,22 @@ TEST_CASE("[SceneTree][Sky] Material setter and getter") { } SUBCASE("Assign same material to two skys") { - Sky *sky2 = memnew(Sky); + Ref sky2; + sky2.instantiate(); test_sky->set_material(material); sky2->set_material(material); CHECK_MESSAGE(test_sky->get_material() == sky2->get_material(), "Both skys should have the same material."); - memdelete(sky2); } SUBCASE("Swapping materials between two skys") { - Sky *sky2 = memnew(Sky); - Ref material1 = memnew(Material); - Ref material2 = memnew(Material); + Ref sky2; + sky2.instantiate(); + Ref material1; + Ref material2; + material1.instantiate(); + material2.instantiate(); test_sky->set_material(material1); sky2->set_material(material2); @@ -130,10 +136,85 @@ TEST_CASE("[SceneTree][Sky] Material setter and getter") { CHECK(test_sky->get_material() == material2); CHECK(sky2->get_material() == material1); - memdelete(sky2); + } +} + +TEST_CASE("[SceneTree][Sky] Invalid radiance size handling") { + Ref test_sky; + test_sky.instantiate(); + + // Attempt to set an invalid radiance size. + ERR_PRINT_OFF; + test_sky->set_radiance_size(Sky::RADIANCE_SIZE_MAX); + ERR_PRINT_ON; + + // Verify that the radiance size remains unchanged. + CHECK(test_sky->get_radiance_size() == Sky::RADIANCE_SIZE_256); +} + +TEST_CASE("[SceneTree][Sky] Process mode variations") { + Ref test_sky; + test_sky.instantiate(); + + // Test all process modes. + const Sky::ProcessMode process_modes[] = { + Sky::PROCESS_MODE_AUTOMATIC, + Sky::PROCESS_MODE_QUALITY, + Sky::PROCESS_MODE_INCREMENTAL, + Sky::PROCESS_MODE_REALTIME + }; + + for (Sky::ProcessMode mode : process_modes) { + test_sky->set_process_mode(mode); + CHECK(test_sky->get_process_mode() == mode); + } +} + +TEST_CASE("[SceneTree][Sky] Radiance size variations") { + Ref test_sky; + test_sky.instantiate(); + + // Test all radiance sizes except MAX. + const Sky::RadianceSize radiance_sizes[] = { + Sky::RADIANCE_SIZE_32, + Sky::RADIANCE_SIZE_64, + Sky::RADIANCE_SIZE_128, + Sky::RADIANCE_SIZE_256, + Sky::RADIANCE_SIZE_512, + Sky::RADIANCE_SIZE_1024, + Sky::RADIANCE_SIZE_2048 + }; + + for (Sky::RadianceSize size : radiance_sizes) { + test_sky->set_radiance_size(size); + CHECK(test_sky->get_radiance_size() == size); + } +} + +TEST_CASE("[SceneTree][Sky] Null material handling") { + Ref test_sky; + test_sky.instantiate(); + + SUBCASE("Setting null material") { + test_sky->set_material(Ref()); + CHECK(test_sky->get_material().is_null()); } - memdelete(test_sky); + SUBCASE("Overwriting existing material with null") { + Ref material; + material.instantiate(); + test_sky->set_material(material); + test_sky->set_material(Ref()); + + CHECK(test_sky->get_material().is_null()); + } +} + +TEST_CASE("[SceneTree][Sky] RID generation") { + Ref test_sky; + test_sky.instantiate(); + // Check validity. + CHECK(!test_sky->get_rid().is_valid()); } } // namespace TestSky