diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8aa9ec2d..1e5ee14b 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -23,7 +23,10 @@ set( set(TARGET_MAIN main) set(TARGET_ASYNC async) set(TARGET_CHECK check) +set(TARGET_IDLE idle) set(TARGET_LOOP loop) +set(TARGET_PREPARE prepare) +set(TARGET_SELF self) set(TARGET_WORK work) # Test TARGET_MAIN @@ -50,6 +53,14 @@ target_include_directories(${TARGET_CHECK} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_CHECK} PRIVATE ${COMMON_LINK_LIBS}) add_test(NAME ${TARGET_CHECK} COMMAND ${TARGET_CHECK}) +# Test TARGET_IDLE + +set(TARGET_IDLE_SOURCES uvw/idle.cpp) +add_executable(${TARGET_IDLE} ${TARGET_IDLE_SOURCES}) +target_include_directories(${TARGET_IDLE} PRIVATE ${COMMON_INCLUDE_DIRS}) +target_link_libraries(${TARGET_IDLE} PRIVATE ${COMMON_LINK_LIBS}) +add_test(NAME ${TARGET_IDLE} COMMAND ${TARGET_IDLE}) + # Test TARGET_LOOP set(TARGET_LOOP_SOURCES uvw/loop.cpp) @@ -58,6 +69,22 @@ target_include_directories(${TARGET_LOOP} PRIVATE ${COMMON_INCLUDE_DIRS}) target_link_libraries(${TARGET_LOOP} PRIVATE ${COMMON_LINK_LIBS}) add_test(NAME ${TARGET_LOOP} COMMAND ${TARGET_LOOP}) +# Test TARGET_PREPARE + +set(TARGET_PREPARE_SOURCES uvw/prepare.cpp) +add_executable(${TARGET_PREPARE} ${TARGET_PREPARE_SOURCES}) +target_include_directories(${TARGET_PREPARE} PRIVATE ${COMMON_INCLUDE_DIRS}) +target_link_libraries(${TARGET_PREPARE} PRIVATE ${COMMON_LINK_LIBS}) +add_test(NAME ${TARGET_PREPARE} COMMAND ${TARGET_PREPARE}) + +# Test TARGET_SELF + +set(TARGET_SELF_SOURCES uvw/self.cpp) +add_executable(${TARGET_SELF} ${TARGET_SELF_SOURCES}) +target_include_directories(${TARGET_SELF} PRIVATE ${COMMON_INCLUDE_DIRS}) +target_link_libraries(${TARGET_SELF} PRIVATE ${COMMON_LINK_LIBS}) +add_test(NAME ${TARGET_SELF} COMMAND ${TARGET_SELF}) + # Test TARGET_WORK set(TARGET_WORK_SOURCES uvw/work.cpp) diff --git a/test/uvw/async.cpp b/test/uvw/async.cpp index 989b3d0f..ad0d1392 100644 --- a/test/uvw/async.cpp +++ b/test/uvw/async.cpp @@ -9,12 +9,12 @@ TEST(Async, Send) { bool checkErrorEvent = false; bool checkAsyncEvent = false; - handle->on([&checkErrorEvent](const uvw::ErrorEvent &, uvw::AsyncHandle &){ + handle->on([&checkErrorEvent](const auto &, auto &){ ASSERT_FALSE(checkErrorEvent); checkErrorEvent = true; }); - handle->on([&checkAsyncEvent](const uvw::AsyncEvent &, uvw::AsyncHandle &handle){ + handle->on([&checkAsyncEvent](const auto &, auto &handle){ ASSERT_FALSE(checkAsyncEvent); checkAsyncEvent = true; handle.close(); diff --git a/test/uvw/check.cpp b/test/uvw/check.cpp index f1e0cdd6..0b89c5d9 100644 --- a/test/uvw/check.cpp +++ b/test/uvw/check.cpp @@ -2,19 +2,19 @@ #include -TEST(Check, PartiallyDone) { +TEST(Check, StartAndStop) { auto loop = uvw::Loop::getDefault(); auto handle = loop->resource(); bool checkErrorEvent = false; bool checkCheckEvent = false; - handle->on([&checkErrorEvent](const uvw::ErrorEvent &, uvw::CheckHandle &){ + handle->on([&checkErrorEvent](const auto &, auto &){ ASSERT_FALSE(checkErrorEvent); checkErrorEvent = true; }); - handle->on([&checkCheckEvent](const uvw::CheckEvent &, uvw::CheckHandle &handle){ + handle->on([&checkCheckEvent](const auto &, auto &handle){ ASSERT_FALSE(checkCheckEvent); checkCheckEvent = true; handle.stop(); diff --git a/test/uvw/idle.cpp b/test/uvw/idle.cpp new file mode 100644 index 00000000..e1c95448 --- /dev/null +++ b/test/uvw/idle.cpp @@ -0,0 +1,52 @@ +#include +#include + + +TEST(Idle, StartAndStop) { + auto loop = uvw::Loop::getDefault(); + auto handle = loop->resource(); + + bool checkErrorEvent = false; + bool checkIdleEvent = false; + + handle->on([&checkErrorEvent](const auto &, auto &){ + ASSERT_FALSE(checkErrorEvent); + checkErrorEvent = true; + }); + + handle->on([&checkIdleEvent](const auto &, auto &handle){ + ASSERT_FALSE(checkIdleEvent); + checkIdleEvent = true; + handle.stop(); + handle.close(); + ASSERT_TRUE(handle.closing()); + }); + + handle->start(); + + ASSERT_TRUE(handle->active()); + ASSERT_FALSE(handle->closing()); + + loop->run(); + + ASSERT_FALSE(checkErrorEvent); + ASSERT_TRUE(checkIdleEvent); +} + + +TEST(Idle, Fake) { + auto loop = uvw::Loop::getDefault(); + auto handle = loop->resource(); + + auto l = [](const auto &, auto &){ ASSERT_FALSE(true); }; + handle->on(l); + handle->on(l); + + handle->start(); + handle->close(); + + ASSERT_FALSE(handle->active()); + ASSERT_TRUE(handle->closing()); + + loop->run(); +} diff --git a/test/uvw/loop.cpp b/test/uvw/loop.cpp index 2a774ac7..1d2ab667 100644 --- a/test/uvw/loop.cpp +++ b/test/uvw/loop.cpp @@ -15,7 +15,7 @@ TEST(Loop, PartiallyDone) { auto handle = loop->resource(); auto req = loop->resource([](){}); - auto err = [](uvw::ErrorEvent, auto &) { ASSERT_TRUE(false); }; + auto err = [](const auto &, auto &) { ASSERT_TRUE(false); }; loop->on(err); req->on(err); @@ -27,7 +27,7 @@ TEST(Loop, PartiallyDone) { ASSERT_FALSE(loop->alive()); handle->start(); - handle->on([](uvw::PrepareEvent, uvw::PrepareHandle &handle) { + handle->on([](const auto &, auto &handle) { handle.loop().walk([](uvw::BaseHandle &) { static bool trigger = true; ASSERT_TRUE(trigger); diff --git a/test/uvw/prepare.cpp b/test/uvw/prepare.cpp new file mode 100644 index 00000000..e71ae752 --- /dev/null +++ b/test/uvw/prepare.cpp @@ -0,0 +1,52 @@ +#include +#include + + +TEST(Prepare, StartAndStop) { + auto loop = uvw::Loop::getDefault(); + auto handle = loop->resource(); + + bool checkErrorEvent = false; + bool checkPrepareEvent = false; + + handle->on([&checkErrorEvent](const auto &, auto &){ + ASSERT_FALSE(checkErrorEvent); + checkErrorEvent = true; + }); + + handle->on([&checkPrepareEvent](const auto &, auto &handle){ + ASSERT_FALSE(checkPrepareEvent); + checkPrepareEvent = true; + handle.stop(); + handle.close(); + ASSERT_TRUE(handle.closing()); + }); + + handle->start(); + + ASSERT_TRUE(handle->active()); + ASSERT_FALSE(handle->closing()); + + loop->run(); + + ASSERT_FALSE(checkErrorEvent); + ASSERT_TRUE(checkPrepareEvent); +} + + +TEST(Prepare, Fake) { + auto loop = uvw::Loop::getDefault(); + auto handle = loop->resource(); + + auto l = [](const auto &, auto &){ ASSERT_FALSE(true); }; + handle->on(l); + handle->on(l); + + handle->start(); + handle->close(); + + ASSERT_FALSE(handle->active()); + ASSERT_TRUE(handle->closing()); + + loop->run(); +} diff --git a/test/uvw/self.cpp b/test/uvw/self.cpp new file mode 100644 index 00000000..1e7c3e24 --- /dev/null +++ b/test/uvw/self.cpp @@ -0,0 +1,23 @@ +#include +#include + + +struct S: uvw::Self { }; + + +TEST(Self, Basics) { + std::shared_ptr self = std::make_shared(); + + ASSERT_TRUE(self.unique()); + ASSERT_FALSE(self->self()); + + self->leak(); + + ASSERT_FALSE(self.unique()); + ASSERT_TRUE(self->self()); + + self->reset(); + + ASSERT_TRUE(self.unique()); + ASSERT_FALSE(self->self()); +} diff --git a/test/uvw/work.cpp b/test/uvw/work.cpp index 7746a6b0..3f95960f 100644 --- a/test/uvw/work.cpp +++ b/test/uvw/work.cpp @@ -14,12 +14,12 @@ TEST(Work, RunTask) { checkTask = true; }); - req->on([&checkWorkEvent](const uvw::WorkEvent &, uvw::WorkReq &){ + req->on([&checkWorkEvent](const auto &, auto &){ ASSERT_FALSE(checkWorkEvent); checkWorkEvent = true; }); - req->on([&checkErrorEvent](const uvw::ErrorEvent &, uvw::WorkReq &){ + req->on([&checkErrorEvent](const auto &, auto &){ ASSERT_FALSE(checkErrorEvent); checkErrorEvent = true; }); @@ -44,12 +44,12 @@ TEST(Work, Cancellation) { checkTask = true; }); - req->on([&checkWorkEvent](const uvw::WorkEvent &, uvw::WorkReq &){ + req->on([&checkWorkEvent](const auto &, auto &){ ASSERT_FALSE(checkWorkEvent); checkWorkEvent = true; }); - req->on([&checkErrorEvent](const uvw::ErrorEvent &, uvw::WorkReq &){ + req->on([&checkErrorEvent](const auto &, auto &){ ASSERT_FALSE(checkErrorEvent); checkErrorEvent = true; });