@@ -155,4 +155,80 @@ TEST_CASE("[ProjectSettings] localize_path") {
155155	TestProjectSettingsInternalsAccessor::resource_path () = old_resource_path;
156156}
157157
158+ TEST_CASE (" [SceneTree][ProjectSettings] settings_changed signal"  ) {
159+ 	SIGNAL_WATCH (ProjectSettings::get_singleton (), SNAME (" settings_changed"  ));
160+ 
161+ 	ProjectSettings::get_singleton ()->set_setting (" test_signal_setting"  , " test_value"  );
162+ 	MessageQueue::get_singleton ()->flush ();
163+ 
164+ 	SIGNAL_CHECK (" settings_changed"  , { {} });
165+ 
166+ 	SIGNAL_UNWATCH (ProjectSettings::get_singleton (), SNAME (" settings_changed"  ));
167+ }
168+ 
169+ TEST_CASE (" [ProjectSettings] get_changed_settings basic functionality"  ) {
170+ 	String setting_name = " test_changed_setting"  ;
171+ 	ProjectSettings::get_singleton ()->set_setting (setting_name, " test_value"  );
172+ 
173+ 	PackedStringArray changes = ProjectSettings::get_singleton ()->get_changed_settings ();
174+ 	CHECK (changes.has (setting_name));
175+ }
176+ 
177+ TEST_CASE (" [ProjectSettings] get_changed_settings multiple settings"  ) {
178+ 	ProjectSettings::get_singleton ()->set_setting (" test_setting_1"  , " value1"  );
179+ 	ProjectSettings::get_singleton ()->set_setting (" test_setting_2"  , " value2"  );
180+ 	ProjectSettings::get_singleton ()->set_setting (" another_group/setting"  , " value3"  );
181+ 
182+ 	PackedStringArray changes = ProjectSettings::get_singleton ()->get_changed_settings ();
183+ 	CHECK (changes.has (" test_setting_1"  ));
184+ 	CHECK (changes.has (" test_setting_2"  ));
185+ 	CHECK (changes.has (" another_group/setting"  ));
186+ }
187+ 
188+ TEST_CASE (" [ProjectSettings] check_changed_settings_in_group"  ) {
189+ 	ProjectSettings::get_singleton ()->set_setting (" group1/setting1"  , " value1"  );
190+ 	ProjectSettings::get_singleton ()->set_setting (" group1/setting2"  , " value2"  );
191+ 	ProjectSettings::get_singleton ()->set_setting (" group2/setting1"  , " value3"  );
192+ 	ProjectSettings::get_singleton ()->set_setting (" other_setting"  , " value4"  );
193+ 
194+ 	CHECK (ProjectSettings::get_singleton ()->check_changed_settings_in_group (" group1/"  ));
195+ 	CHECK (ProjectSettings::get_singleton ()->check_changed_settings_in_group (" group2/"  ));
196+ 	CHECK_FALSE (ProjectSettings::get_singleton ()->check_changed_settings_in_group (" nonexistent/"  ));
197+ 
198+ 	CHECK (ProjectSettings::get_singleton ()->check_changed_settings_in_group (" group1"  ));
199+ 	CHECK (ProjectSettings::get_singleton ()->check_changed_settings_in_group (" other_setting"  ));
200+ }
201+ 
202+ TEST_CASE (" [SceneTree][ProjectSettings] Changes cleared after settings_changed signal"  ) {
203+ 	SIGNAL_WATCH (ProjectSettings::get_singleton (), SNAME (" settings_changed"  ));
204+ 
205+ 	ProjectSettings::get_singleton ()->set_setting (" signal_clear_test"  , " value"  );
206+ 
207+ 	PackedStringArray changes_before = ProjectSettings::get_singleton ()->get_changed_settings ();
208+ 	CHECK (changes_before.has (" signal_clear_test"  ));
209+ 
210+ 	MessageQueue::get_singleton ()->flush ();
211+ 
212+ 	SIGNAL_CHECK (" settings_changed"  , { {} });
213+ 
214+ 	PackedStringArray changes_after = ProjectSettings::get_singleton ()->get_changed_settings ();
215+ 	CHECK_FALSE (changes_after.has (" signal_clear_test"  ));
216+ 
217+ 	SIGNAL_UNWATCH (ProjectSettings::get_singleton (), SNAME (" settings_changed"  ));
218+ }
219+ 
220+ TEST_CASE (" [ProjectSettings] No tracking when setting same value"  ) {
221+ 	String setting_name = " same_value_test"  ;
222+ 	String test_value = " same_value"  ;
223+ 
224+ 	ProjectSettings::get_singleton ()->set_setting (setting_name, test_value);
225+ 	int  count_before = ProjectSettings::get_singleton ()->get_changed_settings ().size ();
226+ 
227+ 	//  Setting the same value should not be tracked due to early return.
228+ 	ProjectSettings::get_singleton ()->set_setting (setting_name, test_value);
229+ 	int  count_after = ProjectSettings::get_singleton ()->get_changed_settings ().size ();
230+ 
231+ 	CHECK_EQ (count_before, count_after);
232+ }
233+ 
158234} //  namespace TestProjectSettings
0 commit comments