Much improved tests: Both C++03/C++11 are supported, with exceptions and without them; test outputs are being dumped on disk

This commit is contained in:
Pavel Kirienko
2014-03-17 19:45:27 +04:00
parent 4025bf033b
commit 06603ad237
4 changed files with 31 additions and 27 deletions
+17 -12
View File
@@ -38,28 +38,33 @@ include_directories(${DSDLC_OUTPUT})
# #
# Unit tests with gtest (optional) # Unit tests with gtest (optional)
# #
find_package(GTest QUIET) function(add_test name flags)
if (GTEST_FOUND)
find_package(Threads REQUIRED) find_package(Threads REQUIRED)
include_directories(${GTEST_INCLUDE_DIRS}) include_directories(${GTEST_INCLUDE_DIRS})
file(GLOB_RECURSE TEST_CXX_FILES RELATIVE ${CMAKE_SOURCE_DIR} "test/*.cpp") file(GLOB_RECURSE TEST_CXX_FILES RELATIVE ${CMAKE_SOURCE_DIR} "test/*.cpp")
add_executable(libuavcan_test ${TEST_CXX_FILES}) add_executable(${name} ${TEST_CXX_FILES})
add_dependencies(libuavcan_test uavcan) add_dependencies(${name} uavcan)
set_target_properties(libuavcan_test PROPERTIES set_target_properties(${name} PROPERTIES COMPILE_FLAGS ${flags})
COMPILE_FLAGS "-fno-exceptions -Wno-unused-parameter -Wno-unused-function"
)
target_link_libraries(libuavcan_test ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) target_link_libraries(${name} ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
target_link_libraries(libuavcan_test ${CMAKE_BINARY_DIR}/libuavcan.so) target_link_libraries(${name} ${CMAKE_BINARY_DIR}/libuavcan.so)
target_link_libraries(libuavcan_test rt) target_link_libraries(${name} rt)
# Tests run automatically upon successful build # Tests run automatically upon successful build
# If failing tests need to be investigated with debugger, use 'make --ignore-errors' # If failing tests need to be investigated with debugger, use 'make --ignore-errors'
add_custom_command(TARGET libuavcan_test POST_BUILD add_custom_command(TARGET ${name} POST_BUILD
COMMAND ./libuavcan_test COMMAND ./${name} > "${name}.log"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) 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) else (GTEST_FOUND)
message(">> Google test library is not found, you will not be able to run tests") message(">> Google test library is not found, you will not be able to run tests")
endif (GTEST_FOUND) endif (GTEST_FOUND)
+3 -3
View File
@@ -82,10 +82,10 @@ public:
} }
}; };
static uavcan::MonotonicTime tsMono(uint64_t usec) { return uavcan::MonotonicTime::fromUSec(usec); } inline 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::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 <typename T> template <typename T>
static bool areTimestampsClose(const T& a, const T& b, int64_t precision_usec = 10000) static bool areTimestampsClose(const T& a, const T& b, int64_t precision_usec = 10000)
+2 -2
View File
@@ -121,7 +121,7 @@ public:
// cppcheck-suppress unusedFunction // cppcheck-suppress unusedFunction
// cppcheck-suppress functionConst // 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 // cppcheck-suppress unusedFunction
int getNumFilters() const { return 0; } int getNumFilters() const { return 0; }
uint64_t getNumErrors() const { return num_errors; } uint64_t getNumErrors() const { return num_errors; }
@@ -189,7 +189,7 @@ public:
}; };
enum FrameType { STD, EXT }; 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; id |= (type == EXT) ? uavcan::CanFrame::FlagEFF : 0;
return uavcan::CanFrame(id, reinterpret_cast<const uint8_t*>(str_data.c_str()), str_data.length()); return uavcan::CanFrame(id, reinterpret_cast<const uint8_t*>(str_data.c_str()), str_data.length());
+9 -10
View File
@@ -20,8 +20,7 @@ struct RxFrameGenerator
uint16_t data_type_id; uint16_t data_type_id;
uavcan::TransferBufferManagerKey bufmgr_key; uavcan::TransferBufferManagerKey bufmgr_key;
RxFrameGenerator(uint16_t data_type_id, uavcan::TransferType ttype, RxFrameGenerator(uint16_t data_type_id, const uavcan::TransferBufferManagerKey& bufmgr_key = DEFAULT_KEY)
const uavcan::TransferBufferManagerKey& bufmgr_key = DEFAULT_KEY)
: data_type_id(data_type_id) : data_type_id(data_type_id)
, bufmgr_key(bufmgr_key) , bufmgr_key(bufmgr_key)
{ } { }
@@ -95,7 +94,7 @@ TEST(TransferReceiver, Basic)
{ {
using uavcan::TransferReceiver; using uavcan::TransferReceiver;
Context<32> context; Context<32> context;
RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); RxFrameGenerator gen(789);
uavcan::TransferReceiver& rcv = context.receiver; uavcan::TransferReceiver& rcv = context.receiver;
uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
@@ -215,7 +214,7 @@ TEST(TransferReceiver, Basic)
TEST(TransferReceiver, OutOfBufferSpace_32bytes) TEST(TransferReceiver, OutOfBufferSpace_32bytes)
{ {
Context<32> context; Context<32> context;
RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); RxFrameGenerator gen(789);
uavcan::TransferReceiver& rcv = context.receiver; uavcan::TransferReceiver& rcv = context.receiver;
uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
@@ -250,7 +249,7 @@ TEST(TransferReceiver, OutOfBufferSpace_32bytes)
TEST(TransferReceiver, UnterminatedTransfer) TEST(TransferReceiver, UnterminatedTransfer)
{ {
Context<512> context; Context<512> context;
RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); RxFrameGenerator gen(789);
uavcan::TransferReceiver& rcv = context.receiver; uavcan::TransferReceiver& rcv = context.receiver;
uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
@@ -271,7 +270,7 @@ TEST(TransferReceiver, UnterminatedTransfer)
TEST(TransferReceiver, OutOfOrderFrames) TEST(TransferReceiver, OutOfOrderFrames)
{ {
Context<32> context; Context<32> context;
RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); RxFrameGenerator gen(789);
uavcan::TransferReceiver& rcv = context.receiver; uavcan::TransferReceiver& rcv = context.receiver;
uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
@@ -292,7 +291,7 @@ TEST(TransferReceiver, OutOfOrderFrames)
TEST(TransferReceiver, IntervalMeasurement) TEST(TransferReceiver, IntervalMeasurement)
{ {
Context<32> context; Context<32> context;
RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); RxFrameGenerator gen(789);
uavcan::TransferReceiver& rcv = context.receiver; uavcan::TransferReceiver& rcv = context.receiver;
uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
@@ -322,7 +321,7 @@ TEST(TransferReceiver, IntervalMeasurement)
TEST(TransferReceiver, Restart) TEST(TransferReceiver, Restart)
{ {
Context<32> context; Context<32> context;
RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); RxFrameGenerator gen(789);
uavcan::TransferReceiver& rcv = context.receiver; uavcan::TransferReceiver& rcv = context.receiver;
uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
@@ -364,7 +363,7 @@ TEST(TransferReceiver, Restart)
TEST(TransferReceiver, UtcTransferTimestamping) TEST(TransferReceiver, UtcTransferTimestamping)
{ {
Context<32> context; Context<32> context;
RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); RxFrameGenerator gen(789);
uavcan::TransferReceiver& rcv = context.receiver; uavcan::TransferReceiver& rcv = context.receiver;
uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY); uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
@@ -414,7 +413,7 @@ TEST(TransferReceiver, UtcTransferTimestamping)
TEST(TransferReceiver, HeaderParsing) TEST(TransferReceiver, HeaderParsing)
{ {
Context<32> context; Context<32> context;
RxFrameGenerator gen(789, uavcan::TransferTypeMessageBroadcast); RxFrameGenerator gen(789);
uavcan::TransferReceiver& rcv = context.receiver; uavcan::TransferReceiver& rcv = context.receiver;
uavcan::ITransferBufferManager& bufmgr = context.bufmgr; uavcan::ITransferBufferManager& bufmgr = context.bufmgr;