summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/core/NodeTest.cpp196
-rw-r--r--test/core/managed/ManagedTest.cpp94
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]);
+}
}