Add "listener registration" test to test passing "this" out of a managed class

This commit is contained in:
Josh Holtrop 2026-02-24 17:49:23 -05:00
parent 627661158e
commit 403db54664

View File

@ -124,6 +124,30 @@ void test_multi_construct_from_raw_pointers()
} }
} }
struct EventListener;
static std::vector<rcp<EventListener>> 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() void test_copy_assignment_decrements_previous_reference()
{ {
MyB myb = MyB::create(12, 13); MyB myb = MyB::create(12, 13);
@ -272,6 +296,7 @@ int main(int argc, char * argv[])
test_booleans(); test_booleans();
test_create(); test_create();
test_multi_construct_from_raw_pointers(); test_multi_construct_from_raw_pointers();
test_listener_self_registration();
test_copy_assignment_decrements_previous_reference(); test_copy_assignment_decrements_previous_reference();
test_cross_type_comparison(); test_cross_type_comparison();
test_reset(); test_reset();