Files
hdf5/java/jtest/CMakeLists.txt

178 lines
8.0 KiB
CMake

#-----------------------------------------------------------------------------
# CMake configuration for HDF5 Java test suite
# This file sets up the build, and test execution rules for the HDF5 Java test suite.
# It handles Java test source grouping, JAR creation, test data management, test execution (including VOL tests),
# and integration with the HDF5 Java FFM and core libraries.
#-----------------------------------------------------------------------------
cmake_minimum_required (VERSION 3.26)
project (HDF5_JAVA_JTEST Java)
set (CMAKE_VERBOSE_MAKEFILE 1)
set_directory_properties(PROPERTIES INCLUDE_DIRECTORIES "${HDF5_JAVA_JSRC_SOURCE_DIR};${HDF5_JAVA_JSRC_BINARY_DIR};${HDF5_JAVA_LIB_DIR}")
#-----------------------------------------------------------------------------
# Build FFM-only tests (no hdf.hdf5lib dependencies)
# Build FfmTestSupport first, then test files that depend on it
#-----------------------------------------------------------------------------
# Set classpath for FfmTestSupport compilation (needs FFM bindings)
set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVAHDF5_JARS}")
# Build FfmTestSupport utility class first
file (WRITE ${PROJECT_BINARY_DIR}/FfmTestSupportManifest.txt
"Main-Class: jtest.FfmTestSupport
Enable-Native-Access: ALL-UNNAMED
"
)
add_jar (${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport
MANIFEST ${PROJECT_BINARY_DIR}/FfmTestSupportManifest.txt
FfmTestSupport.java
)
get_target_property (${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport_JAR_FILE
${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport JAR_FILE)
add_dependencies (${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport ${HDF5_JAVA_JSRC_LIB_TARGET})
set_target_properties (${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport PROPERTIES FOLDER test/java/ffm)
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_JAVA_JTEST_FfmTestSupport_SRC_FORMAT FfmTestSupport.java)
endif ()
# Build FFM test files (they depend on FfmTestSupport)
set (HDF5_JAVA_JTEST_FFM_TEST_SOURCES
TestH5Fffm
TestH5Dffm
TestH5Sffm
TestH5Tffm
TestH5Affm
TestH5Pffm
TestH5Effm
TestH5Gffm
TestH5Iffm
TestH5Lffm
TestH5Rffm
TestH5Offm
TestH5VLffm
TestH5PLffm
TestH5Zffm
TestH5FDffm
)
# Update classpath to include FfmTestSupport JAR for test compilation
set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVAHDF5_JARS};${${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport_JAR_FILE};${HDF5_JAVA_JUNIT_JAR};${HDF5_JAVA_HAMCREST_JAR};${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_SIMPLE_JAR}")
foreach (ffm_test_file ${HDF5_JAVA_JTEST_FFM_TEST_SOURCES})
file (WRITE ${PROJECT_BINARY_DIR}/${ffm_test_file}FfmManifest.txt
"Main-Class: jtest.${ffm_test_file}
Enable-Native-Access: ALL-UNNAMED
"
)
add_jar (${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file}
MANIFEST ${PROJECT_BINARY_DIR}/${ffm_test_file}FfmManifest.txt
${ffm_test_file}.java
)
get_target_property (${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file}_JAR_FILE
${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file} JAR_FILE)
# FFM tests depend on both javahdf5 JAR and FfmTestSupport JAR
add_dependencies (${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file} ${HDF5_JAVA_JSRC_LIB_TARGET} ${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport)
set_target_properties (${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file} PROPERTIES FOLDER test/java/ffm)
if (HDF5_ENABLE_FORMATTERS)
clang_format (HDF5_JAVA_JTEST_${ffm_test_file}_FFM_SRC_FORMAT ${ffm_test_file}.java)
endif ()
endforeach ()
# Restore classpath for other tests
set (CMAKE_JAVA_INCLUDE_PATH "${HDF5_JAVAHDF5_JARS};${HDF5_JAVA_JUNIT_JAR};${HDF5_JAVA_HAMCREST_JAR};${HDF5_JAVA_LOGGING_JAR};${HDF5_JAVA_LOGGING_SIMPLE_JAR}")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterate.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterateL1.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterateL2.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterateO1.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${PROJECT_SOURCE_DIR}/h5ex_g_iterate.orig" "${PROJECT_BINARY_DIR}/h5ex_g_iterateO2.hdf" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/trefer_reg.h5" "${PROJECT_BINARY_DIR}/trefer_reg.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/trefer_attr.h5" "${PROJECT_BINARY_DIR}/trefer_attr.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tdatareg.h5" "${PROJECT_BINARY_DIR}/tdatareg.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tattrreg.h5" "${PROJECT_BINARY_DIR}/tattrreg.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tintsattrs.h5" "${PROJECT_BINARY_DIR}/tintsattrs.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
HDFTEST_COPY_FILE("${HDF5_TOOLS_TST_DIR}/testfiles/tfloatsattrs.h5" "${PROJECT_BINARY_DIR}/tfloatsattrs.h5" "${HDF5_JAVA_JTEST_LIB_TARGET}_files")
add_custom_target(${HDF5_JAVA_JTEST_LIB_TARGET}_files ALL COMMENT "Copying files needed by ${HDF5_JAVA_JTEST_LIB_TARGET} tests" DEPENDS ${${HDF5_JAVA_JTEST_LIB_TARGET}_files_list})
if (WIN32)
set (CMAKE_JAVA_INCLUDE_FLAG_SEP ";")
else ()
set (CMAKE_JAVA_INCLUDE_FLAG_SEP ":")
endif ()
get_property (target_name TARGET ${HDF5_JAVA_JSRC_LIB_TARGET} PROPERTY OUTPUT_NAME)
set (CMAKE_JAVA_CLASSPATH ".")
foreach (CMAKE_INCLUDE_PATH ${CMAKE_JAVA_INCLUDE_PATH})
set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${CMAKE_INCLUDE_PATH}")
endforeach ()
if (HDF5_TEST_JAVA AND HDF5_TEST_SERIAL)
add_test (
NAME JUnitExt-clear-objects
COMMAND ${CMAKE_COMMAND} -E remove
test.h5
testF2.h5
testPf00000.h5
testPf00001.h5
WORKING_DIRECTORY ${HDF5_BINARY_DIR}/java/jtest
)
set_tests_properties (JUnitExt-clear-objects PROPERTIES FIXTURES_SETUP clear_JUnitExt)
add_test (
NAME JUnitExt-clean-objects
COMMAND ${CMAKE_COMMAND} -E remove
test.h5
testF2.h5
testPf00000.h5
testPf00001.h5
WORKING_DIRECTORY ${HDF5_BINARY_DIR}/java/jtest
)
set_tests_properties (JUnitExt-clean-objects PROPERTIES FIXTURES_CLEANUP clear_JUnitExt)
#-----------------------------------------------------------------------------
# Add FFM-only test execution (Test* files, skip FfmTestSupport utility)
#-----------------------------------------------------------------------------
foreach (ffm_test_file ${HDF5_JAVA_JTEST_FFM_TEST_SOURCES})
set (TEST_FFM_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${HDF5_JAVA_JTEST_LIB_TARGET}_${ffm_test_file}_JAR_FILE}${CMAKE_JAVA_INCLUDE_FLAG_SEP}${${HDF5_JAVA_JTEST_LIB_TARGET}_FfmTestSupport_JAR_FILE}")
add_test (
NAME JUnitFFM-${ffm_test_file}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_JAVA=${CMAKE_Java_RUNTIME};${CMAKE_Java_RUNTIME_FLAGS}"
-D "TEST_CLASSPATH:STRING=${TEST_FFM_JAVA_CLASSPATH}"
-D "TEST_ARGS:STRING=${CMD_ARGS}-ea;org.junit.runner.JUnitCore"
-D "TEST_PROGRAM=jtest.${ffm_test_file}"
-D "TEST_LIBRARY_DIRECTORY=${CMAKE_TEST_OUTPUT_DIRECTORY}"
-D "TEST_FOLDER=${HDF5_BINARY_DIR}/java/jtest"
-D "TEST_OUTPUT=JUnitFFM-${ffm_test_file}.out"
-D "TEST_EXPECT=0"
-D "TEST_MASK_ERROR=TRUE"
-D "TEST_SKIP_COMPARE=TRUE"
-P "${HDF_RESOURCES_DIR}/runTest.cmake"
)
set_tests_properties (JUnitFFM-${ffm_test_file} PROPERTIES
ENVIRONMENT "HDF5_PLUGIN_PATH=${CMAKE_BINARY_DIR}/testdir2"
FIXTURES_REQUIRED clear_JUnitExt
WORKING_DIRECTORY ${HDF5_BINARY_DIR}/java/jtest
)
if ("JUnitFFM-${ffm_test_file}" MATCHES "${HDF5_DISABLE_TESTS_REGEX}")
set_tests_properties (JUnitFFM-${ffm_test_file} PROPERTIES DISABLED true)
endif ()
endforeach ()
endif ()
set (CMAKE_JAVA_INCLUDE_PATH "")