RunTests.cmake (4917B)
1 if(DEFINED TEST_PARALLEL_GROUP) 2 if(DEFINED ENV{TEST_FILE}) 3 message(FATAL_ERROR "$TEST_FILE should not be used with parallel tests") 4 endif() 5 set(TEST_SUFFIX "_${TEST_PARALLEL_GROUP}") 6 string(REGEX REPLACE "[^A-Za-z0-9_]" "_" TEST_SUFFIX ${TEST_SUFFIX}) 7 else() 8 set(TEST_SUFFIX "") 9 endif() 10 11 set(ENV{NVIM_TEST} "1") 12 # Set LC_ALL to meet expectations of some locale-sensitive tests. 13 set(ENV{LC_ALL} "en_US.UTF-8") 14 set(ENV{VIMRUNTIME} ${ROOT_DIR}/runtime) 15 set(TEST_XDG_PREFIX ${BUILD_DIR}/Xtest_xdg${TEST_SUFFIX}) 16 set(ENV{XDG_CONFIG_HOME} ${TEST_XDG_PREFIX}/config) 17 set(ENV{XDG_DATA_HOME} ${TEST_XDG_PREFIX}/share) 18 set(ENV{XDG_STATE_HOME} ${TEST_XDG_PREFIX}/state) 19 set(ENV{NVIM_RPLUGIN_MANIFEST} ${BUILD_DIR}/Xtest_rplugin_manifest${TEST_SUFFIX}) 20 unset(ENV{XDG_DATA_DIRS}) 21 unset(ENV{NVIM}) # Clear $NVIM in case tests are running from Nvim. #11009 22 unset(ENV{TMUX}) # Nvim TUI shouldn't think it's running in tmux. #34173 23 24 # Prepare for running tests in ${TEST_XDG_PREFIX}. 25 file(MAKE_DIRECTORY ${TEST_XDG_PREFIX}) 26 file(CREATE_LINK ${ROOT_DIR}/runtime ${TEST_XDG_PREFIX}/runtime SYMBOLIC) 27 file(CREATE_LINK ${ROOT_DIR}/src ${TEST_XDG_PREFIX}/src SYMBOLIC) 28 file(CREATE_LINK ${ROOT_DIR}/test ${TEST_XDG_PREFIX}/test SYMBOLIC) 29 file(CREATE_LINK ${ROOT_DIR}/README.md ${TEST_XDG_PREFIX}/README.md SYMBOLIC) 30 31 # TODO(dundargoc): The CIRRUS_CI environment variable isn't passed to here from 32 # the main CMakeLists.txt, so we have to manually pass it to this script and 33 # re-set the environment variable. Investigate if we can avoid manually setting 34 # it like with the GITHUB_CI environment variable. 35 set(ENV{CIRRUS_CI} ${CIRRUS_CI}) 36 37 if(NOT DEFINED ENV{NVIM_LOG_FILE}) 38 set(ENV{NVIM_LOG_FILE} ${BUILD_DIR}/nvim.log) 39 endif() 40 set(ENV{NVIM_LOG_FILE} "$ENV{NVIM_LOG_FILE}${TEST_SUFFIX}") 41 42 if(NVIM_PRG) 43 set(ENV{NVIM_PRG} "${NVIM_PRG}") 44 endif() 45 46 if(DEFINED ENV{TEST_FILE}) 47 set(TEST_PATH "$ENV{TEST_FILE}") 48 elseif(DEFINED TEST_PARALLEL_GROUP) 49 set(TEST_PATH "${TEST_DIR}/${TEST_TYPE}/${TEST_PARALLEL_GROUP}") 50 else() 51 set(TEST_PATH "${TEST_DIR}/${TEST_TYPE}") 52 endif() 53 54 if(NOT DEFINED TEST_SUMMARY_FILE) 55 set(TEST_SUMMARY_FILE "-") 56 endif() 57 58 # Force $TEST_PATH to workdir-relative path ("test/…"). 59 if(IS_ABSOLUTE ${TEST_PATH}) 60 file(RELATIVE_PATH TEST_PATH "${ROOT_DIR}" "${TEST_PATH}") 61 endif() 62 63 separate_arguments(BUSTED_ARGS NATIVE_COMMAND $ENV{BUSTED_ARGS}) 64 65 if(DEFINED ENV{TEST_TAG} AND NOT "$ENV{TEST_TAG}" STREQUAL "") 66 list(APPEND BUSTED_ARGS --tags $ENV{TEST_TAG}) 67 endif() 68 69 if(DEFINED ENV{TEST_FILTER} AND NOT "$ENV{TEST_FILTER}" STREQUAL "") 70 list(APPEND BUSTED_ARGS --filter $ENV{TEST_FILTER}) 71 endif() 72 73 if(DEFINED ENV{TEST_FILTER_OUT} AND NOT "$ENV{TEST_FILTER_OUT}" STREQUAL "") 74 list(APPEND BUSTED_ARGS --filter-out $ENV{TEST_FILTER_OUT}) 75 endif() 76 77 # TMPDIR: for testutil.tmpname() and Nvim tempname(). 78 set(ENV{TMPDIR} "${BUILD_DIR}/Xtest_tmpdir${TEST_SUFFIX}") 79 file(MAKE_DIRECTORY $ENV{TMPDIR}) 80 81 # HISTFILE: do not write into user's ~/.bash_history 82 set(ENV{HISTFILE} "/dev/null") 83 84 if(NOT DEFINED ENV{TEST_TIMEOUT} OR "$ENV{TEST_TIMEOUT}" STREQUAL "") 85 set(ENV{TEST_TIMEOUT} 1200) 86 endif() 87 88 set(ENV{SYSTEM_NAME} ${CMAKE_HOST_SYSTEM_NAME}) # used by test/testutil.lua. 89 90 if(NOT WIN32) 91 # Tests assume POSIX "sh" and may fail if SHELL=fish. #24941 #6172 92 set(ENV{SHELL} sh) 93 endif() 94 95 execute_process( 96 # Note: because of "-ll" (low-level interpreter mode), some modules like 97 # _core/editor.lua are not loaded. 98 COMMAND ${NVIM_PRG} -ll ${ROOT_DIR}/test/lua_runner.lua ${DEPS_INSTALL_DIR}/share/lua/5.1/ busted -v -o test.busted.outputHandlers.nvim 99 -Xoutput "{\"test_path\": \"${TEST_PATH}\", \"summary_file\": \"${TEST_SUMMARY_FILE}\"}" 100 --lazy --helper=${TEST_DIR}/${TEST_TYPE}/preload.lua 101 --lpath=${BUILD_DIR}/?.lua 102 --lpath=${ROOT_DIR}/src/?.lua 103 --lpath=${ROOT_DIR}/runtime/lua/?.lua 104 --lpath=?.lua 105 ${BUSTED_ARGS} 106 ${TEST_PATH} 107 TIMEOUT $ENV{TEST_TIMEOUT} 108 WORKING_DIRECTORY ${TEST_XDG_PREFIX} 109 RESULT_VARIABLE res 110 ${EXTRA_ARGS}) 111 112 file(REMOVE_RECURSE ${TEST_XDG_PREFIX}) 113 file(REMOVE_RECURSE $ENV{NVIM_RPLUGIN_MANIFEST}) 114 file(REMOVE_RECURSE $ENV{TMPDIR}) 115 116 macro(PRINT_NVIM_LOG) 117 file(READ $ENV{NVIM_LOG_FILE} out) 118 if(${TEST_SUMMARY_FILE} STREQUAL "-") 119 message(STATUS "$NVIM_LOG_FILE: $ENV{NVIM_LOG_FILE}\n${out}") 120 else() 121 file(APPEND ${TEST_SUMMARY_FILE} "$NVIM_LOG_FILE: $ENV{NVIM_LOG_FILE}\n${out}") 122 endif() 123 endmacro() 124 125 if(res) 126 message(STATUS "Tests exited non-zero: ${res}") 127 128 # Dump the logfile on CI (if not displayed and moved already). 129 if(CI_BUILD) 130 if(EXISTS $ENV{NVIM_LOG_FILE} AND NOT EXISTS $ENV{NVIM_LOG_FILE}.displayed) 131 PRINT_NVIM_LOG() 132 endif() 133 endif() 134 135 message(FATAL_ERROR "${TEST_TYPE} tests failed with error: ${res}") 136 endif() 137 138 if(CI_BUILD) 139 file(SIZE $ENV{NVIM_LOG_FILE} FILE_SIZE) 140 if(NOT ${FILE_SIZE} MATCHES "^0$") 141 PRINT_NVIM_LOG() 142 message(FATAL_ERROR "$NVIM_LOG_FILE is not empty") 143 endif() 144 endif()