#!/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