aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/base/CMakeLists.txt1
-rw-r--r--test/base/EventTest.cpp39
-rw-r--r--test/ui/CMakeLists.txt6
-rw-r--r--test/ui/DeleteLaterTest.cpp17
4 files changed, 63 insertions, 0 deletions
diff --git a/test/base/CMakeLists.txt b/test/base/CMakeLists.txt
index 731f268c..52f61a8c 100644
--- a/test/base/CMakeLists.txt
+++ b/test/base/CMakeLists.txt
@@ -1,4 +1,5 @@
add_executable(CruBaseTest
+ EventTest.cpp
PropertyTreeTest.cpp
SelfResolvableTest.cpp
StringUtilTest.cpp
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();
+}
diff --git a/test/ui/CMakeLists.txt b/test/ui/CMakeLists.txt
index e69de29b..66a7cd27 100644
--- a/test/ui/CMakeLists.txt
+++ b/test/ui/CMakeLists.txt
@@ -0,0 +1,6 @@
+add_executable(CruUiTest
+ DeleteLaterTest.cpp
+)
+target_link_libraries(CruUiTest PRIVATE CruUi CruTestBase)
+
+cru_catch_discover_tests(CruUiTest)
diff --git a/test/ui/DeleteLaterTest.cpp b/test/ui/DeleteLaterTest.cpp
new file mode 100644
index 00000000..c9d600de
--- /dev/null
+++ b/test/ui/DeleteLaterTest.cpp
@@ -0,0 +1,17 @@
+#include "cru/ui/DeleteLater.h"
+
+#include <catch2/catch_test_macros.hpp>
+
+struct MockDeleteLater {
+ bool triggered = false;
+
+ void DeleteLater() { triggered = true; }
+};
+
+TEST_CASE("DeleteLaterPtr should work.", "[delete-later]") {
+ auto ptr = cru::ui::MakeDeleteLater<MockDeleteLater>();
+ auto p = ptr.get();
+ ptr.reset();
+ REQUIRE(p->triggered);
+ delete p;
+}