Skip to content
Snippets Groups Projects
ParmesTests.cmake 3.32 KiB
Newer Older
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 ---
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)
  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()
## 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} ...")
    add_test(NAME ${testName} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dataForTests COMMAND py.test -v --pep8 ${testExe})
    add_test(NAME ${testName} WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/dataForTests COMMAND py.test -v ${testExe})
Franck Pérignon's avatar
Franck Pérignon committed

  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()
# 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)