diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a21995b..0a62c5f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -51,7 +51,6 @@ jobs: - name: ๐Ÿ› ๏ธ Build run: | - cd tests mkdir -p build cd build CC=gcc-12 CXX=g++-12 cmake \ @@ -59,14 +58,15 @@ jobs: -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -DCMAKE_C_FLAGS="-fuse-ld=lld --coverage" \ -DCMAKE_CXX_FLAGS="-fuse-ld=lld --coverage" \ + -DIMHEX_PATTERNS_ENABLE_UNIT_TESTS=ON \ -DLIBPL_ENABLE_TESTS=OFF \ -DLIBPL_ENABLE_CLI=OFF \ .. - make -j4 + make -j4 unit_tests - name: ๐Ÿงช Perform Unit Tests run: | - cd tests/build + cd build ctest --output-on-failure -j 4 - name: ๐Ÿ“Ž Validate JSON Files diff --git a/.gitignore b/.gitignore index 1351e79..9a0898a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,12 @@ tests/cmake*/ tests/build*/ +build/ +.vscode/ +.devcontainer/ +.cache/ .idea/ -.DS_Store \ No newline at end of file +.DS_Store + +compile_commands.json \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cbbb75e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,30 @@ +cmake_minimum_required(VERSION 3.16) + +project(ImHex-Patterns) + +option(IMHEX_PATTERNS_ENABLE_UNIT_TESTS "Enable building unit tests for ImHex-Patterns" OFF) + +# if enabled, add a unit_test custom target for all the unit tests to be registered against +if(IMHEX_PATTERNS_ENABLE_UNIT_TESTS) + if(NOT TARGET unit_tests) + enable_testing() + add_custom_target(unit_tests) + endif() +endif() + +# If this has been manually cloned into another project, libpl may already have been set up +if(NOT TARGET libpl) + include(FetchContent) + + FetchContent_Declare( + pattern_language + GIT_REPOSITORY https://github.com/WerWolv/PatternLanguage + GIT_TAG master + ) + + FetchContent_MakeAvailable(pattern_language) +endif() + +if(IMHEX_PATTERNS_ENABLE_UNIT_TESTS) + add_subdirectory(tests) +endif() \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2c6af8d..407b211 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,23 +1,7 @@ cmake_minimum_required(VERSION 3.16) -project(tests) - set(CMAKE_CXX_STANDARD 20) -include(FetchContent) - -FetchContent_Declare( - pattern_language - GIT_REPOSITORY https://github.com/WerWolv/PatternLanguage - GIT_TAG master -) - -FetchContent_MakeAvailable(pattern_language) - -enable_testing() - add_subdirectory(patterns) add_subdirectory(includes) -add_subdirectory(magic) - -add_custom_target(test_all DEPENDS patterns_tests includes_test magic_test) \ No newline at end of file +add_subdirectory(magic) \ No newline at end of file diff --git a/tests/includes/CMakeLists.txt b/tests/includes/CMakeLists.txt index ce65fc7..75be76e 100644 --- a/tests/includes/CMakeLists.txt +++ b/tests/includes/CMakeLists.txt @@ -17,7 +17,7 @@ add_executable(includes_test target_include_directories(includes_test PRIVATE include) target_link_libraries(includes_test PRIVATE libpl fmt::fmt-header-only) -set_target_properties(includes_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set_target_properties(includes_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) message(STATUS "Adding Include Tests") foreach (include IN LISTS INCLUDES) @@ -25,6 +25,7 @@ foreach (include IN LISTS INCLUDES) set(TEST_NAME "Includes/${INCLUDE_NAME}") - add_test(NAME ${TEST_NAME} COMMAND includes_test "${INCLUDE_NAME}" "${include}" "${PATTERN_INCLUDES}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + add_test(NAME ${TEST_NAME} COMMAND includes_test "${INCLUDE_NAME}" "${include}" "${PATTERN_INCLUDES}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_tests_properties(${TEST_NAME} PROPERTIES SKIP_RETURN_CODE 77) -endforeach () \ No newline at end of file +endforeach () +add_dependencies(unit_tests ${PROJECT_NAME}) \ No newline at end of file diff --git a/tests/magic/CMakeLists.txt b/tests/magic/CMakeLists.txt index 50c7327..999828b 100644 --- a/tests/magic/CMakeLists.txt +++ b/tests/magic/CMakeLists.txt @@ -19,7 +19,7 @@ pkg_search_module(MAGIC libmagic>=5.39 REQUIRED) target_include_directories(magic_test PRIVATE include ${MAGIC_INCLUDE_DIRS}) target_link_libraries(magic_test PRIVATE libpl ${MAGIC_LINK_LIBRARIES} fmt::fmt-header-only) -set_target_properties(magic_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set_target_properties(magic_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) message(STATUS "Adding Magic Tests") foreach (magic_file IN LISTS MAGIC_FILES) @@ -27,6 +27,7 @@ foreach (magic_file IN LISTS MAGIC_FILES) set(TEST_NAME "Magic/${MAGIC_NAME}") - add_test(NAME ${TEST_NAME} COMMAND magic_test "${MAGIC_NAME}" "${magic_file}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + add_test(NAME ${TEST_NAME} COMMAND magic_test "${MAGIC_NAME}" "${magic_file}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_tests_properties(${TEST_NAME} PROPERTIES SKIP_RETURN_CODE 77) -endforeach () \ No newline at end of file +endforeach () +add_dependencies(unit_tests ${PROJECT_NAME}) \ No newline at end of file diff --git a/tests/patterns/CMakeLists.txt b/tests/patterns/CMakeLists.txt index bdb423e..c824a58 100644 --- a/tests/patterns/CMakeLists.txt +++ b/tests/patterns/CMakeLists.txt @@ -17,7 +17,7 @@ add_executable(patterns_tests target_include_directories(patterns_tests PRIVATE include) target_link_libraries(patterns_tests PRIVATE libpl fmt::fmt-header-only) -set_target_properties(patterns_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) +set_target_properties(patterns_tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) message(STATUS "Adding Pattern Tests") foreach (pattern IN LISTS PATTERNS) @@ -33,13 +33,14 @@ foreach (pattern IN LISTS PATTERNS) foreach (TEST_FILE IN LISTS TEST_FILES) get_filename_component(TEST_FILENAME ${TEST_FILE} NAME) set(TEST_NAME "Patterns/${PATTERN_NAME}/${TEST_FILENAME}") - add_test(NAME ${TEST_NAME} COMMAND patterns_tests "${PATTERN_NAME}" "${pattern}" "${PATTERN_INCLUDES}" "${TEST_FILE}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + add_test(NAME ${TEST_NAME} COMMAND patterns_tests "${PATTERN_NAME}" "${pattern}" "${PATTERN_INCLUDES}" "${TEST_FILE}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_tests_properties(${TEST_NAME} PROPERTIES SKIP_RETURN_CODE 77) endforeach () else () set(TEST_NAME "Patterns/${PATTERN_NAME}") - add_test(NAME ${TEST_NAME} COMMAND patterns_tests "${PATTERN_NAME}" "${pattern}" "${PATTERN_INCLUDES}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + add_test(NAME ${TEST_NAME} COMMAND patterns_tests "${PATTERN_NAME}" "${pattern}" "${PATTERN_INCLUDES}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_tests_properties(${TEST_NAME} PROPERTIES SKIP_RETURN_CODE 77) message(STATUS " No test file available for ${PATTERN_NAME} pattern") endif () endforeach () +add_dependencies(unit_tests ${PROJECT_NAME})