diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/core/NodeTest.cpp | 196 | ||||
-rw-r--r-- | test/core/managed/ManagedTest.cpp | 94 |
2 files changed, 94 insertions, 196 deletions
diff --git a/test/core/NodeTest.cpp b/test/core/NodeTest.cpp index 334fcc8..d0cf08e 100644 --- a/test/core/NodeTest.cpp +++ b/test/core/NodeTest.cpp @@ -87,201 +87,5 @@ TEST(Node, simpleResolve) ASSERT_TRUE(child11 == *(res.begin())); } -class TestManagedEventOwner : public Managed { -public: - using Managed::Managed; - - int triggered = false; -}; - -static void handleEvent(const Event &ev, Handle<Managed> owner) -{ - owner.cast<TestManagedEventOwner>()->triggered++; -} - -static void handleEventStop(const Event &ev, Handle<Managed> owner) -{ - owner.cast<TestManagedEventOwner>()->triggered++; - ev.stopPropagation(); -} - -TEST(Node, events) -{ - Manager mgr; - Rooted<Node> n{new Node(mgr)}; - - Rooted<TestManagedEventOwner> e1{new TestManagedEventOwner(mgr)}; - Rooted<TestManagedEventOwner> e2{new TestManagedEventOwner(mgr)}; - Rooted<TestManagedEventOwner> e3{new TestManagedEventOwner(mgr)}; - - ASSERT_EQ(0, n->registerEventHandler(EventType::UPDATE, handleEvent, e1)); - ASSERT_EQ(1, n->registerEventHandler(EventType::NAME_CHANGE, handleEvent, e2)); - ASSERT_EQ(2, n->registerEventHandler(EventType::NAME_CHANGE, handleEvent, e3)); - - ASSERT_FALSE(e1->triggered); - ASSERT_FALSE(e2->triggered); - ASSERT_FALSE(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->unregisterEventHandler(1)); - ASSERT_FALSE(n->unregisterEventHandler(1)); - - { - Event ev{EventType::NAME_CHANGE}; - ASSERT_TRUE(n->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(1, e2->triggered); - ASSERT_EQ(2, e3->triggered); - } - - ASSERT_TRUE(n->unregisterEventHandler(0)); - ASSERT_FALSE(n->unregisterEventHandler(0)); - - { - Event ev{EventType::UPDATE}; - ASSERT_FALSE(n->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(1, e2->triggered); - ASSERT_EQ(2, e3->triggered); - } - - ASSERT_TRUE(n->unregisterEventHandler(2)); - ASSERT_FALSE(n->unregisterEventHandler(2)); - - { - Event ev{EventType::NAME_CHANGE}; - ASSERT_FALSE(n->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(1, e2->triggered); - ASSERT_EQ(2, e3->triggered); - } -} - -TEST(Node, eventBubbling) -{ - Manager mgr; - Rooted<Node> n1{new Node(mgr)}; - Rooted<Node> n2{new Node(mgr, n1)}; - - Rooted<TestManagedEventOwner> e1{new TestManagedEventOwner(mgr)}; - Rooted<TestManagedEventOwner> e2{new TestManagedEventOwner(mgr)}; - Rooted<TestManagedEventOwner> e3{new TestManagedEventOwner(mgr)}; - - ASSERT_EQ(0, n1->registerEventHandler(EventType::UPDATE, handleEvent, e1, true)); - ASSERT_EQ(1, n1->registerEventHandler(EventType::NAME_CHANGE, handleEvent, e2, true)); - ASSERT_EQ(2, n1->registerEventHandler(EventType::NAME_CHANGE, handleEvent, e3, false)); - - ASSERT_FALSE(e1->triggered); - ASSERT_FALSE(e2->triggered); - ASSERT_FALSE(e3->triggered); - - { - Event ev{EventType::ADD_CHILD}; - ASSERT_FALSE(n2->triggerEvent(ev)); - } - - { - Event ev{EventType::UPDATE}; - ASSERT_TRUE(n2->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(0, e2->triggered); - ASSERT_EQ(0, e3->triggered); - } - - { - Event ev{EventType::UPDATE, false}; - ASSERT_FALSE(n2->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(0, e2->triggered); - ASSERT_EQ(0, e3->triggered); - } - - { - Event ev{EventType::NAME_CHANGE}; - ASSERT_TRUE(n2->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(1, e2->triggered); - ASSERT_EQ(0, e3->triggered); - } - - ASSERT_TRUE(n1->unregisterEventHandler(1)); - ASSERT_FALSE(n1->unregisterEventHandler(1)); - - { - Event ev{EventType::NAME_CHANGE}; - ASSERT_FALSE(n2->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(1, e2->triggered); - ASSERT_EQ(0, e3->triggered); - } - - ASSERT_TRUE(n1->unregisterEventHandler(0)); - ASSERT_FALSE(n1->unregisterEventHandler(0)); - - { - Event ev{EventType::UPDATE}; - ASSERT_FALSE(n2->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(1, e2->triggered); - ASSERT_EQ(0, e3->triggered); - } - - ASSERT_TRUE(n1->unregisterEventHandler(2)); - ASSERT_FALSE(n1->unregisterEventHandler(2)); - - { - Event ev{EventType::NAME_CHANGE}; - ASSERT_FALSE(n2->triggerEvent(ev)); - ASSERT_EQ(1, e1->triggered); - ASSERT_EQ(1, e2->triggered); - ASSERT_EQ(0, e3->triggered); - } -} - -TEST(Node, eventStopPropagation) -{ - Manager mgr; - Rooted<Node> n1{new Node(mgr)}; - Rooted<Node> n2{new Node(mgr, n1)}; - - Rooted<TestManagedEventOwner> e1{new TestManagedEventOwner(mgr)}; - Rooted<TestManagedEventOwner> e2{new TestManagedEventOwner(mgr)}; - - ASSERT_EQ(0, n1->registerEventHandler(EventType::UPDATE, handleEvent, e1, true)); - ASSERT_EQ(0, n2->registerEventHandler(EventType::UPDATE, handleEventStop, e2, true)); - - ASSERT_FALSE(e1->triggered); - ASSERT_FALSE(e2->triggered); - - { - Event ev{EventType::UPDATE}; - n2->triggerEvent(ev); - - ASSERT_EQ(0, e1->triggered); - ASSERT_EQ(1, e2->triggered); - } - -} - } } 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<TypeTestManaged1>()); 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<TestManagedEventOwner *>(owner)->triggered++; +} + +TEST(Managed, events) +{ + Manager mgr(1); + std::array<bool, 4> a; + { + Rooted<TestManaged> n{new TestManaged(mgr, a[0])}; + + Handle<TestManagedEventOwner> e1{new TestManagedEventOwner(mgr, a[1])}; + Handle<TestManagedEventOwner> e2{new TestManagedEventOwner(mgr, a[2])}; + Handle<TestManagedEventOwner> e3{new TestManagedEventOwner(mgr, a[3])}; + { + Rooted<TestManagedEventOwner> re1{e1}; + Rooted<TestManagedEventOwner> re2{e2}; + Rooted<TestManagedEventOwner> 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]); +} } |