diff --git a/src/uvw/request.hpp b/src/uvw/request.hpp index be798898..7ffec791 100644 --- a/src/uvw/request.hpp +++ b/src/uvw/request.hpp @@ -49,7 +49,7 @@ protected: public: void cancel() { - invoke(&uv_cancel, this->template get()); + this->invoke(&uv_cancel, this->template get()); } std::size_t size() const noexcept { diff --git a/src/uvw/util.hpp b/src/uvw/util.hpp index a3b6b843..53aa4cd5 100644 --- a/src/uvw/util.hpp +++ b/src/uvw/util.hpp @@ -49,25 +49,6 @@ const IpTraits::NameFuncType IpTraits::NameFunc = uv_ip6_name; } -class UVWException final: std::runtime_error { -public: - explicit UVWException(int code) - : runtime_error{uv_strerror(code)}, ec{code} - { } - - const char* name() const noexcept { - return uv_err_name(ec); - } - - const char* error() const noexcept { - return uv_strerror(ec); - } - -private: - int ec; -}; - - struct FileDescriptor { using Type = uv_file; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0e22fc31..d2fe14f6 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -4,37 +4,37 @@ set(UVW_SRC_DIR ${CMAKE_SOURCE_DIR}/${PROJECT_SRC_DIR}) -# List of available targets - -set(TARGET_FOOBAR foobar) - -# Test TARGET_FOOBAR_SRC_DIR +set( + COMMON_INCLUDE_DIRS + ${UVW_SRC_DIR} + ${GOOGLETEST_INCLUDE_DIRS} + ${UV_INCLUDE_DIRS} +) set( - TARGET_FOOBAR_SOURCES - main.cpp + COMMON_LINK_LIBS + ${CMAKE_THREAD_LIBS_INIT} + ${GOOGLETEST_LIBRARIES} + ${UV_LIBRARIES} ) -add_executable( - ${TARGET_FOOBAR} - ${TARGET_FOOBAR_SOURCES} -) +# List of available targets -target_include_directories( - ${TARGET_FOOBAR} - PRIVATE ${UVW_SRC_DIR} - PRIVATE ${GOOGLETEST_INCLUDE_DIRS} - PRIVATE ${UV_INCLUDE_DIRS} -) +set(TARGET_MAIN main) +set(TARGET_LOOP loop) -target_link_libraries( - ${TARGET_FOOBAR} - PRIVATE ${CMAKE_THREAD_LIBS_INIT} - PRIVATE ${GOOGLETEST_LIBRARIES} - PRIVATE ${UV_LIBRARIES} -) +# Test TARGET_MAIN -add_test( - NAME ${TARGET_FOOBAR} - COMMAND ${TARGET_FOOBAR} -) +set(TARGET_MAIN_SOURCES main.cpp) +add_executable(${TARGET_MAIN} ${TARGET_MAIN_SOURCES}) +target_include_directories(${TARGET_MAIN} PRIVATE ${COMMON_INCLUDE_DIRS}) +target_link_libraries(${TARGET_MAIN} PRIVATE ${COMMON_LINK_LIBS}) +add_test(NAME ${TARGET_MAIN} COMMAND ${TARGET_MAIN}) + +# Test TARGET_LOOP + +set(TARGET_LOOP_SOURCES uvw/loop.cpp) +add_executable(${TARGET_LOOP} ${TARGET_LOOP_SOURCES}) +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}) diff --git a/test/uvw/loop.cpp b/test/uvw/loop.cpp new file mode 100644 index 00000000..e94afc02 --- /dev/null +++ b/test/uvw/loop.cpp @@ -0,0 +1,49 @@ +#include +#include + + +TEST(Loop, Basics) { + auto def = uvw::Loop::getDefault(); + + ASSERT_TRUE(static_cast(def)); + ASSERT_FALSE(def->alive()); + ASSERT_NO_THROW(def->stop()); + + def->walk([](uvw::BaseHandle &) { ASSERT_TRUE(false); }); + + auto loop = uvw::Loop::create(); + auto handle = loop->resource(); + auto req = loop->resource(); + + auto err = [](uvw::ErrorEvent, auto &) { ASSERT_TRUE(false); }; + + loop->on(err); + req->on(err); + handle->on(err); + + ASSERT_TRUE(static_cast(handle)); + ASSERT_TRUE(static_cast(req)); + + ASSERT_FALSE(loop->alive()); + + handle->start(); + handle->on([](uvw::PrepareEvent, uvw::Prepare &handle) { + handle.loop().walk([](uvw::BaseHandle &) { + static bool trigger = true; + ASSERT_TRUE(trigger); + trigger = false; + }); + + handle.close(); + }); + + ASSERT_TRUE(loop->alive()); + ASSERT_NO_THROW(loop->run()); + + loop->walk([](uvw::BaseHandle &) { ASSERT_TRUE(false); }); + + ASSERT_NO_THROW(loop->runOnce()); + ASSERT_NO_THROW(loop->runWait()); + + ASSERT_FALSE(loop->alive()); +}