summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-04-25 19:26:35 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-04-25 19:26:35 +0200
commite0e93ce094d19d132f34aa5c92e892524a8125c9 (patch)
tree0b16a663c3248fdca4dab22a55e2e28809cdf30d /tests
parent1958d98212ac37101fec70a51ef357e235d8006c (diff)
parent1ec5381c1612bd739e31aa2bd04ed287b5fe2aba (diff)
downloadredot-engine-e0e93ce094d19d132f34aa5c92e892524a8125c9.tar.gz
Merge pull request #72421 from myaaaaaaaaa/signal-hashmap
Store Object signals in a HashMap rather than a VMap
Diffstat (limited to 'tests')
-rw-r--r--tests/core/object/test_object.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/core/object/test_object.h b/tests/core/object/test_object.h
index 7e8f23a14f..98f9b3da65 100644
--- a/tests/core/object/test_object.h
+++ b/tests/core/object/test_object.h
@@ -339,6 +339,48 @@ TEST_CASE("[Object] Signals") {
CHECK_EQ(signals_after.size(), signals_after_empty_added.size());
}
+ SUBCASE("Deleting an object with connected signals should disconnect them") {
+ List<Object::Connection> signal_connections;
+
+ {
+ Object target;
+ target.add_user_signal(MethodInfo("my_custom_signal"));
+
+ ERR_PRINT_OFF;
+ target.connect("nonexistent_signal1", callable_mp(&object, &Object::notify_property_list_changed));
+ target.connect("my_custom_signal", callable_mp(&object, &Object::notify_property_list_changed));
+ target.connect("nonexistent_signal2", callable_mp(&object, &Object::notify_property_list_changed));
+ ERR_PRINT_ON;
+
+ signal_connections.clear();
+ object.get_all_signal_connections(&signal_connections);
+ CHECK(signal_connections.size() == 0);
+ signal_connections.clear();
+ object.get_signals_connected_to_this(&signal_connections);
+ CHECK(signal_connections.size() == 1);
+
+ ERR_PRINT_OFF;
+ object.connect("nonexistent_signal1", callable_mp(&target, &Object::notify_property_list_changed));
+ object.connect("my_custom_signal", callable_mp(&target, &Object::notify_property_list_changed));
+ object.connect("nonexistent_signal2", callable_mp(&target, &Object::notify_property_list_changed));
+ ERR_PRINT_ON;
+
+ signal_connections.clear();
+ object.get_all_signal_connections(&signal_connections);
+ CHECK(signal_connections.size() == 1);
+ signal_connections.clear();
+ object.get_signals_connected_to_this(&signal_connections);
+ CHECK(signal_connections.size() == 1);
+ }
+
+ signal_connections.clear();
+ object.get_all_signal_connections(&signal_connections);
+ CHECK(signal_connections.size() == 0);
+ signal_connections.clear();
+ object.get_signals_connected_to_this(&signal_connections);
+ CHECK(signal_connections.size() == 0);
+ }
+
SUBCASE("Emitting a non existing signal will return an error") {
Error err = object.emit_signal("some_signal");
CHECK(err == ERR_UNAVAILABLE);