From 06603ad237b02eb0dc0feb57fa3dd435aa3717c9 Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Mon, 17 Mar 2014 19:45:27 +0400 Subject: [PATCH] Much improved tests: Both C++03/C++11 are supported, with exceptions and without them; test outputs are being dumped on disk --- libuavcan/CMakeLists.txt | 29 +++++++++++-------- libuavcan/test/clock.hpp | 6 ++-- libuavcan/test/transport/can/can.hpp | 4 +-- .../test/transport/transfer_receiver.cpp | 19 ++++++------ 4 files changed, 31 insertions(+), 27 deletions(-) diff --git a/libuavcan/CMakeLists.txt b/libuavcan/CMakeLists.txt index e941b40526..07e3c03ef9 100644 --- a/libuavcan/CMakeLists.txt +++ b/libuavcan/CMakeLists.txt @@ -38,28 +38,33 @@ include_directories(${DSDLC_OUTPUT}) # # Unit tests with gtest (optional) # -find_package(GTest QUIET) -if (GTEST_FOUND) +function(add_test name flags) find_package(Threads REQUIRED) include_directories(${GTEST_INCLUDE_DIRS}) file(GLOB_RECURSE TEST_CXX_FILES RELATIVE ${CMAKE_SOURCE_DIR} "test/*.cpp") - add_executable(libuavcan_test ${TEST_CXX_FILES}) - add_dependencies(libuavcan_test uavcan) + add_executable(${name} ${TEST_CXX_FILES}) + add_dependencies(${name} uavcan) - set_target_properties(libuavcan_test PROPERTIES - COMPILE_FLAGS "-fno-exceptions -Wno-unused-parameter -Wno-unused-function" - ) + set_target_properties(${name} PROPERTIES COMPILE_FLAGS ${flags}) - target_link_libraries(libuavcan_test ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) - target_link_libraries(libuavcan_test ${CMAKE_BINARY_DIR}/libuavcan.so) - target_link_libraries(libuavcan_test rt) + target_link_libraries(${name} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) + target_link_libraries(${name} ${CMAKE_BINARY_DIR}/libuavcan.so) + target_link_libraries(${name} rt) # Tests run automatically upon successful build # If failing tests need to be investigated with debugger, use 'make --ignore-errors' - add_custom_command(TARGET libuavcan_test POST_BUILD - COMMAND ./libuavcan_test + add_custom_command(TARGET ${name} POST_BUILD + COMMAND ./${name} > "${name}.log" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) +endfunction() + +find_package(GTest QUIET) +if (GTEST_FOUND) + add_test(libuavcan_test_cpp03_noexc "-Wall -Wextra -Werror -pedantic -fno-exceptions -std=c++03") + add_test(libuavcan_test_cpp11_noexc "-Wall -Wextra -Werror -pedantic -fno-exceptions -std=c++0x") + add_test(libuavcan_test_cpp03_exc "-Wall -Wextra -Werror -pedantic -std=c++03") + add_test(libuavcan_test_cpp11_exc "-Wall -Wextra -Werror -pedantic -std=c++0x") else (GTEST_FOUND) message(">> Google test library is not found, you will not be able to run tests") endif (GTEST_FOUND) diff --git a/libuavcan/test/clock.hpp b/libuavcan/test/clock.hpp index 437aa11b54..cddcd2e434 100644 --- a/libuavcan/test/clock.hpp +++ b/libuavcan/test/clock.hpp @@ -82,10 +82,10 @@ public: } }; -static uavcan::MonotonicTime tsMono(uint64_t usec) { return uavcan::MonotonicTime::fromUSec(usec); } -static uavcan::UtcTime tsUtc(uint64_t usec) { return uavcan::UtcTime::fromUSec(usec); } +inline uavcan::MonotonicTime tsMono(uint64_t usec) { return uavcan::MonotonicTime::fromUSec(usec); } +inline uavcan::UtcTime tsUtc(uint64_t usec) { return uavcan::UtcTime::fromUSec(usec); } -static uavcan::MonotonicDuration durMono(int64_t usec) { return uavcan::MonotonicDuration::fromUSec(usec); } +inline uavcan::MonotonicDuration durMono(int64_t usec) { return uavcan::MonotonicDuration::fromUSec(usec); } template static bool areTimestampsClose(const T& a, const T& b, int64_t precision_usec = 10000) diff --git a/libuavcan/test/transport/can/can.hpp b/libuavcan/test/transport/can/can.hpp index 53c890941b..4a023c72d0 100644 --- a/libuavcan/test/transport/can/can.hpp +++ b/libuavcan/test/transport/can/can.hpp @@ -121,7 +121,7 @@ public: // cppcheck-suppress unusedFunction // cppcheck-suppress functionConst - int configureFilters(const uavcan::CanFilterConfig* filter_configs, int num_configs) { return -1; } + int configureFilters(const uavcan::CanFilterConfig*, int) { return -1; } // cppcheck-suppress unusedFunction int getNumFilters() const { return 0; } uint64_t getNumErrors() const { return num_errors; } @@ -189,7 +189,7 @@ public: }; enum FrameType { STD, EXT }; -static uavcan::CanFrame makeCanFrame(uint32_t id, const std::string& str_data, FrameType type) +inline uavcan::CanFrame makeCanFrame(uint32_t id, const std::string& str_data, FrameType type) { id |= (type == EXT) ? uavcan::CanFrame::FlagEFF : 0; return uavcan::CanFrame(id, reinterpret_cast(str_data.c_str()), str_data.length()); diff --git a/libuavcan/test/transport/transfer_receiver.cpp b/libuavcan/test/transport/transfer_receiver.cpp index 9a111f8d02..0e82405144 100644 --- a/libuavcan/test/transport/transfer_receiver.cpp +++ b/libuavcan/test/transport/transfer_receiver.cpp @@ -20,8 +20,7 @@ struct RxFrameGenerator uint16_t data_type_id; uavcan::TransferBufferManagerKey bufmgr_key; - RxFrameGenerator(uint16_t data_type_id, uavcan::TransferType ttype, - const uavcan::TransferBufferManagerKey& bufmgr_key = DEFAULT_KEY) + RxFrameGenerator(uint16_t data_type_id, const uavcan::TransferBufferManagerKey& bufmgr_key = DEFAULT_KEY) : data_type_id(data_type_id) , bufmgr_key(bufmgr_key) { } @@ -95,7 +94,7 @@ TEST(TransferReceiver, Basic) { using uavcan::TransferReceiver; Context<32> context; - RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); + RxFrameGenerator gen(789); uavcan::TransferReceiver& rcv = context.receiver; uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); @@ -215,7 +214,7 @@ TEST(TransferReceiver, Basic) TEST(TransferReceiver, OutOfBufferSpace_32bytes) { Context<32> context; - RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); + RxFrameGenerator gen(789); uavcan::TransferReceiver& rcv = context.receiver; uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); @@ -250,7 +249,7 @@ TEST(TransferReceiver, OutOfBufferSpace_32bytes) TEST(TransferReceiver, UnterminatedTransfer) { Context<512> context; - RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); + RxFrameGenerator gen(789); uavcan::TransferReceiver& rcv = context.receiver; uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); @@ -271,7 +270,7 @@ TEST(TransferReceiver, UnterminatedTransfer) TEST(TransferReceiver, OutOfOrderFrames) { Context<32> context; - RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); + RxFrameGenerator gen(789); uavcan::TransferReceiver& rcv = context.receiver; uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); @@ -292,7 +291,7 @@ TEST(TransferReceiver, OutOfOrderFrames) TEST(TransferReceiver, IntervalMeasurement) { Context<32> context; - RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); + RxFrameGenerator gen(789); uavcan::TransferReceiver& rcv = context.receiver; uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); @@ -322,7 +321,7 @@ TEST(TransferReceiver, IntervalMeasurement) TEST(TransferReceiver, Restart) { Context<32> context; - RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); + RxFrameGenerator gen(789); uavcan::TransferReceiver& rcv = context.receiver; uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); @@ -364,7 +363,7 @@ TEST(TransferReceiver, Restart) TEST(TransferReceiver, UtcTransferTimestamping) { Context<32> context; - RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); + RxFrameGenerator gen(789); uavcan::TransferReceiver& rcv = context.receiver; uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); @@ -414,7 +413,7 @@ TEST(TransferReceiver, UtcTransferTimestamping) TEST(TransferReceiver, HeaderParsing) { Context<32> context; - RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); + RxFrameGenerator gen(789); uavcan::TransferReceiver& rcv = context.receiver; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;