mirror of
https://github.com/WerWolv/ImHex-Patterns.git
synced 2026-03-28 07:47:02 -05:00
tests: Added tests for magic files
This commit is contained in:
31
tests/magic/CMakeLists.txt
Normal file
31
tests/magic/CMakeLists.txt
Normal 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 ()
|
||||
34
tests/magic/source/main.cpp
Normal file
34
tests/magic/source/main.cpp
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user