From 16da8bee192aef102d4457c4ad65ab0aa3fdf644 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 6 Jan 2023 16:51:10 +0100 Subject: [PATCH 01/14] use ctest and set path to dbc files with a compile definition --- .github/workflows/tests.yml | 15 ++++++++++----- CMakeLists.txt | 7 ++++++- test/CMakeLists.txt | 12 +++++++----- test/defines.hpp | 12 ++++++------ 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3bc437c..20dcf3f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,13 +17,18 @@ jobs: - uses: actions/checkout@v3 - name: Configure CMake - run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + run: | + mkdir build + cd build + cmake -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} .. - name: Build - run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} -- -j + run: | + cd build + make - name: Test - working-directory: ${{github.workspace}}/build - # Didn't configure to use ctest. Opted for a custom target to run instead - run: cmake --build ${{github.workspace}}/build --target test -- -j + run: | + cd build + ctest --output-on-failure diff --git a/CMakeLists.txt b/CMakeLists.txt index 8992cfc..40b1f8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.10) project(dbc) option(DEBUG "use debug flag" NO) +option(ENABLE_TESTS "Enable Unittests" ON) # specify the C++ standard set(CMAKE_CXX_STANDARD 11) @@ -31,7 +32,11 @@ list(APPEND SOURCE ${PROJECT_SOURCE_DIR}/src/utils.cpp include_directories(src) include_directories(include) -add_subdirectory(test) +if(ENABLE_TESTS) + include(CTest) + add_subdirectory(test) +endif() + add_subdirectory(doc) add_library(${PROJECT_NAME} STATIC ${SOURCE}) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index d7d18f9..0d46e8e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,4 +1,4 @@ -project(tests VERSION 0.1.0) +enable_testing() # Download and build Catch2 test framework Include(FetchContent) @@ -14,9 +14,11 @@ list(APPEND TEST_SOURCES test_utils.cpp) add_executable(tests ${TEST_SOURCES} ${SOURCE}) +target_compile_definitions(tests PRIVATE TESTDBCFILES_PATH="${CMAKE_CURRENT_SOURCE_DIR}/dbcs") target_link_libraries(tests PRIVATE Catch2::Catch2WithMain) +target_sources(tests INTERFACE FILE_SET HEADERS + TYPE HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} + FILES defines.hpp) -add_custom_target(test - COMMAND ${PROJECT_NAME} - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - DEPENDS ${PROJECT_NAME}) \ No newline at end of file +add_test(NAME tests COMMAND $) diff --git a/test/defines.hpp b/test/defines.hpp index 7095570..b7d8315 100644 --- a/test/defines.hpp +++ b/test/defines.hpp @@ -1,11 +1,11 @@ #include // Correctly formated files -static const std::string COMPLEX_DBC_FILE = "./dbcs/Complex.dbc"; -static const std::string SIMPLE_DBC_FILE = "./dbcs/Simple.dbc"; +static const std::string COMPLEX_DBC_FILE = std::string(TESTDBCFILES_PATH) + "/Complex.dbc"; +static const std::string SIMPLE_DBC_FILE = std::string(TESTDBCFILES_PATH) + "/Simple.dbc"; // Files with Errors -static const std::string MISSING_NEW_SYMBOLS_DBC_FILE = "./dbcs/MissingNewSymbols.dbc"; -static const std::string MISSING_VERSION_DBC_FILE = "./dbcs/MissingVersion.dbc"; -static const std::string MISSING_BIT_TIMING_DBC_FILE = "./dbcs/MissingBitTiming.dbc"; -static const std::string TEXT_FILE = "./dbcs/TextFile.txt"; +static const std::string MISSING_NEW_SYMBOLS_DBC_FILE = std::string(TESTDBCFILES_PATH) + "/MissingNewSymbols.dbc"; +static const std::string MISSING_VERSION_DBC_FILE = std::string(TESTDBCFILES_PATH) + "/MissingVersion.dbc"; +static const std::string MISSING_BIT_TIMING_DBC_FILE = std::string(TESTDBCFILES_PATH) + "/MissingBitTiming.dbc"; +static const std::string TEXT_FILE = std::string(TESTDBCFILES_PATH) + "/TextFile.txt"; From c246cdd0ba547ba2a4978226cb205275434077d0 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Fri, 6 Jan 2023 18:03:36 +0100 Subject: [PATCH 02/14] add testcases for negative values --- test/defines.hpp | 11 +++++++++++ test/test_dbc.cpp | 43 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/test/defines.hpp b/test/defines.hpp index b7d8315..0855be5 100644 --- a/test/defines.hpp +++ b/test/defines.hpp @@ -9,3 +9,14 @@ static const std::string MISSING_NEW_SYMBOLS_DBC_FILE = std::string(TESTDBCFILES static const std::string MISSING_VERSION_DBC_FILE = std::string(TESTDBCFILES_PATH) + "/MissingVersion.dbc"; static const std::string MISSING_BIT_TIMING_DBC_FILE = std::string(TESTDBCFILES_PATH) + "/MissingBitTiming.dbc"; static const std::string TEXT_FILE = std::string(TESTDBCFILES_PATH) + "/TextFile.txt"; + +static const std::string PRIMITIVE_DBC = +R"(VERSION "1.0.0" + +NS_ : + +BS_: + +BU_: DBG DRIVER IO MOTOR SENSOR + +)"; diff --git a/test/test_dbc.cpp b/test/test_dbc.cpp index 9393488..34f8af5 100644 --- a/test/test_dbc.cpp +++ b/test/test_dbc.cpp @@ -49,4 +49,45 @@ TEST_CASE("Testing dbc file loading", "[fileio]") { REQUIRE(parser->get_messages().front().signals == msg.signals); } -} \ No newline at end of file +} + +TEST_CASE("Testing negative values") { + const auto* filename = std::tmpnam(NULL); + + auto* file = std::fopen(filename, "w"); + CHECK(file); + + std::fputs(PRIMITIVE_DBC.c_str(), file); + std::fputs(R"(BO_ 234 MSG1: 8 Vector__XXX + SG_ Sig1 : 55|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX + SG_ Sig2 : 39|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX + SG_ Sig3 : 23|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX + SG_ Sig4 : 7|16@0- (1,0) [0|32767] "" Vector__XXX)", file); + std::fclose(file); + + auto parser = libdbc::DbcParser(); + parser.parse_file(std::string(filename)); + + REQUIRE(parser.get_messages().size() == 1); + REQUIRE(parser.get_messages().at(0).signals.size() == 4); + { + const auto signal = parser.get_messages().at(0).signals.at(0); + REQUIRE(signal.min == -3276.8); + REQUIRE(signal.max == -3276.7); + } + { + const auto signal = parser.get_messages().at(1).signals.at(0); + REQUIRE(signal.min == -3276.8); + REQUIRE(signal.max == -3276.7); + } + { + const auto signal = parser.get_messages().at(2).signals.at(0); + REQUIRE(signal.min == -3276.8); + REQUIRE(signal.max == -3276.7); + } + { + const auto signal = parser.get_messages().at(3).signals.at(0); + REQUIRE(signal.min == -3276.8); + REQUIRE(signal.max == -3276.7); + } +} From 2d849627db6032735cca27d7702f2885ec503312 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sat, 7 Jan 2023 14:22:33 +0100 Subject: [PATCH 03/14] split signal regex into multiple variable to make it more readable --- src/dbc.cpp | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/dbc.cpp b/src/dbc.cpp index c92cc3e..0245efd 100644 --- a/src/dbc.cpp +++ b/src/dbc.cpp @@ -4,6 +4,26 @@ #include +namespace { + +const auto signalIdentifierPattern = "(SG_)"; +const auto namePattern = "(\\w+)"; +const auto bitStartPattern = "(\\d+)"; // Cannot be negative +const auto lengthPattern = "(\\d+)"; // Cannot be negative +const auto byteOrderPattern = "([0-1])"; +const auto signPattern = "(\\+|\\-)"; +const auto scalePattern = "(\\d+\\.?(\\d+)?)"; +const auto offsetPattern = "(-?\\d+\\.?(\\d+)?)"; // Can be negative +const auto offsetScalePattern = std::string("\\(") + scalePattern + "\\," + offsetPattern + "\\)"; +const auto minPattern = "(-?\\d+\\.?(\\d+)?)"; +const auto maxPattern = "(-?\\d+\\.?(\\d+)?)"; +const auto minMaxPattern = std::string("\\[") + minPattern + "\\|" + maxPattern + "\\]"; +const auto unitPattern = "\"(\\w*)\""; +const auto receiverPattern = "([\\w\\,]+|Vector__XXX)*"; +const auto whiteSpace = "\\s"; + +} // anonymous namespace + namespace libdbc { DbcParser::DbcParser() : version(""), nodes(), @@ -11,7 +31,27 @@ namespace libdbc { name_space_re("^(NS_)\\s\\:"), node_re("^(BU_:)\\s((?:[\\w]+?\\s?)*)"), message_re("^(BO_)\\s(\\d+)\\s(\\w+)\\:\\s(\\d+)\\s(\\w+|Vector__XXX)"), // NOTE: No multiplex support yet - signal_re("\\s(SG_)\\s(\\w+)\\s\\:\\s(\\d+)\\|(\\d+)\\@(\\d+)(\\+|\\-)\\s\\((\\d+\\.?(\\d+)?)\\,(\\d+\\.?(\\d+)?)\\)\\s\\[(-?\\d+\\.?(\\d+)?)\\|(-?\\d+\\.?(\\d+)?)\\]\\s\"(\\w*)\"\\s([\\w\\,]+|Vector__XXX)*") { + signal_re(std::string(whiteSpace) + + signalIdentifierPattern + + whiteSpace + + namePattern + + whiteSpace + + "\\:" + + whiteSpace + + bitStartPattern + + "\\|" + + lengthPattern + + "\\@" + + byteOrderPattern + + signPattern + + whiteSpace + + offsetScalePattern + + whiteSpace + + minMaxPattern + + whiteSpace + + unitPattern + + whiteSpace + + receiverPattern) { } From 1e4aa91b46cece1052516a9ec58d6bee9a064adb Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sat, 7 Jan 2023 14:22:43 +0100 Subject: [PATCH 04/14] document test --- test/test_dbc.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/test/test_dbc.cpp b/test/test_dbc.cpp index 34f8af5..f7c40d2 100644 --- a/test/test_dbc.cpp +++ b/test/test_dbc.cpp @@ -51,6 +51,10 @@ TEST_CASE("Testing dbc file loading", "[fileio]") { } +/*! + * \brief TEST_CASE + * Test negative values in offset, min, max + */ TEST_CASE("Testing negative values") { const auto* filename = std::tmpnam(NULL); @@ -61,8 +65,8 @@ TEST_CASE("Testing negative values") { std::fputs(R"(BO_ 234 MSG1: 8 Vector__XXX SG_ Sig1 : 55|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX SG_ Sig2 : 39|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX - SG_ Sig3 : 23|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX - SG_ Sig4 : 7|16@0- (1,0) [0|32767] "" Vector__XXX)", file); + SG_ Sig3 : 23|16@0- (10,0) [-3276.8|-3276.7] "C" Vector__XXX + SG_ Sig4 : 7|16@0- (1,-10) [0|32767] "" Vector__XXX)", file); std::fclose(file); auto parser = libdbc::DbcParser(); @@ -72,22 +76,30 @@ TEST_CASE("Testing negative values") { REQUIRE(parser.get_messages().at(0).signals.size() == 4); { const auto signal = parser.get_messages().at(0).signals.at(0); + REQUIRE(signal.factor == 0.1); + REQUIRE(signal.offset == 0); REQUIRE(signal.min == -3276.8); REQUIRE(signal.max == -3276.7); } { - const auto signal = parser.get_messages().at(1).signals.at(0); + const auto signal = parser.get_messages().at(0).signals.at(1); + REQUIRE(signal.factor == 0.1); + REQUIRE(signal.offset == 0); REQUIRE(signal.min == -3276.8); REQUIRE(signal.max == -3276.7); } { - const auto signal = parser.get_messages().at(2).signals.at(0); + const auto signal = parser.get_messages().at(0).signals.at(2); + REQUIRE(signal.factor == 10); + REQUIRE(signal.offset == 0); REQUIRE(signal.min == -3276.8); REQUIRE(signal.max == -3276.7); } { - const auto signal = parser.get_messages().at(3).signals.at(0); - REQUIRE(signal.min == -3276.8); - REQUIRE(signal.max == -3276.7); + const auto signal = parser.get_messages().at(0).signals.at(3); + REQUIRE(signal.factor == 0.1); + REQUIRE(signal.offset == -10); + REQUIRE(signal.min == 0); + REQUIRE(signal.max == 32767); } } From db184fec01fddf23e7776c81fd7b6b51a3eed05f Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sat, 7 Jan 2023 14:25:05 +0100 Subject: [PATCH 05/14] create a float Pattern and reuse it --- src/dbc.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/dbc.cpp b/src/dbc.cpp index 0245efd..03337a0 100644 --- a/src/dbc.cpp +++ b/src/dbc.cpp @@ -6,19 +6,21 @@ namespace { +const auto floatPattern = "(-?\\d+\\.?(\\d+)?)"; // Can be negative + const auto signalIdentifierPattern = "(SG_)"; const auto namePattern = "(\\w+)"; const auto bitStartPattern = "(\\d+)"; // Cannot be negative const auto lengthPattern = "(\\d+)"; // Cannot be negative const auto byteOrderPattern = "([0-1])"; const auto signPattern = "(\\+|\\-)"; -const auto scalePattern = "(\\d+\\.?(\\d+)?)"; -const auto offsetPattern = "(-?\\d+\\.?(\\d+)?)"; // Can be negative +const auto scalePattern = "(\\d+\\.?(\\d+)?)"; // Non negative float +const auto offsetPattern = floatPattern; const auto offsetScalePattern = std::string("\\(") + scalePattern + "\\," + offsetPattern + "\\)"; -const auto minPattern = "(-?\\d+\\.?(\\d+)?)"; -const auto maxPattern = "(-?\\d+\\.?(\\d+)?)"; +const auto minPattern = floatPattern; +const auto maxPattern = floatPattern; const auto minMaxPattern = std::string("\\[") + minPattern + "\\|" + maxPattern + "\\]"; -const auto unitPattern = "\"(\\w*)\""; +const auto unitPattern = "\"(\\w*)\""; // Random string const auto receiverPattern = "([\\w\\,]+|Vector__XXX)*"; const auto whiteSpace = "\\s"; From d5b7b09e02a36b7c2ec340512404ebe5ed4a56f9 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sat, 7 Jan 2023 14:39:03 +0100 Subject: [PATCH 06/14] forgotten to initialize factor --- src/signal.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/signal.cpp b/src/signal.cpp index 971cfd0..1124fc3 100644 --- a/src/signal.cpp +++ b/src/signal.cpp @@ -2,7 +2,7 @@ namespace libdbc { Signal::Signal(std::string name, bool is_multiplexed, uint32_t start_bit, uint32_t size, bool is_bigendian, bool is_signed, double factor, double offset, double min, double max, std::string unit, std::vector receivers) : - name(name), is_multiplexed(is_multiplexed), start_bit(start_bit), size(size), is_bigendian(is_bigendian), is_signed(is_signed), offset(offset), min(min), max(max), unit(unit), receivers(receivers) {} + name(name), is_multiplexed(is_multiplexed), start_bit(start_bit), size(size), is_bigendian(is_bigendian), is_signed(is_signed), factor(factor), offset(offset), min(min), max(max), unit(unit), receivers(receivers) {} bool Signal::operator==(const Signal& rhs) const { return (this->name == rhs.name) && (this->is_multiplexed == rhs.is_multiplexed) && From 3951a7cabcd2cdccd2f33fdd60e621aeb14e0af5 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sat, 7 Jan 2023 14:39:13 +0100 Subject: [PATCH 07/14] wrong factor used --- test/test_dbc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_dbc.cpp b/test/test_dbc.cpp index f7c40d2..2a7250d 100644 --- a/test/test_dbc.cpp +++ b/test/test_dbc.cpp @@ -97,7 +97,7 @@ TEST_CASE("Testing negative values") { } { const auto signal = parser.get_messages().at(0).signals.at(3); - REQUIRE(signal.factor == 0.1); + REQUIRE(signal.factor == 1); REQUIRE(signal.offset == -10); REQUIRE(signal.min == 0); REQUIRE(signal.max == 32767); From dc48817e23acb10d6159de11401e29828a19c232 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sat, 7 Jan 2023 17:06:23 +0100 Subject: [PATCH 08/14] - signals can also contain special characters: SG_ Speed : 0|8@1+ (1,0) [0|204] "Km/h" DEVICE1,DEVICE2,DEVICE3 --- src/dbc.cpp | 2 +- test/test_dbc.cpp | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/dbc.cpp b/src/dbc.cpp index 03337a0..bb21845 100644 --- a/src/dbc.cpp +++ b/src/dbc.cpp @@ -20,7 +20,7 @@ const auto offsetScalePattern = std::string("\\(") + scalePattern + "\\," + offs const auto minPattern = floatPattern; const auto maxPattern = floatPattern; const auto minMaxPattern = std::string("\\[") + minPattern + "\\|" + maxPattern + "\\]"; -const auto unitPattern = "\"(\\w*)\""; // Random string +const auto unitPattern = "\"(.*)\""; // Random string const auto receiverPattern = "([\\w\\,]+|Vector__XXX)*"; const auto whiteSpace = "\\s"; diff --git a/test/test_dbc.cpp b/test/test_dbc.cpp index 2a7250d..3d739ff 100644 --- a/test/test_dbc.cpp +++ b/test/test_dbc.cpp @@ -103,3 +103,26 @@ TEST_CASE("Testing negative values") { REQUIRE(signal.max == 32767); } } + + +TEST_CASE("Special characters in unit") { + const auto* filename = std::tmpnam(NULL); + + auto* file = std::fopen(filename, "w"); + CHECK(file); + + std::fputs(PRIMITIVE_DBC.c_str(), file); + std::fputs(R"(BO_ 234 MSG1: 8 Vector__XXX + SG_ Speed : 0|8@1+ (1,0) [0|204] "Km/h" DEVICE1,DEVICE2,DEVICE3)", file); + std::fclose(file); + + auto parser = libdbc::DbcParser(); + parser.parse_file(std::string(filename)); + + REQUIRE(parser.get_messages().size() == 1); + REQUIRE(parser.get_messages().at(0).signals.size() == 1); + { + const auto signal = parser.get_messages().at(0).signals.at(0); + REQUIRE(signal.unit.compare("Km/h") == 0); + } +} From 70d3b49916c4e4a4d58f607f8bd86d2f33a1d551 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Sat, 7 Jan 2023 17:34:56 +0100 Subject: [PATCH 09/14] link dbc target instead of adding source --- test/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0d46e8e..42c8a27 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -13,9 +13,9 @@ list(APPEND TEST_SOURCES test_dbc.cpp test_utils.cpp) -add_executable(tests ${TEST_SOURCES} ${SOURCE}) +add_executable(tests ${TEST_SOURCES}) target_compile_definitions(tests PRIVATE TESTDBCFILES_PATH="${CMAKE_CURRENT_SOURCE_DIR}/dbcs") -target_link_libraries(tests PRIVATE Catch2::Catch2WithMain) +target_link_libraries(tests PRIVATE dbc Catch2::Catch2WithMain) target_sources(tests INTERFACE FILE_SET HEADERS TYPE HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} From 8053bba7f104d7bab0abc3c794b8de05d59aa15f Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Wed, 11 Jan 2023 09:52:33 +0100 Subject: [PATCH 10/14] use sections --- test/test_dbc.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/test_dbc.cpp b/test/test_dbc.cpp index 3d739ff..7c59866 100644 --- a/test/test_dbc.cpp +++ b/test/test_dbc.cpp @@ -74,28 +74,29 @@ TEST_CASE("Testing negative values") { REQUIRE(parser.get_messages().size() == 1); REQUIRE(parser.get_messages().at(0).signals.size() == 4); - { + + SECTION("Evaluating first message") { const auto signal = parser.get_messages().at(0).signals.at(0); REQUIRE(signal.factor == 0.1); REQUIRE(signal.offset == 0); REQUIRE(signal.min == -3276.8); REQUIRE(signal.max == -3276.7); } - { + SECTION("Evaluating second message") { const auto signal = parser.get_messages().at(0).signals.at(1); REQUIRE(signal.factor == 0.1); REQUIRE(signal.offset == 0); REQUIRE(signal.min == -3276.8); REQUIRE(signal.max == -3276.7); } - { + SECTION("Evaluating third message"){ const auto signal = parser.get_messages().at(0).signals.at(2); REQUIRE(signal.factor == 10); REQUIRE(signal.offset == 0); REQUIRE(signal.min == -3276.8); REQUIRE(signal.max == -3276.7); } - { + SECTION("Evaluating fourth message"){ const auto signal = parser.get_messages().at(0).signals.at(3); REQUIRE(signal.factor == 1); REQUIRE(signal.offset == -10); From a666b5260d1bd8fc2ff32836e202cee06965ddd3 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Wed, 11 Jan 2023 09:57:50 +0100 Subject: [PATCH 11/14] add function create_tmp_dbc_with to simplify creating the dbc file --- test/test_dbc.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/test/test_dbc.cpp b/test/test_dbc.cpp index 7c59866..5bec7d5 100644 --- a/test/test_dbc.cpp +++ b/test/test_dbc.cpp @@ -1,6 +1,18 @@ #include #include "defines.hpp" #include +#include + +void create_tmp_dbc_with(const char* filename, const char* content) +{ + auto* file = std::fopen(filename, "w"); + CHECK(file); + + std::fputs(PRIMITIVE_DBC.c_str(), file); + std::fputs(content, file); + std::fclose(file); +} + TEST_CASE("Testing dbc file loading error issues", "[fileio][error]") { auto parser = std::unique_ptr(new libdbc::DbcParser()); @@ -58,16 +70,11 @@ TEST_CASE("Testing dbc file loading", "[fileio]") { TEST_CASE("Testing negative values") { const auto* filename = std::tmpnam(NULL); - auto* file = std::fopen(filename, "w"); - CHECK(file); - - std::fputs(PRIMITIVE_DBC.c_str(), file); - std::fputs(R"(BO_ 234 MSG1: 8 Vector__XXX + create_tmp_dbc_with(filename, R"(BO_ 234 MSG1: 8 Vector__XXX SG_ Sig1 : 55|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX SG_ Sig2 : 39|16@0- (0.1,0) [-3276.8|-3276.7] "C" Vector__XXX SG_ Sig3 : 23|16@0- (10,0) [-3276.8|-3276.7] "C" Vector__XXX - SG_ Sig4 : 7|16@0- (1,-10) [0|32767] "" Vector__XXX)", file); - std::fclose(file); + SG_ Sig4 : 7|16@0- (1,-10) [0|32767] "" Vector__XXX)"); auto parser = libdbc::DbcParser(); parser.parse_file(std::string(filename)); @@ -109,13 +116,9 @@ TEST_CASE("Testing negative values") { TEST_CASE("Special characters in unit") { const auto* filename = std::tmpnam(NULL); - auto* file = std::fopen(filename, "w"); - CHECK(file); + create_tmp_dbc_with(filename, R"(BO_ 234 MSG1: 8 Vector__XXX + SG_ Speed : 0|8@1+ (1,0) [0|204] "Km/h" DEVICE1,DEVICE2,DEVICE3)"); - std::fputs(PRIMITIVE_DBC.c_str(), file); - std::fputs(R"(BO_ 234 MSG1: 8 Vector__XXX - SG_ Speed : 0|8@1+ (1,0) [0|204] "Km/h" DEVICE1,DEVICE2,DEVICE3)", file); - std::fclose(file); auto parser = libdbc::DbcParser(); parser.parse_file(std::string(filename)); From 6b4061c8759789bdc5138227d4f5fa564ef9304e Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Wed, 11 Jan 2023 10:00:05 +0100 Subject: [PATCH 12/14] add section to describe what is done and remove comment, because the testcase describes already --- test/test_dbc.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/test/test_dbc.cpp b/test/test_dbc.cpp index 5bec7d5..79079f2 100644 --- a/test/test_dbc.cpp +++ b/test/test_dbc.cpp @@ -63,10 +63,6 @@ TEST_CASE("Testing dbc file loading", "[fileio]") { } -/*! - * \brief TEST_CASE - * Test negative values in offset, min, max - */ TEST_CASE("Testing negative values") { const auto* filename = std::tmpnam(NULL); @@ -125,7 +121,7 @@ TEST_CASE("Special characters in unit") { REQUIRE(parser.get_messages().size() == 1); REQUIRE(parser.get_messages().at(0).signals.size() == 1); - { + SECTION("Checking that signal with special characters as unit is parsed correctly") { const auto signal = parser.get_messages().at(0).signals.at(0); REQUIRE(signal.unit.compare("Km/h") == 0); } From b48f4730f62f3e4c2ba3c53f127e23fa5748c08b Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Wed, 11 Jan 2023 10:10:59 +0100 Subject: [PATCH 13/14] use catch instead of add_test --- test/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 42c8a27..b76812e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -8,6 +8,7 @@ FetchContent_Declare( GIT_TAG v3.2.1 ) FetchContent_MakeAvailable(Catch2) +include(Catch) list(APPEND TEST_SOURCES test_dbc.cpp @@ -20,5 +21,4 @@ target_sources(tests INTERFACE FILE_SET HEADERS TYPE HEADERS BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} FILES defines.hpp) - -add_test(NAME tests COMMAND $) +catch_discover_tests(tests) From 2a4d0598f28aefa2c1218aa363b1ff7aac6e2ff3 Mon Sep 17 00:00:00 2001 From: Martin Marmsoler Date: Thu, 12 Jan 2023 09:00:44 +0100 Subject: [PATCH 14/14] remove not needed header --- test/test_dbc.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/test/test_dbc.cpp b/test/test_dbc.cpp index 79079f2..4ad0c8e 100644 --- a/test/test_dbc.cpp +++ b/test/test_dbc.cpp @@ -1,7 +1,6 @@ #include #include "defines.hpp" #include -#include void create_tmp_dbc_with(const char* filename, const char* content) {