diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-04-25 19:26:35 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-04-25 19:26:35 +0200 |
commit | e0e93ce094d19d132f34aa5c92e892524a8125c9 (patch) | |
tree | 0b16a663c3248fdca4dab22a55e2e28809cdf30d /tests | |
parent | 1958d98212ac37101fec70a51ef357e235d8006c (diff) | |
parent | 1ec5381c1612bd739e31aa2bd04ed287b5fe2aba (diff) | |
download | redot-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.h | 42 |
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); |