1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
# Distributed under the original FontForge BSD 3-clause license
#[=======================================================================[.rst:
TestUtils
---------
``add_download_target` creates a custom target that will ensure that
``font`` exists. If it is not present in the source tree, it will be
downloaded via ``url``.
``add_ff_test`` and ``add_py_test`` both wrap ``add_test`` to add a
standard system test, which involves invoking either a native or Python
script. System tests are performed by invoking ``systestdriver``, which
handles determining if a test should be skipped, based on missing inputs,
and also runs each test in its own test folder.
#]=======================================================================]
function(add_download_target font url)
add_custom_command(
OUTPUT
"${CMAKE_CURRENT_BINARY_DIR}/fonts/${font}"
COMMAND "${CMAKE_COMMAND}"
-D DEST:FILEPATH="${CMAKE_CURRENT_BINARY_DIR}/fonts/${font}"
-D SOURCE:FILEPATH="${CMAKE_CURRENT_SOURCE_DIR}/fonts/${font}"
-D URL:STRING="${url}"
-P "${CMAKE_CURRENT_SOURCE_DIR}/../cmake/scripts/DownloadIfMissing.cmake"
)
endfunction()
function(_add_systest test_mode binary test_script)
get_filename_component(_test_name "${test_script}" NAME_WE)
set(_test_name "${_test_name}_${test_mode}")
list(LENGTH ARGN _arglen)
if (${_arglen} LESS 1)
message(FATAL_ERROR "Must pass a description as the last argument")
endif()
list(GET ARGN -1 _description)
list(REMOVE_AT ARGN -1)
# Prior to CMake 3.9, skipped tests fail the suite
if(${CMAKE_VERSION} VERSION_LESS "3.9")
set(_skip_arg --skip-as-pass)
endif()
add_test(NAME ${_test_name}
COMMAND systestdriver
--mode ${test_mode}
--binary "${binary}"
--script "${CMAKE_CURRENT_SOURCE_DIR}/${test_script}"
--exedir "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
--libdir "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}"
--argdir "${CMAKE_CURRENT_BINARY_DIR}/fonts"
--argdir "${CMAKE_CURRENT_SOURCE_DIR}/fonts"
--desc "${_description}"
${_skip_arg}
${ARGN}
WORKING_DIRECTORY
"${CMAKE_CURRENT_BINARY_DIR}"
)
set_tests_properties(${_test_name} PROPERTIES SKIP_RETURN_CODE 77)
endfunction()
function(add_ff_test test_script)
_add_systest(ff "$<TARGET_FILE:fontforgeexe>" "${test_script}" ${ARGN})
endfunction()
function(add_py_test test_script)
list(FIND ARGN PYHOOK_DISABLED _disable_pyhook_index)
if(NOT _disable_pyhook_index LESS 0)
list(REMOVE_AT ARGN ${_disable_pyhook_index})
set(_disable_pyhook 1)
endif()
_add_systest(py "$<TARGET_FILE:fontforgeexe>" "${test_script}" ${ARGN})
if(ENABLE_PYTHON_EXTENSION_RESULT AND NOT _disable_pyhook)
_add_systest(pyhook "${Python3_EXECUTABLE}" "${test_script}" ${ARGN})
endif()
endfunction()
|