From 128ac91adfdab4a21836c4f19d7024dba9790f9e Mon Sep 17 00:00:00 2001 From: Andreas Stöckel Date: Fri, 2 Jan 2015 16:00:01 +0100 Subject: Moved event system from the Node class to the Managed class (with zero overhead if is not used) --- test/core/managed/ManagedTest.cpp | 94 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) (limited to 'test/core/managed') diff --git a/test/core/managed/ManagedTest.cpp b/test/core/managed/ManagedTest.cpp index d6a392a..42ce076 100644 --- a/test/core/managed/ManagedTest.cpp +++ b/test/core/managed/ManagedTest.cpp @@ -100,5 +100,99 @@ TEST(Managed, type) ASSERT_EQ(&Type1, &typeOf()); ASSERT_EQ(&Type1, &typeOf(*m1)); } + +class TestManagedEventOwner : public TestManaged { +public: + using TestManaged::TestManaged; + + int triggered = false; +}; + +static void handleEvent(const Event &ev, Managed *owner) +{ + static_cast(owner)->triggered++; +} + +TEST(Managed, events) +{ + Manager mgr(1); + std::array a; + { + Rooted n{new TestManaged(mgr, a[0])}; + + Handle e1{new TestManagedEventOwner(mgr, a[1])}; + Handle e2{new TestManagedEventOwner(mgr, a[2])}; + Handle e3{new TestManagedEventOwner(mgr, a[3])}; + { + Rooted re1{e1}; + Rooted re2{e2}; + Rooted re3{e3}; + + ASSERT_EQ(0, n->registerEvent(EventType::UPDATE, handleEvent, re1)); + ASSERT_EQ( + 1, n->registerEvent(EventType::NAME_CHANGE, handleEvent, re2)); + ASSERT_EQ( + 2, n->registerEvent(EventType::NAME_CHANGE, handleEvent, re3)); + ASSERT_TRUE(a[0] && a[1] && a[2] && a[3]); + } + ASSERT_TRUE(a[0] && a[1] && a[2] && a[3]); + + ASSERT_EQ(0, e1->triggered); + ASSERT_EQ(0, e2->triggered); + ASSERT_EQ(0, e3->triggered); + + { + Event ev{EventType::ADD_CHILD}; + ASSERT_FALSE(n->triggerEvent(ev)); + } + + { + Event ev{EventType::UPDATE}; + ASSERT_TRUE(n->triggerEvent(ev)); + ASSERT_EQ(1, e1->triggered); + ASSERT_EQ(0, e2->triggered); + ASSERT_EQ(0, e3->triggered); + } + + { + Event ev{EventType::NAME_CHANGE}; + ASSERT_TRUE(n->triggerEvent(ev)); + ASSERT_EQ(1, e1->triggered); + ASSERT_EQ(1, e2->triggered); + ASSERT_EQ(1, e3->triggered); + } + + ASSERT_TRUE(n->unregisterEvent(1)); + ASSERT_FALSE(n->unregisterEvent(1)); + ASSERT_FALSE(a[2]); + + { + Event ev{EventType::NAME_CHANGE}; + ASSERT_TRUE(n->triggerEvent(ev)); + ASSERT_EQ(1, e1->triggered); + ASSERT_EQ(2, e3->triggered); + } + + ASSERT_TRUE(n->unregisterEvent(0)); + ASSERT_FALSE(n->unregisterEvent(0)); + ASSERT_FALSE(a[1]); + + { + Event ev{EventType::UPDATE}; + ASSERT_FALSE(n->triggerEvent(ev)); + ASSERT_EQ(2, e3->triggered); + } + + ASSERT_TRUE(n->unregisterEvent(2)); + ASSERT_FALSE(n->unregisterEvent(2)); + ASSERT_FALSE(a[3]); + + { + Event ev{EventType::NAME_CHANGE}; + ASSERT_FALSE(n->triggerEvent(ev)); + } + } + ASSERT_FALSE(a[0] || a[1] || a[2] || a[3]); +} } -- cgit v1.2.3