Skip to content

Commit 1e62c7f

Browse files
committed
Add unit tests to Sky
1 parent 893bbdf commit 1e62c7f

File tree

1 file changed

+100
-19
lines changed

1 file changed

+100
-19
lines changed

tests/scene/test_sky.h

+100-19
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,17 @@
3838
namespace TestSky {
3939

4040
TEST_CASE("[SceneTree][Sky] Constructor") {
41-
Sky *test_sky = memnew(Sky);
41+
Ref<Sky> test_sky;
42+
test_sky.instantiate();
4243

4344
CHECK(test_sky->get_process_mode() == Sky::PROCESS_MODE_AUTOMATIC);
4445
CHECK(test_sky->get_radiance_size() == Sky::RADIANCE_SIZE_256);
4546
CHECK(test_sky->get_material().is_null());
46-
memdelete(test_sky);
4747
}
4848

4949
TEST_CASE("[SceneTree][Sky] Radiance size setter and getter") {
50-
Sky *test_sky = memnew(Sky);
50+
Ref<Sky> test_sky;
51+
test_sky.instantiate();
5152

5253
// Check default.
5354
CHECK(test_sky->get_radiance_size() == Sky::RADIANCE_SIZE_256);
@@ -61,25 +62,25 @@ TEST_CASE("[SceneTree][Sky] Radiance size setter and getter") {
6162
ERR_PRINT_ON;
6263

6364
CHECK(test_sky->get_radiance_size() == Sky::RADIANCE_SIZE_1024);
64-
65-
memdelete(test_sky);
6665
}
6766

6867
TEST_CASE("[SceneTree][Sky] Process mode setter and getter") {
69-
Sky *test_sky = memnew(Sky);
68+
Ref<Sky> test_sky;
69+
test_sky.instantiate();
7070

7171
// Check default.
7272
CHECK(test_sky->get_process_mode() == Sky::PROCESS_MODE_AUTOMATIC);
7373

7474
test_sky->set_process_mode(Sky::PROCESS_MODE_INCREMENTAL);
7575
CHECK(test_sky->get_process_mode() == Sky::PROCESS_MODE_INCREMENTAL);
76-
77-
memdelete(test_sky);
7876
}
7977

8078
TEST_CASE("[SceneTree][Sky] Material setter and getter") {
81-
Sky *test_sky = memnew(Sky);
82-
Ref<Material> material = memnew(Material);
79+
Ref<Sky> test_sky;
80+
test_sky.instantiate();
81+
82+
Ref<Material> material;
83+
material.instantiate();
8384

8485
SUBCASE("Material passed to the class should remain the same") {
8586
test_sky->set_material(material);
@@ -92,8 +93,10 @@ TEST_CASE("[SceneTree][Sky] Material setter and getter") {
9293
CHECK(test_sky->get_material() == material);
9394
}
9495
SUBCASE("Material rewrite testing") {
95-
Ref<Material> material1 = memnew(Material);
96-
Ref<Material> material2 = memnew(Material);
96+
Ref<Material> material1;
97+
Ref<Material> material2;
98+
material1.instantiate();
99+
material2.instantiate();
97100

98101
test_sky->set_material(material1);
99102
test_sky->set_material(material2);
@@ -104,19 +107,22 @@ TEST_CASE("[SceneTree][Sky] Material setter and getter") {
104107
}
105108

106109
SUBCASE("Assign same material to two skys") {
107-
Sky *sky2 = memnew(Sky);
110+
Ref<Sky> sky2;
111+
sky2.instantiate();
108112

109113
test_sky->set_material(material);
110114
sky2->set_material(material);
111115
CHECK_MESSAGE(test_sky->get_material() == sky2->get_material(),
112116
"Both skys should have the same material.");
113-
memdelete(sky2);
114117
}
115118

116119
SUBCASE("Swapping materials between two skys") {
117-
Sky *sky2 = memnew(Sky);
118-
Ref<Material> material1 = memnew(Material);
119-
Ref<Material> material2 = memnew(Material);
120+
Ref<Sky> sky2;
121+
sky2.instantiate();
122+
Ref<Material> material1;
123+
Ref<Material> material2;
124+
material1.instantiate();
125+
material2.instantiate();
120126

121127
test_sky->set_material(material1);
122128
sky2->set_material(material2);
@@ -130,10 +136,85 @@ TEST_CASE("[SceneTree][Sky] Material setter and getter") {
130136

131137
CHECK(test_sky->get_material() == material2);
132138
CHECK(sky2->get_material() == material1);
133-
memdelete(sky2);
134139
}
140+
}
141+
142+
TEST_CASE("[SceneTree][Sky] Invalid radiance size handling") {
143+
Ref<Sky> test_sky;
144+
test_sky.instantiate();
145+
146+
// Attempt to set an invalid radiance size.
147+
ERR_PRINT_OFF;
148+
test_sky->set_radiance_size(Sky::RADIANCE_SIZE_MAX);
149+
ERR_PRINT_ON;
150+
151+
// Verify that the radiance size remains unchanged.
152+
CHECK(test_sky->get_radiance_size() == Sky::RADIANCE_SIZE_256);
153+
}
154+
155+
TEST_CASE("[SceneTree][Sky] Process mode variations") {
156+
Ref<Sky> test_sky;
157+
test_sky.instantiate();
158+
159+
// Test all process modes.
160+
const Sky::ProcessMode process_modes[] = {
161+
Sky::PROCESS_MODE_AUTOMATIC,
162+
Sky::PROCESS_MODE_QUALITY,
163+
Sky::PROCESS_MODE_INCREMENTAL,
164+
Sky::PROCESS_MODE_REALTIME
165+
};
166+
167+
for (Sky::ProcessMode mode : process_modes) {
168+
test_sky->set_process_mode(mode);
169+
CHECK(test_sky->get_process_mode() == mode);
170+
}
171+
}
172+
173+
TEST_CASE("[SceneTree][Sky] Radiance size variations") {
174+
Ref<Sky> test_sky;
175+
test_sky.instantiate();
176+
177+
// Test all radiance sizes except MAX.
178+
const Sky::RadianceSize radiance_sizes[] = {
179+
Sky::RADIANCE_SIZE_32,
180+
Sky::RADIANCE_SIZE_64,
181+
Sky::RADIANCE_SIZE_128,
182+
Sky::RADIANCE_SIZE_256,
183+
Sky::RADIANCE_SIZE_512,
184+
Sky::RADIANCE_SIZE_1024,
185+
Sky::RADIANCE_SIZE_2048
186+
};
187+
188+
for (Sky::RadianceSize size : radiance_sizes) {
189+
test_sky->set_radiance_size(size);
190+
CHECK(test_sky->get_radiance_size() == size);
191+
}
192+
}
193+
194+
TEST_CASE("[SceneTree][Sky] Null material handling") {
195+
Ref<Sky> test_sky;
196+
test_sky.instantiate();
197+
198+
SUBCASE("Setting null material") {
199+
test_sky->set_material(Ref<Material>());
200+
CHECK(test_sky->get_material().is_null());
201+
}
202+
203+
SUBCASE("Overwriting existing material with null") {
204+
Ref<Material> material;
205+
material.instantiate();
206+
test_sky->set_material(material);
207+
test_sky->set_material(Ref<Material>());
208+
209+
CHECK(test_sky->get_material().is_null());
210+
}
211+
}
135212

136-
memdelete(test_sky);
213+
TEST_CASE("[SceneTree][Sky] RID generation") {
214+
Ref<Sky> test_sky;
215+
test_sky.instantiate();
216+
// Check validity.
217+
CHECK(!test_sky->get_rid().is_valid());
137218
}
138219

139220
} // namespace TestSky

0 commit comments

Comments
 (0)