|
2 | 2 | include("${PROJECT_SOURCE_DIR}/CMake/test_labels.cmake") |
3 | 3 | include("${PROJECT_SOURCE_DIR}/CMake/python.cmake") |
4 | 4 |
|
5 | | -check_python_reqs(numpy "nexus base" ADD_TEST) |
| 5 | +check_python_reqs("numpy;pytest" "nexus base" ADD_TEST) |
6 | 6 |
|
7 | 7 | if(ADD_TEST) |
8 | | - file(TIMESTAMP ${qmcpack_SOURCE_DIR}/nexus/nexus/bin/nxs-test NEXUS_TESTLIST_TIMESTAMP) |
9 | | - if(NOT "${NEXUS_TESTLIST_TIMESTAMP}" STREQUAL "${CACHE_NEXUS_TESTLIST_TIMESTAMP}") |
10 | | - message("Generating Nexus test list for the first time or after a nxs-test time stamp change") |
11 | | - execute_process(COMMAND ${Python3_EXECUTABLE} ${qmcpack_SOURCE_DIR}/nexus/nexus/bin/nxs-test --ctestlist |
12 | | - RESULT_VARIABLE NEXUS_TESTLIST_RESULT OUTPUT_VARIABLE NEXUS_TESTLIST) |
13 | | - if(NOT NEXUS_TESTLIST_RESULT EQUAL 0) |
14 | | - message(FATAL_ERROR "Command line '${Python3_EXECUTABLE} ${qmcpack_SOURCE_DIR}/nexus/nexus/bin/nxs-test --ctestlist' failed!") |
15 | | - endif() |
16 | | - |
17 | | - set(CACHE_NEXUS_TESTLIST |
18 | | - ${NEXUS_TESTLIST} |
19 | | - CACHE INTERNAL "NEXUS_TESTLIST cache variable" FORCE) |
20 | | - set(CACHE_NEXUS_TESTLIST_TIMESTAMP |
21 | | - ${NEXUS_TESTLIST_TIMESTAMP} |
22 | | - CACHE INTERNAL "Timestamp used to validate NEXUS_TESTLIST cache variables" FORCE) |
23 | | - else() |
24 | | - message("nxs-test time stamp remains unchanged. Using cached Nexus test list") |
25 | | - set(NEXUS_TESTLIST ${CACHE_NEXUS_TESTLIST}) |
| 8 | + message("Generating Nexus test list") |
| 9 | + execute_process(COMMAND ${Python3_EXECUTABLE} -m pytest --collect-only -qq --disable-warnings ${qmcpack_SOURCE_DIR}/nexus/nexus/tests |
| 10 | + RESULT_VARIABLE NEXUS_TESTLIST_RESULT OUTPUT_VARIABLE NEXUS_TESTLIST) |
| 11 | + if(NOT NEXUS_TESTLIST_RESULT EQUAL 0) |
| 12 | + message(FATAL_ERROR "Command line ' ${Python3_EXECUTABLE} -m pytest --collect-only -qq ${qmcpack_SOURCE_DIR}/nexus/nexus/tests ' failed!") |
26 | 13 | endif() |
| 14 | + |
| 15 | + string(REPLACE "\n" ";" NEXUS_TESTLIST "${NEXUS_TESTLIST}") # Join into a single line with semicolon separators |
| 16 | + list(REMOVE_ITEM NEXUS_TESTLIST "") # remove empty entries |
| 17 | + set(CACHE_NEXUS_TESTLIST |
| 18 | + ${NEXUS_TESTLIST} |
| 19 | + CACHE INTERNAL "NEXUS_TESTLIST cache variable" FORCE) |
27 | 20 | if(NEXUS_TESTLIST) |
28 | 21 | message("Adding Nexus tests") |
29 | 22 | else() |
30 | 23 | message("Nexus test list is empty. No Nexus tests added.") |
31 | 24 | endif() |
32 | | - foreach(TESTNAME ${NEXUS_TESTLIST}) |
33 | | - #message("Adding test ntest_nexus_${TESTNAME}") |
34 | | - set(NTEST "${qmcpack_SOURCE_DIR}/nexus/nexus/bin/nxs-test") |
35 | | - IF(ENABLE_PYCOV) |
36 | | - add_test(NAME ntest_nexus_${TESTNAME} COMMAND ${PYTHON_COVERAGE_EXECUTABLE} run -p ${NTEST} -R ${TESTNAME}\$ --ctest |
37 | | - --pythonpath=${PROJECT_SOURCE_DIR}/nexus:$ENV{PYTHONPATH}) |
38 | | - |
39 | | - ELSE() |
40 | | - add_test(NAME ntest_nexus_${TESTNAME} COMMAND ${Python3_EXECUTABLE} ${NTEST} -R ${TESTNAME}\$ --ctest |
41 | | - --pythonpath=${PROJECT_SOURCE_DIR}/nexus:$ENV{PYTHONPATH}) |
42 | | - ENDIF() |
43 | | - set_tests_properties(ntest_nexus_${TESTNAME} PROPERTIES ENVIRONMENT PYTHONPATH=$ENV{PYTHONPATH}) |
| 25 | + set(NTEST "pytest") |
| 26 | + if(ENABLE_PYCOV) |
| 27 | + add_test(NAME ntest_nexus_coverage_all |
| 28 | + COMMAND ${Python3_EXECUTABLE} -m ${NTEST} ${qmcpack_SOURCE_DIR}/nexus/nexus/tests -c ${qmcpack_SOURCE_DIR}/nexus/pyproject.toml |
| 29 | + --cov=nexus |
| 30 | + --cov-report=xml |
| 31 | + --cov-config=${qmcpack_SOURCE_DIR}/nexus/pyproject.toml |
| 32 | + ) |
| 33 | + set_tests_properties(ntest_nexus_coverage_all PROPERTIES ENVIRONMENT PYTHONPATH=$ENV{PYTHONPATH}) |
44 | 34 | set_property( |
45 | | - TEST ntest_nexus_${TESTNAME} |
| 35 | + TEST ntest_nexus_coverage_all |
46 | 36 | APPEND |
47 | 37 | PROPERTY LABELS "nexus;deterministic") |
48 | 38 | set(TEST_LABELS "") |
49 | | - add_test_labels(ntest_nexus_${TESTNAME} TEST_LABELS) |
50 | | - # Use a resource lock to avoid potential race condition in copying example inputs |
51 | | - if(${TESTNAME} MATCHES ".*example.*") |
52 | | - set_tests_properties(ntest_nexus_${TESTNAME} PROPERTIES RESOURCE_LOCK nexus_examples_resource) |
53 | | - endif() |
54 | | - endforeach() |
| 39 | + add_test_labels(ntest_nexus_coverage_all TEST_LABELS) |
| 40 | + else() |
| 41 | + foreach(TESTFILE IN LISTS NEXUS_TESTLIST) |
| 42 | + string(REGEX REPLACE "\.py:.*[0-9]" "" TESTFILE "${TESTFILE}") |
| 43 | + string(REPLACE "nexus/tests/test_" "" TESTNAME "${TESTFILE}") |
| 44 | + #message("Adding test ntest_nexus_${TESTNAME}") |
| 45 | + |
| 46 | + add_test(NAME ntest_nexus_${TESTNAME} |
| 47 | + COMMAND ${Python3_EXECUTABLE} -m ${NTEST} ${qmcpack_SOURCE_DIR}/nexus/${TESTFILE}.py -c ${qmcpack_SOURCE_DIR}/nexus/pyproject.toml |
| 48 | + ) |
| 49 | + set_tests_properties(ntest_nexus_${TESTNAME} PROPERTIES ENVIRONMENT PYTHONPATH=$ENV{PYTHONPATH}) |
| 50 | + set_property( |
| 51 | + TEST ntest_nexus_${TESTNAME} |
| 52 | + APPEND |
| 53 | + PROPERTY LABELS "nexus;deterministic") |
| 54 | + set(TEST_LABELS "") |
| 55 | + add_test_labels(ntest_nexus_${TESTNAME} TEST_LABELS) |
| 56 | + # Use a resource lock to avoid potential race condition in copying example inputs |
| 57 | + if(${TESTNAME} MATCHES ".*example.*") |
| 58 | + set_tests_properties(ntest_nexus_${TESTNAME} PROPERTIES RESOURCE_LOCK nexus_examples_resource) |
| 59 | + endif() |
| 60 | + endforeach() |
| 61 | + endif() |
55 | 62 | else() |
56 | | - message("Skipping Nexus tests because numpy is not present in python installation") |
| 63 | + message(WARNING "Skipping Nexus tests because python numpy package and/or pytest were not found") |
57 | 64 | endif() |
0 commit comments