neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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