mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2026-01-26 21:41:34 +03:00
Add tests that relied on POSIX shell script to native CMake.
This commit is contained in:
committed by
Daniel Garcia Moreno
parent
68f91d1893
commit
6555048b24
@@ -494,6 +494,62 @@ if(LIBXML2_WITH_TESTS)
|
||||
add_test(NAME testdict COMMAND testdict)
|
||||
add_test(NAME testparser COMMAND testparser WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
add_test(NAME testrecurse COMMAND testrecurse WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
|
||||
|
||||
function(ADD_SUITE test_dir program)
|
||||
file(GLOB_RECURSE files_to_process CONFIGURE_DEPENDS "./test/${test_dir}/*.script")
|
||||
|
||||
foreach(file_path ${files_to_process})
|
||||
file(RELATIVE_PATH file_relative "${CMAKE_CURRENT_SOURCE_DIR}" "${file_path}")
|
||||
get_filename_component(dir_path ${file_relative} DIRECTORY)
|
||||
get_filename_component(base_name ${file_relative} NAME_WE)
|
||||
get_filename_component(extension ${file_relative} EXT)
|
||||
|
||||
set(actual_stdout "${CMAKE_CURRENT_BINARY_DIR}/result/${test_dir}/${base_name}")
|
||||
set(actual_stderr "${CMAKE_CURRENT_BINARY_DIR}/result/${test_dir}/${base_name}.err")
|
||||
set(expected_stdout "${CMAKE_CURRENT_SOURCE_DIR}/result/${test_dir}/${base_name}")
|
||||
set(expected_stderr "${CMAKE_CURRENT_SOURCE_DIR}/result/${test_dir}/${base_name}.err")
|
||||
|
||||
set(xml_path "${CMAKE_CURRENT_SOURCE_DIR}/${dir_path}/${base_name}.xml")
|
||||
set(sgml_path "${CMAKE_CURRENT_SOURCE_DIR}/${dir_path}/${base_name}.sgml")
|
||||
|
||||
if(EXISTS "${xml_path}")
|
||||
set(input_file "./${dir_path}/${base_name}.xml")
|
||||
elseif(EXISTS "${sgml_path}")
|
||||
set(input_file "./${dir_path}/${base_name}.sgml")
|
||||
else()
|
||||
message(FATAL_ERROR "Neither XML nor SGML exists for: ${dir_path}/${base_name}")
|
||||
endif()
|
||||
|
||||
add_test(
|
||||
NAME ${test_dir}_${base_name}
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DPROG=$<TARGET_FILE:${program}>
|
||||
-DSTDIN=./${dir_path}/${base_name}.script
|
||||
-DXML=${input_file}
|
||||
-DSTDOUT=${actual_stdout}
|
||||
-DSTDERR=${actual_stderr}
|
||||
-DEXPECTED_STDOUT=${expected_stdout}
|
||||
-DEXPECTED_STDERR=${expected_stderr}
|
||||
-DWORKDIR=${CMAKE_CURRENT_SOURCE_DIR}
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/run_and_diff.cmake
|
||||
)
|
||||
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
add_suite("scripts" xmllint)
|
||||
add_suite("catalogs" xmlcatalog)
|
||||
|
||||
add_test(
|
||||
NAME catalog_add_del
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DXMLCAT=$<TARGET_FILE:xmlcatalog>
|
||||
-DEXPECTED_FULL=${CMAKE_CURRENT_SOURCE_DIR}/result/catalogs/mycatalog.full
|
||||
-DEXPECTED_EMPTY=${CMAKE_CURRENT_SOURCE_DIR}/result/catalogs/mycatalog.empty
|
||||
-P ${CMAKE_CURRENT_SOURCE_DIR}/test_xmlcatalog_add_del.cmake
|
||||
)
|
||||
|
||||
endif()
|
||||
|
||||
if(LIBXML2_WITH_DOCS OR LIBXML2_WITH_PYTHON)
|
||||
|
||||
44
run_and_diff.cmake
Normal file
44
run_and_diff.cmake
Normal file
@@ -0,0 +1,44 @@
|
||||
# Ensure output directory exists
|
||||
get_filename_component(_outdir "${STDOUT}" DIRECTORY)
|
||||
file(MAKE_DIRECTORY "${_outdir}")
|
||||
|
||||
# Run the program
|
||||
execute_process(
|
||||
COMMAND "${PROG}" --shell "${XML}"
|
||||
INPUT_FILE "${STDIN}"
|
||||
OUTPUT_FILE "${STDOUT}"
|
||||
ERROR_FILE "${STDERR}"
|
||||
RESULT_VARIABLE rc
|
||||
WORKING_DIRECTORY "${WORKDIR}"
|
||||
)
|
||||
|
||||
if(NOT rc EQUAL 0)
|
||||
message(STATUS "Program exited with ${rc}")
|
||||
endif()
|
||||
|
||||
# Diff stdout
|
||||
if(NOT EXISTS "${EXPECTED_STDOUT}")
|
||||
message(FATAL_ERROR "Missing expected stdout file: ${EXPECTED_STDOUT}")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E compare_files
|
||||
"${STDOUT}" "${EXPECTED_STDOUT}"
|
||||
RESULT_VARIABLE cmp_stdout
|
||||
)
|
||||
|
||||
if(NOT cmp_stdout EQUAL 0)
|
||||
message(FATAL_ERROR "stdout does not match expected")
|
||||
endif()
|
||||
|
||||
# Diff stderr if it exists
|
||||
if(EXISTS "${EXPECTED_STDERR}")
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E compare_files
|
||||
"${STDERR}" "${EXPECTED_STDERR}"
|
||||
RESULT_VARIABLE cmp_stderr
|
||||
)
|
||||
if(NOT cmp_stderr EQUAL 0)
|
||||
message(FATAL_ERROR "stderr does not match expected")
|
||||
endif()
|
||||
endif()
|
||||
35
test_xmlcatalog_add_del.cmake
Normal file
35
test_xmlcatalog_add_del.cmake
Normal file
@@ -0,0 +1,35 @@
|
||||
# test_xmlcatalog_add_del.cmake
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
set(WORK "${CMAKE_CURRENT_BINARY_DIR}/catalog_add_del_work")
|
||||
file(REMOVE_RECURSE "${WORK}")
|
||||
file(MAKE_DIRECTORY "${WORK}")
|
||||
|
||||
set(CAT "${WORK}/mycatalog")
|
||||
|
||||
# small helper macro (shorter execute_process)
|
||||
macro(run)
|
||||
execute_process(COMMAND ${ARGV} RESULT_VARIABLE rv)
|
||||
if(rv)
|
||||
message(FATAL_ERROR "Command failed: ${ARGV}")
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
# 1. Create
|
||||
run("${XMLCAT}" --create --noout "${CAT}")
|
||||
|
||||
# 2. Adds
|
||||
run("${XMLCAT}" --noout --add public Pubid sysid "${CAT}")
|
||||
run("${XMLCAT}" --noout --add public Pubid2 sysid2 "${CAT}")
|
||||
run("${XMLCAT}" --noout --add public Pubid3 sysid3 "${CAT}")
|
||||
|
||||
# Check full contents
|
||||
run(${CMAKE_COMMAND} -E compare_files "${CAT}" "${EXPECTED_FULL}")
|
||||
|
||||
# 3. Deletes
|
||||
run("${XMLCAT}" --noout --del sysid "${CAT}")
|
||||
run("${XMLCAT}" --noout --del sysid3 "${CAT}")
|
||||
run("${XMLCAT}" --noout --del sysid2 "${CAT}")
|
||||
|
||||
# Check empty contents
|
||||
run(${CMAKE_COMMAND} -E compare_files "${CAT}" "${EXPECTED_EMPTY}")
|
||||
Reference in New Issue
Block a user