1- # Add a python test from a python file
1+ # Add a python test from a python file # One cannot simply do:
2+ # SET(ENV{PYTHONPATH} ${LIBRARY_OUTPUT_PATH})
3+ # SET(my_test "from test_mymodule import *\;test_mymodule()")
4+ # ADD_TEST(PYTHON-TEST-MYMODULE python -c ${my_test})
5+ # Since cmake is only transmitting the ADD_TEST line to ctest thus you are loosing
6+ # the env var. The only way to store the env var is to physically write in the cmake script
7+ # whatever PYTHONPATH you want and then add the test as 'cmake -P python_test.cmake'
28#
39# Usage:
410# ADD_PYTHON_TEST(PYTHON-TEST test.py)
@@ -19,34 +25,54 @@ MARK_AS_ADVANCED(PYTHON_EXECUTABLE)
1925
2026MACRO (ADD_PYTHON_TEST TESTNAME FILENAME)
2127 GET_SOURCE_FILE_PROPERTY (loc ${FILENAME} LOCATION )
22- SET (EXTRA_ENVIRONMENT ${ARGN} )
28+ GET_SOURCE_FILE_PROPERTY (pyenv ${FILENAME} PYTHONPATH )
2329
24- IF (CMAKE_CONFIGURATION_TYPES )
25- ADD_TEST (NAME ${TESTNAME} COMMAND ${PYTHON_EXECUTABLE} ${loc} -D CMAKE_BUILD_TYPE =$<CONFIGURATION >)
26- ELSE (CMAKE_CONFIGURATION_TYPES )
27- ADD_TEST (NAME ${TESTNAME} COMMAND ${PYTHON_EXECUTABLE} ${loc} )
28- ENDIF (CMAKE_CONFIGURATION_TYPES )
29-
30- SET (UNIX_TEST_PYTHONPATH "${QGIS_OUTPUT_DIRECTORY} /python:${QGIS_OUTPUT_DIRECTORY} /python/plugins:${CMAKE_SOURCE_DIR} /tests/src/python:$ENV{PYTHONPATH} " )
3130 IF (WIN32 )
32- # Separate Windows PATHs with semicolons
33- STRING (REGEX REPLACE ":" "\\\; " TEST_PYTHONPATH ${UNIX_TEST_PYTHONPATH} )
34- SET (TEST_QGIS_PREFIX_PATH "${QGIS_OUTPUT_DIRECTORY} /bin/${CMAKE_BUILD_TYPE} " )
35- SET (TEST_PATH "${QGIS_OUTPUT_DIRECTORY} /bin/${CMAKE_BUILD_TYPE} ;$ENV{PATH} " )
36- SET (ENVIRONMENT_VARS "PYTHONPATH=${TEST_PYTHONPATH} " "QGIS_PREFIX_PATH=${TEST_QGIS_PREFIX_PATH} " "PATH=${TEST_PATH} " )
31+ STRING (REGEX REPLACE ":" " " wo_semicolon "${ARGN} " )
3732 ELSE (WIN32 )
38- SET (TEST_PYTHONPATH ${UNIX_TEST_PYTHONPATH} )
39- SET (TEST_QGIS_PREFIX_PATH "${QGIS_OUTPUT_DIRECTORY} " )
40- SET (TEST_LD_LIBRARY_PATH "${QGIS_OUTPUT_DIRECTORY} /lib:$ENV{LD_LIBRARY_PATH} " )
41- SET (ENVIRONMENT_VARS "PYTHONPATH=${TEST_PYTHONPATH} " "QGIS_PREFIX_PATH=${TEST_QGIS_PREFIX_PATH} " "LD_LIBRARY_PATH=${TEST_LD_LIBRARY_PATH} " )
33+ STRING (REGEX REPLACE ";" " " wo_semicolon "${ARGN} " )
4234 ENDIF (WIN32 )
43- SET (TEST_ENVIRONMENT_VARS ${ENVIRONMENT_VARS} ${EXTRA_ENVIRONMENT} )
4435
45- SET_PROPERTY (TEST ${TESTNAME} PROPERTY ENVIRONMENT ${TEST_ENVIRONMENT_VARS} )
46- # For Debug
47- #FOREACH(arg ${TEST_ENVIRONMENT_VARS})
48- # MESSAGE("Test ENV: ${arg}")
49- #ENDFOREACH()
36+ FILE (WRITE ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME} .cmake "
37+ IF(WIN32)
38+ SET(ENV{QGIS_PREFIX_PATH} \" ${QGIS_OUTPUT_DIRECTORY} /bin/\$ {CMAKE_BUILD_TYPE}\" )
39+ SET(ENV{PATH} \" ${QGIS_OUTPUT_DIRECTORY} /bin/\$ {CMAKE_BUILD_TYPE};\$ ENV{PATH}\" )
40+ SET(ENV{PYTHONPATH} \" ${QGIS_OUTPUT_DIRECTORY} /python/;${QGIS_OUTPUT_DIRECTORY} /python/plugins;${CMAKE_SOURCE_DIR} /tests/src/python;\$ ENV{PYTHONPATH}\" )
41+ MESSAGE(\" PATH:\$ ENV{PATH}\" )
42+ ELSE(WIN32)
43+ SET(ENV{QGIS_PREFIX_PATH} \" ${QGIS_OUTPUT_DIRECTORY} \" )
44+ SET(ENV{LD_LIBRARY_PATH} \" ${pyenv} :${QGIS_OUTPUT_DIRECTORY} /lib:\$ ENV{LD_LIBRARY_PATH}\" )
45+ SET(ENV{PYTHONPATH} \" ${QGIS_OUTPUT_DIRECTORY} /python/:${QGIS_OUTPUT_DIRECTORY} /python/plugins;${CMAKE_SOURCE_DIR} /tests/src/python:\$ ENV{PYTHONPATH}\" )
46+ MESSAGE(\" LD_LIBRARY_PATH:\$ ENV{LD_LIBRARY_PATH}\" )
47+ ENDIF(WIN32)
48+ " )
49+
50+ FOREACH (_in ${ARGN} )
51+ STRING (REGEX MATCH "^([^=]+)=(.*)$" _out ${_in} )
52+ MESSAGE (STATUS "ENV: SET(ENV{${CMAKE_MATCH_1} } \" ${CMAKE_MATCH_2} \" )" )
53+ FILE (APPEND ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME} .cmake "
54+ SET(ENV{${CMAKE_MATCH_1} } \" ${CMAKE_MATCH_2} \" )
55+ " )
56+ ENDFOREACH (_in)
57+
58+ FILE (APPEND ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME} .cmake "
59+ MESSAGE(\" PYTHONPATH:\$ ENV{PYTHONPATH}\" )
60+ MESSAGE(STATUS \" Running ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolon} \" )
61+ EXECUTE_PROCESS(
62+ COMMAND ${PYTHON_EXECUTABLE} ${loc} ${wo_semicolon}
63+ RESULT_VARIABLE import_res
64+ )
65+ # Pass the output back to ctest
66+ IF(import_res)
67+ MESSAGE(FATAL_ERROR \" Test failed: \$ {import_res}\" )
68+ ENDIF(import_res)
69+ "
70+ )
71+ IF (CMAKE_CONFIGURATION_TYPES )
72+ ADD_TEST (NAME ${TESTNAME} COMMAND ${CMAKE_COMMAND} -D CMAKE_BUILD_TYPE =$<CONFIGURATION > -P ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME} .cmake)
73+ ELSE (CMAKE_CONFIGURATION_TYPES )
74+ ADD_TEST (NAME ${TESTNAME} COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR} /${TESTNAME} .cmake)
75+ ENDIF (CMAKE_CONFIGURATION_TYPES )
5076ENDMACRO (ADD_PYTHON_TEST)
5177
5278# Byte compile recursively a directory (DIRNAME)
0 commit comments