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