Fixes broken export to PDF with links.
[inkscape.git] / testfiles / CMakeLists.txt
blob0f2591485378bb1448569c3252c5712f9b94d279
1 # SPDX-License-Identifier: GPL-2.0-or-later
2 # -----------------------------------------------------------------------------
4 # custom "check" target with proper dependencies (builds inkscape and tests)
5 file(TO_NATIVE_PATH "/" _separator)
6 ADD_DEFINITIONS(-DINKSCAPE_TESTS_DIR="${CMAKE_SOURCE_DIR}/testfiles")
7 add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
8                         DEPENDS tests unit_tests
9                         WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
10 add_dependencies(check inkscape)
12 # create symlink "inkscape_datadir" to use as INKSCAPE_DATADIR
13 # - ensures tests can be run without installing the project
14 # - also helpful for running Inkscape uninstalled: 'INKSVAPE_DATADIR=inkscape_datadir bin/inkscape'
15 set(INKSCAPE_DATADIR ${CMAKE_BINARY_DIR}/inkscape_datadir)
16 if(NOT EXISTS ${INKSCAPE_DATADIR}/inkscape)
17     set(link_source ${INKSCAPE_DATADIR}/inkscape)
18     set(link_target ${CMAKE_SOURCE_DIR}/share)
19     message(STATUS "Creating link '${link_source}' --> '${link_target}'")
20     execute_process(COMMAND mkdir inkscape_datadir)
21     execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_target} ${link_source}
22                     RESULT_VARIABLE result)
23     if(result)
24         message(WARNING "Creation of link failed: ${result}")
25     endif()
26 endif()
27 # check if creation succeeded
28 if(EXISTS ${INKSCAPE_DATADIR}/inkscape)
29     set(CMAKE_CTEST_ENV INKSCAPE_DATADIR=${INKSCAPE_DATADIR})
30 else()
31     message(WARNING "Directory 'inkscape_datadir/inkscape' missing. Tests might not run properly.\n"
32                     "Possible solutions:\n"
33                     " - create a suitable symlink yourself, e.g.\n"
34                     "   ln -s ${CMAKE_SOURCE_DIR}/share ${INKSCAPE_DATADIR}/inkscape\n"
35                     " - run '${CMAKE_MAKE_PROGRAM} install' before running tests (only for not relocatable packages.\n"
36                     " - set the environment variable 'INKSCAPE_DATADIR' manually (every time you run tests)")
37 endif()
40 # Set custom profile directory for tests using environment variable.
41 # Copy CTestCustom.cmake into binary dir, where it will be picked up automatically by ctest for cleanup.
42 set(INKSCAPE_TEST_PROFILE_DIR ${CMAKE_CURRENT_BINARY_DIR}/test_profile_dir)
43 set(INKSCAPE_TEST_PROFILE_DIR_ENV INKSCAPE_PROFILE_DIR=${INKSCAPE_TEST_PROFILE_DIR})
44 configure_file(CTestCustom.cmake.in ${CMAKE_BINARY_DIR}/CTestCustom.cmake)
46 ### tests using gtest
47 include_directories("${CMAKE_SOURCE_DIR}/src/3rdparty/adaptagrams") # TODO: remove this hack
49 if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
50     set(LPE_TESTS_64bit
51         #0.92 or lower LPEs
52         # (test not stable on 32bit Windows)
53         lpe64-test
54     )
55 endif()
57 # Integration tests (linking all of Inkscape)
58 set(TEST_SOURCES
59     actions-svg-processing
60     async_channel-test
61     async_funclog-test
62     async_progress-test
63     boolop-attr-test
64     colors/cms-test
65     colors/color-test
66     colors/document-cms-test
67     colors/dragndrop-test
68     colors/manager-test
69     colors/parser-test
70     colors/printer-test
71     colors/color-set-test
72     colors/spaces-cms-test
73     colors/spaces-cmyk-test
74     colors/spaces-gray-test
75     colors/spaces-hsl-test
76     colors/spaces-hsluv-test
77     colors/spaces-hsv-test
78     colors/spaces-lab-test
79     colors/spaces-lch-test
80     colors/spaces-linear-rgb-test
81     colors/spaces-luv-test
82     colors/spaces-named-test
83     colors/spaces-okhsl-test
84     colors/spaces-oklab-test
85     colors/spaces-oklch-test
86     colors/spaces-rgb-test
87     colors/spaces-xyz-test
88     colors/utils-test
89     colors/xml-color-test
90     uri-test
91     util-test
92     drag-and-drop-svgz
93     drawing-pattern-test
94     poppler-utils-test
95     extract-uri-test
96     attributes-test
97     dir-util-test
98     sp-item-test
99     sp-object-test
100     sp-object-tags-test
101     object-links-test
102     object-set-test
103     object-style-test
104     path-boolop-test
105     path-reverse-lpe-test
106     preferences-test
107     rebase-hrefs-test
108     stream-test
109     style-elem-test
110     style-internal-test
111     style-test
112     svg-affine-test
113     svg-box-test
114     svg-length-test
115     svg-stringstream-test
116     sp-gradient-test
117     svg-path-geom-test
118     visual-bounds-test
119     geom-pathstroke-test
120     livarot-pathoutline-test
121     object-test
122     sp-glyph-kerning-test
123     cairo-utils-test
124     svg-extension-test
125     curve-test
126     2geom-characterization-test
127     xml-test
128     sp-item-group-test
129     store-test
130     lpe-test
131     ui-util-test
132     ${LPE_TESTS_64bit}
133     )
135 add_library(cpp_test_static_library SHARED inkscape-test.cpp doc-per-case-test.cpp compare-paths-test.h lpespaths-test.h store-integrity-test.h test-with-svg-object-pairs.cpp)
136 target_link_libraries(cpp_test_static_library PUBLIC ${GTEST_LIBRARIES} inkscape_base)
138 add_custom_target(tests)
139 foreach(test_source ${TEST_SOURCES})
140     string(REPLACE "-test" "" testname "test_${test_source}")
141     string(REPLACE "/" "_" testname "${testname}")
142     add_executable(${testname} src/${test_source}.cpp)
143     target_include_directories(${testname} SYSTEM PRIVATE ${GTEST_INCLUDE_DIRS})
144     target_link_libraries(${testname} cpp_test_static_library 2Geom::2geom)
145     add_test(NAME ${testname} COMMAND ${testname})
146     set_tests_properties(${testname} PROPERTIES ENVIRONMENT "${INKSCAPE_TEST_PROFILE_DIR_ENV}/${testname};${CMAKE_CTEST_ENV}")
147     add_dependencies(tests ${testname})
148 endforeach()
149 include(${CMAKE_SOURCE_DIR}/CMakeScripts/UnitTest.cmake)
151 ### Unit tests
152 add_unit_test(version-test SOURCES version.cpp)
153 add_dependencies(tests version-test)
155 ### CLI rendering tests and LPE
156 add_subdirectory(cli_tests)
157 add_subdirectory(rendering_tests)
158 add_subdirectory(lpe_tests)
160 ### Fuzz test
161 if(WITH_FUZZ)
162     # to use the fuzzer, make sure you use the right compiler (clang)
163     # with the right flags -fsanitize=address -fsanitize-coverage=edge,trace-pc-guard,indirect-calls,trace-cmp,trace-div,trace-gep -fno-omit-frame-pointer
164     # (see libfuzzer doc for info in flags)
165     # first line is for integration into oss-fuzz https://github.com/google/oss-fuzz
166     add_executable(fuzz fuzzer.cpp)
167     if(LIB_FUZZING_ENGINE)
168         target_link_libraries(fuzz inkscape_base -lFuzzingEngine)
169     else()
170         target_link_libraries(fuzz inkscape_base -lFuzzer)
171     endif()
172 endif()