tests: Added tests for magic files

This commit is contained in:
WerWolv
2022-08-03 16:18:18 +02:00
parent e574f8048e
commit de752cdbc3
4 changed files with 69 additions and 2 deletions

View File

@@ -18,5 +18,6 @@ enable_testing()
add_subdirectory(patterns)
add_subdirectory(includes)
add_subdirectory(magic)
add_custom_target(test_all DEPENDS patterns_tests includes_test)
add_custom_target(test_all DEPENDS patterns_tests includes_test magic_test)

View File

@@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.16)
project(magic_test)
set(TOP_LEVEL "${CMAKE_CURRENT_SOURCE_DIR}/../..")
set(MAGIC_FOLDER "${TOP_LEVEL}/magic")
file(GLOB MAGIC_FILES
"${MAGIC_FOLDER}/*"
)
add_executable(magic_test
source/main.cpp
)
find_package(PkgConfig REQUIRED)
pkg_search_module(MAGIC libmagic>=5.39)
target_include_directories(magic_test PRIVATE include)
target_link_libraries(magic_test libpl magic)
set_target_properties(magic_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
foreach (magic_file IN LISTS MAGIC_FILES)
file(RELATIVE_PATH MAGIC_NAME ${MAGIC_FOLDER} ${magic_file})
set(TEST_NAME "Magic/${MAGIC_NAME}")
add_test(NAME ${TEST_NAME} COMMAND magic_test "${MAGIC_NAME}" "${magic_file}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
set_tests_properties(${TEST_NAME} PROPERTIES SKIP_RETURN_CODE 77)
endforeach ()

View File

@@ -0,0 +1,34 @@
#include <helpers/file.hpp>
#include <helpers/guards.hpp>
#include <fmt/format.h>
#include <cstdlib>
#include <magic.h>
#define EXIT_SKIP 77
int main(int argc, char **argv) {
// Any number of arguments other than 3 are invalid
if (argc != 3)
return EXIT_FAILURE;
// Extract command line arguments
const std::string magicName = argv[1];
const std::fs::path magicFilePath = argv[2];
fmt::print("Running test {} on test file {}\n", magicName, magicFilePath.filename().string());
magic_t ctx = magic_open(MAGIC_NONE);
PL_ON_SCOPE_EXIT { magic_close(ctx); };
if (ctx == nullptr)
return EXIT_FAILURE;
if (magic_compile(ctx, magicFilePath.string().c_str()) != 0) {
fmt::print("Error during compilation: {}\n", magic_error(ctx));
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}