1
0
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:
Peter Fordham
2025-12-11 14:14:26 -08:00
committed by Daniel Garcia Moreno
parent 68f91d1893
commit 6555048b24
3 changed files with 135 additions and 0 deletions

View File

@@ -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
View 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()

View 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}")