bash-it/test/run

46 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
test_directory="$(cd "$(dirname "$0")" && pwd)"
bats_executable="${test_directory}/../test_lib/bats-core/bin/bats"
git submodule init && git submodule update
if [[ -z "${BASH_IT}" ]]; then
BASH_IT="$(cd "${test_directory}" && dirname "${PWD}")"
export BASH_IT
fi
if [[ -z "$1" ]]; then
test_dirs=("${test_directory}"/{bash_it,completion,install,lib,plugins,themes})
else
test_dirs=("$1")
fi
# Make sure that the `parallel` command is installed,
# AND that it is the GNU version of `parallel`.
# If that is the case, try to guess the number of CPU cores,
# so we can run `bats` in parallel processing mode, which is a lot faster.
if command -v parallel &> /dev/null \
&& parallel -V &> /dev/null \
&& { parallel -V 2> /dev/null | grep -q '^GNU\>'; }; then
# Expect to run at least on a dual-core CPU; slightly degraded performance
# shouldn't matter otherwise.
declare -i -r test_jobs_default=2
# shellcheck disable=SC2155
declare -i -r test_jobs_effective="$(
if [[ "${TEST_JOBS:-detect}" = "detect" ]] \
&& command -v nproc &> /dev/null; then
nproc
elif [[ -n "${TEST_JOBS}" ]] \
&& [[ "${TEST_JOBS}" != "detect" ]]; then
echo "${TEST_JOBS}"
else
echo "${test_jobs_default}"
fi
)"
exec "$bats_executable" "${CI:+--tap}" --jobs "${test_jobs_effective}" \
"${test_dirs[@]}"
else
# Run `bats` in single-threaded mode.
exec "$bats_executable" ${CI:+--tap} "${test_dirs[@]}"
fi