enable_testing() find_python_module(pytest REQUIRED) # --- We create a new test for each test_XXX.py found in each directory (i.e. module) of parmepy listed below --- set(py_src_dirs fields domain operator numerics problem tools ) if(USE_MPI) set(py_src_dirs ${py_src_dirs} mpi) endif() if(WITH_GPU) set(py_src_dirs ${py_src_dirs} gpu) endif() # Set test dir to python build dir. set(testDir ${CMAKE_BINARY_DIR}/build/${${PROJECT_NAME}_PYTHON_BUILD_DIR}) set(ENV{PYTHONPATH} ${testDir}) display(testDir) ## Copy the OpenCL sources files to build dir (only python files are copied by setup.py) set(clfiles) file(GLOB clfilestmp RELATIVE ${CMAKE_SOURCE_DIR} parmepy/gpu/cl_src/*.cl) set(clfiles ${clfiles} ${clfilestmp}) file(GLOB clfilestmp RELATIVE ${CMAKE_SOURCE_DIR} parmepy/gpu/cl_src/kernels/*.cl) set(clfiles ${clfiles} ${clfilestmp}) file(GLOB clfilestmp RELATIVE ${CMAKE_SOURCE_DIR} parmepy/gpu/cl_src/advection/*.cl) set(clfiles ${clfiles} ${clfilestmp}) file(GLOB clfilestmp RELATIVE ${CMAKE_SOURCE_DIR} parmepy/gpu/cl_src/remeshing/*.cl) set(clfiles ${clfiles} ${clfilestmp}) foreach(_F ${clfiles}) configure_file(${_F} ${testDir}/${_F} COPYONLY) endforeach() ## Build a list of test_*.py files for each directory of parmepy/${py_src_dirs} set(py_test_files) foreach(testdir ${py_src_dirs}) file(GLOB testfiles RELATIVE ${CMAKE_SOURCE_DIR} parmepy/${testdir}/tests/test_*.py) set(py_test_files ${py_test_files} ${testfiles}) # copy data files file(GLOB datfiles parmepy/${testdir}/tests/*.dat) file(GLOB mapfiles parmepy/${testdir}/tests/*.map) set(datafiles ${mapfiles} ${datfiles}) foreach(_F ${datafiles}) get_filename_component(fname ${_F} NAME) configure_file(${_F} ${CMAKE_CURRENT_BINARY_DIR}/dataForTests/${fname} COPYONLY) endforeach() endforeach() ## Handling doctest in *.py files recursively for each directory of parmepy/${py_src_dirs} ## that names are not __init__ or test_ and that contains '>>>' set(py_doctest_files) foreach(testdir ${py_src_dirs}) file(GLOB testfiles parmepy/${testdir}/[a-zA-Z]*.py) foreach(testfile ${testfiles}) file(STRINGS ${testfile} test_doctest REGEX ">>>") if(NOT "${test_doctest}" STREQUAL "") set(py_doctest_files ${py_doctest_files} ${testfile}) endif() endforeach() endforeach() ## Adding tests message(STATUS "=== TESTS === ") ## Add test_*.py files foreach(testfile ${py_test_files}) get_filename_component(testName ${testfile} NAME_WE) set(testExe ${testDir}/${testfile}) message(STATUS "Add test ${testfile} ...") if(FULL_TEST) add_test(NAME ${testName} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dataForTests COMMAND py.test -v --pep8 ${testExe}) else() add_test(NAME ${testName} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dataForTests COMMAND py.test -v ${testExe}) endif() if(WITH_MPI_TESTS) message(STATUS "Add mpi test mpi_${testName} ${NBPROCS_FOR_TESTS}") add_test(NAME mpi_${testName} COMMAND mpirun -np ${NBPROCS_FOR_TESTS} ${PYTHON_EXECUTABLE} ${testExe}) endif() endforeach() # Add files containing doctests foreach(testfile ${py_doctest_files}) get_filename_component(testName ${testfile} NAME_WE) message(STATUS "Add test from doc doctest_${testName} ...") add_test("doctest_${testName}" py.test -v --doctest-modules ${testfile}) endforeach() message(STATUS "===") #configure_file(conftest.py.in conftest.py)