From 403db5466449aa629edcf9cd771f17ee015fc79b Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 24 Feb 2026 17:49:23 -0500 Subject: [PATCH] Add "listener registration" test to test passing "this" out of a managed class --- test/tests.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/tests.cpp b/test/tests.cpp index ef3d6f1..33850fb 100644 --- a/test/tests.cpp +++ b/test/tests.cpp @@ -124,6 +124,30 @@ void test_multi_construct_from_raw_pointers() } } +struct EventListener; +static std::vector> g_listeners; + +struct EventListener +{ + rcp_managed_root(EventListener); +public: + int events_received = 0; + void attach() { g_listeners.push_back(this); } +}; + +void test_listener_self_registration() +{ + g_listeners.clear(); + auto a = EventListener::create(); + auto b = EventListener::create(); + a->attach(); + b->attach(); + for (auto & l : g_listeners) l->events_received++; + assert(a->events_received == 1); + assert(b->events_received == 1); + g_listeners.clear(); +} + void test_copy_assignment_decrements_previous_reference() { MyB myb = MyB::create(12, 13); @@ -272,6 +296,7 @@ int main(int argc, char * argv[]) test_booleans(); test_create(); test_multi_construct_from_raw_pointers(); + test_listener_self_registration(); test_copy_assignment_decrements_previous_reference(); test_cross_type_comparison(); test_reset();