aboutsummaryrefslogtreecommitdiff
path: root/test/base/EventTest.cpp
diff options
context:
space:
mode:
authorYuqian Yang <crupest@crupest.life>2025-11-16 14:09:50 +0800
committerYuqian Yang <crupest@crupest.life>2025-11-16 14:09:50 +0800
commit07d662aafc25b145eb20e4123ebc82b5736cdeb7 (patch)
tree0b94baddd3235623beac4997ac09a503a00645e7 /test/base/EventTest.cpp
parentfaf73c4af74bdae1abf394a33b573149b98ec2b1 (diff)
downloadcru-07d662aafc25b145eb20e4123ebc82b5736cdeb7.tar.gz
cru-07d662aafc25b145eb20e4123ebc82b5736cdeb7.tar.bz2
cru-07d662aafc25b145eb20e4123ebc82b5736cdeb7.zip
New timer impl on Windows. Add Event test. Fix delete later.
Diffstat (limited to 'test/base/EventTest.cpp')
-rw-r--r--test/base/EventTest.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/base/EventTest.cpp b/test/base/EventTest.cpp
new file mode 100644
index 00000000..9ebf8b28
--- /dev/null
+++ b/test/base/EventTest.cpp
@@ -0,0 +1,39 @@
+#include "cru/base/Event.h"
+
+#include <catch2/catch_test_macros.hpp>
+
+TEST_CASE("Event should work.", "[event]") {
+ using cru::Event;
+
+ Event<int&> event;
+
+ int count = 0;
+ bool triggered = false;
+
+ auto revoker = event.AddHandler([](int& count) { count++; });
+ event.AddHandler([](int& count) { count++; });
+ event.AddSpyOnlyHandler([&triggered] { triggered = true; });
+
+ event.Raise(count);
+ REQUIRE(count == 2);
+ REQUIRE(triggered);
+
+ revoker();
+
+ event.Raise(count);
+ REQUIRE(count == 3);
+}
+
+TEST_CASE("Event destroy during raising.", "[event]") {
+ using cru::Event;
+
+ Event<int&>* event = new Event<int&>();
+
+ event->AddSpyOnlyHandler([event] { delete event; });
+ auto revoker = event->AddHandler([](int& count) { count++; });
+
+ int count = 0;
+ event->Raise(count);
+ REQUIRE(count == 1);
+ revoker();
+}