diff --git a/.gitmodules b/.gitmodules index 42509be..6c67223 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,6 +7,3 @@ [submodule "lib/asio"] path = lib/asio url = https://github.com/chriskohlhoff/asio.git -[submodule "lib/catch"] - path = lib/catch - url = https://github.com/philsquared/Catch.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a7592b..9686332 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,10 +8,6 @@ option(BUILD_SHARED_LIBS "Build the shared library" OFF) option(BUILD_UNIT_TESTS "Builds unit tests target" OFF) option(USE_SUBMODULES "Use source in local submodules instead of system libraries" ON) -set(MAJOR 1) -set(MINOR 6) -set(PATCH 0) - if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(DEFAULT_BUILD_TYPE "Release") message(STATUS "Setting build type to '${DEFAULT_BUILD_TYPE}' as none was specified.") @@ -21,13 +17,16 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo") endif() -aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src ALL_SRC) -aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/internal ALL_SRC) - -file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) +# Only do these if this is the main project, and not if it is included through add_subdirectory +if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME) + # Testing only available if this is the main app + # Note this needs to be done in the main CMakeLists + # since it calls enable_testing, which must be in the + # main CMakeLists. + include(CTest) +endif() add_definitions( - # These will force ASIO to compile without Boost -DBOOST_DATE_TIME_NO_LIB -DBOOST_REGEX_NO_LIB @@ -40,6 +39,12 @@ add_definitions( -D_WEBSOCKETPP_CPP11_CHRONO_ ) +set(ALL_SRC + "src/sio_client.cpp" + "src/sio_socket.cpp" + "src/internal/sio_client_impl.cpp" + "src/internal/sio_packet.cpp" +) add_library(sioclient ${ALL_SRC}) if(USE_SUBMODULES) @@ -55,25 +60,22 @@ else() target_link_libraries(sioclient PRIVATE websocketpp::websocketpp asio asio::asio rapidjson) endif() -target_include_directories(sioclient PUBLIC - $ +target_include_directories(sioclient + PUBLIC + $ $ PRIVATE ${MODULE_INCLUDE_DIRS} ) -if(CMAKE_VERSION VERSION_GREATER "3.1") - set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) - set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) -else() - set_property(TARGET sioclient APPEND_STRING PROPERTY COMPILE_FLAGS "-std=c++11") -endif() +set_property(TARGET sioclient PROPERTY CXX_STANDARD 11) +set_property(TARGET sioclient PROPERTY CXX_STANDARD_REQUIRED ON) if(BUILD_SHARED_LIBS) set_target_properties(sioclient PROPERTIES - SOVERSION ${MAJOR} - VERSION ${MAJOR}.${MINOR}.${PATCH} + SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${PROJECT_VERSION} ) endif() @@ -84,7 +86,7 @@ find_package(OpenSSL) if(OPENSSL_FOUND) add_library(sioclient_tls ${ALL_SRC}) target_include_directories(sioclient_tls PUBLIC - $ + $ $ PRIVATE ${MODULE_INCLUDE_DIRS} @@ -104,8 +106,8 @@ if(OPENSSL_FOUND) if(BUILD_SHARED_LIBS) set_target_properties(sioclient_tls PROPERTIES - SOVERSION ${MAJOR} - VERSION ${MAJOR}.${MINOR}.${PATCH} + SOVERSION ${PROJECT_VERSION_MAJOR} + VERSION ${PROJECT_VERSION} ) endif() @@ -116,6 +118,7 @@ export(PACKAGE sioclient) include(GNUInstallDirs) +file(GLOB ALL_HEADERS ${CMAKE_CURRENT_LIST_DIR}/src/*.h) install(FILES ${ALL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) @@ -163,8 +166,6 @@ install( ${ConfigPackageLocation} ) -if(BUILD_UNIT_TESTS) - message(STATUS "Building with unit test support.") - enable_testing() +if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING) OR BUILD_UNIT_TESTS) add_subdirectory(test) endif() diff --git a/lib/catch b/lib/catch deleted file mode 160000 index 9c07718..0000000 --- a/lib/catch +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9c07718b5f779bc1405f98ca6b5b693026f6eac7 diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 5da7085..78e5d24 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,9 +1,14 @@ +include(FetchContent) + +FetchContent_Declare( + Catch2 + GIT_REPOSITORY https://github.com/catchorg/Catch2.git + GIT_TAG v3.3.2 +) +FetchContent_MakeAvailable(Catch2) + add_executable(sio_test sio_test.cpp) set_property(TARGET sio_test PROPERTY CXX_STANDARD 11) set_property(TARGET sio_test PROPERTY CXX_STANDARD_REQUIRED ON) -target_link_libraries(sio_test sioclient) -target_include_directories(sio_test PRIVATE - "${CMAKE_CURRENT_SOURCE_DIR}/../lib/catch/include" - "${CMAKE_CURRENT_SOURCE_DIR}/../src" -) +target_link_libraries(sio_test PRIVATE Catch2::Catch2WithMain sioclient) add_test(sioclient_test sio_test) diff --git a/test/sio_test.cpp b/test/sio_test.cpp index 22d4f60..3901f05 100644 --- a/test/sio_test.cpp +++ b/test/sio_test.cpp @@ -10,8 +10,7 @@ #include #include -#define CATCH_CONFIG_MAIN // This tells Catch to provide a main() - only do this in one cpp file -#include "catch.hpp" +#include #ifndef _WIN32 #include "json.hpp" //nlohmann::json cannot build in MSVC @@ -55,7 +54,7 @@ TEST_CASE( "test_packet_accept_1" ) p.accept(payload,buffers); CHECK(buffers.size() == 0); CHECK(payload == "40/nsp"); - INFO("outputing payload:" << payload) + INFO("outputing payload:" << payload); } TEST_CASE( "test_packet_accept_2" ) @@ -66,7 +65,7 @@ TEST_CASE( "test_packet_accept_2" ) p.accept(payload,buffers); CHECK(buffers.size() == 0); CHECK(payload == "2"); - INFO("outputing payload:" << payload) + INFO("outputing payload:" << payload); } TEST_CASE( "test_packet_accept_3" ) @@ -81,7 +80,7 @@ TEST_CASE( "test_packet_accept_3" ) CHECK(p.get_type() == packet::type_ack); CHECK(buffers.size() == 0); CHECK(payload == "43/nsp,1001[\"event\",\"text\"]"); - INFO("outputing payload:" << payload) + INFO("outputing payload:" << payload); } #ifndef _WIN32 @@ -106,26 +105,26 @@ TEST_CASE( "test_packet_accept_4" ) REQUIRE(json_start!=std::string::npos); std::string header = payload.substr(0,json_start); CHECK(header=="452-/nsp,1001"); - INFO("outputing payload:" << payload) + INFO("outputing payload:" << payload); std::string json = payload.substr(json_start); nlohmann::json j = nlohmann::json::parse(json); CHECK(j["desc"].get() == "Bin of 100 bytes"); - INFO("outputing payload desc::" << j["desc"].get()) + INFO("outputing payload desc::" << j["desc"].get()); CHECK((bool)j["bin1"]["_placeholder"]); - INFO("outputing payload bin1:" << j["bin1"].dump()) + INFO("outputing payload bin1:" << j["bin1"].dump()); CHECK((bool)j["bin2"]["_placeholder"]); - INFO("outputing payload bin2:" << j["bin2"].dump()) + INFO("outputing payload bin2:" << j["bin2"].dump()); int bin1Num = j["bin1"]["num"].get(); char numchar[] = {0,0}; numchar[0] = bin1Num+'0'; CHECK(buffers[bin1Num]->length()==100); - INFO("outputing payload bin1 num:" << numchar) + INFO("outputing payload bin1 num:" << numchar); CHECK(buffers[bin1Num]->at(50)==0); CHECK(buffers[bin1Num]->at(0) == 0); int bin2Num = j["bin2"]["num"].get(); numchar[0] = bin2Num+'0'; CHECK(buffers[bin2Num]->length()==50); - INFO("outputing payload bin2 num:" << numchar) + INFO("outputing payload bin2 num:" << numchar); CHECK(buffers[bin2Num]->at(25)==1); CHECK(buffers[bin2Num]->at(0) == 1); } @@ -210,7 +209,8 @@ TEST_CASE( "test_packet_parse_4" ) bool hasbin = p.parse("452-/nsp,101[\"bin_event\",[{\"_placeholder\":true,\"num\":1},{\"_placeholder\":true,\"num\":0},\"text\"]]"); CHECK(hasbin); char buf[100]; - memset(buf,0,100); + buf[0] = packet::frame_message; + memset(buf + 1,0,99); std::string bufstr(buf,100); std::string bufstr2(buf,50);