Adds a new scripts/run-luatest.sh script to provide a consistent, self-contained way to run project unit tests, including locally. The script handles: - Checking for necessary tools (rg, ag) - Cloning or updating plenary.nvim into the target/tests/deps directory The Makefile is updated to use this new script, making make luatest the single entry point for running unit tests. The lua.yaml workflow is simplified to use this new make target, ensuring the CI environment uses the exact same testing logic.
60 lines
1.5 KiB
Bash
Executable File
60 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
DEST_DIR="$PWD/target/tests"
|
|
DEPS_DIR="$DEST_DIR/deps"
|
|
|
|
log() {
|
|
echo "$1" >&2
|
|
}
|
|
|
|
check_tools() {
|
|
command -v rg &>/dev/null || {
|
|
log "Error: ripgrep (rg) is not installed. Please install it."
|
|
exit 1
|
|
}
|
|
command -v ag &>/dev/null || {
|
|
log "Error: silversearcher-ag (ag) is not installed. Please install it."
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
setup_deps() {
|
|
local plenary_path="$DEPS_DIR/plenary.nvim"
|
|
if [ -d "$plenary_path/.git" ]; then
|
|
log "plenary.nvim already exists. Updating..."
|
|
(
|
|
cd "$plenary_path"
|
|
git fetch -q
|
|
if git show-ref --verify --quiet refs/remotes/origin/main; then
|
|
git reset -q --hard origin/main
|
|
elif git show-ref --verify --quiet refs/remotes/origin/master; then
|
|
git reset -q --hard origin/master
|
|
fi
|
|
)
|
|
else
|
|
if [ -d "$plenary_path" ]; then
|
|
log "Removing non-git plenary.nvim directory and re-cloning."
|
|
rm -rf "$plenary_path"
|
|
fi
|
|
log "Cloning plenary.nvim..."
|
|
mkdir -p "$DEPS_DIR"
|
|
git clone --depth 1 "https://github.com/nvim-lua/plenary.nvim.git" "$plenary_path"
|
|
fi
|
|
}
|
|
|
|
run_tests() {
|
|
log "Running tests..."
|
|
nvim --headless --clean \
|
|
-c "set runtimepath+=$DEPS_DIR/plenary.nvim" \
|
|
-c "lua require('plenary.test_harness').test_directory('tests/', { minimal_init = 'NONE' })"
|
|
}
|
|
|
|
main() {
|
|
check_tools
|
|
setup_deps
|
|
run_tests
|
|
}
|
|
|
|
main "$@"
|