File: TestUtils.cmake

package info (click to toggle)
fontforge 1%3A20230101~dfsg-1.1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 55,464 kB
  • sloc: ansic: 462,618; python: 6,916; cpp: 214; objc: 122; sh: 101; makefile: 55; xml: 11
file content (80 lines) | stat: -rw-r--r-- 2,810 bytes parent folder | download | duplicates (4)
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()