#!/usr/bin/env bash set -euo pipefail declare -r plugins_dir="./.tests/site/pack/deps/start" declare -r module="nui" declare test_scope="${module}" while [[ $# -gt 0 ]]; do case "${1}" in --clean) shift echo "[test] cleaning up environment" rm -rf "${plugins_dir}" echo "[test] envionment cleaned" ;; *) if [[ "${test_scope}" == "${module}" ]] && [[ "${1}" == "${module}/"* ]]; then test_scope="${1}" fi shift ;; esac done function setup_environment() { echo echo "[test] setting up environment" echo if [[ ! -d "${plugins_dir}" ]]; then mkdir -p "${plugins_dir}" fi if [[ ! -d "${plugins_dir}/plenary.nvim" ]]; then echo "[plugins] plenary.nvim: installing..." git clone https://github.com/nvim-lua/plenary.nvim "${plugins_dir}/plenary.nvim" # commit 9069d14a120cadb4f6825f76821533f2babcab92 broke luacov # issue: https://github.com/nvim-lua/plenary.nvim/issues/353 local -r plenary_353_patch="$(pwd)/scripts/plenary-353.patch" git -C "${plugins_dir}/plenary.nvim" apply "${plenary_353_patch}" echo "[plugins] plenary.nvim: installed" echo fi echo "[test] environment ready" echo } function luacov_start() { luacov_dir="$(dirname "$(luarocks which luacov 2>/dev/null | head -1)")" if [[ "${luacov_dir}" == "." ]]; then luacov_dir="" fi if test -n "${luacov_dir}"; then rm -f luacov.*.out export LUA_PATH=";;${luacov_dir}/?.lua" fi } function luacov_end() { if test -n "${luacov_dir}"; then if test -f "luacov.stats.out"; then luacov echo tail -n +$(($(grep -n "^Summary$" luacov.report.out | cut -d":" -f1) - 1)) luacov.report.out fi fi } setup_environment luacov_start declare test_logs="" if [[ -d "./tests/${test_scope}/" ]]; then test_logs=$(nvim --headless --noplugin -u tests/init.lua -c "lua require('plenary.test_harness').test_directory('./tests/${test_scope}/', { minimal_init = 'tests/init.lua', sequential = true })" || true) elif [[ -f "./tests/${test_scope}_spec.lua" ]]; then test_logs=$(nvim --headless --noplugin -u tests/init.lua -c "lua require('plenary.busted').run('./tests/${test_scope}_spec.lua')" || true) fi echo "${test_logs}" luacov_end if echo "${test_logs}" | grep --quiet "stack traceback"; then { echo "" echo "FOUND STACK TRACEBACK IN TEST LOGS" echo "" } >&2 exit 1 fi