121 lines
2.9 KiB
Text
121 lines
2.9 KiB
Text
|
#!/bin/bash -eu
|
||
|
|
||
|
image=w0rp/ale
|
||
|
docker_flags=(--rm -v "$PWD:/testplugin" -v "$PWD/test:/home" -w /testplugin "$image")
|
||
|
red='\033[0;31m'
|
||
|
green='\033[0;32m'
|
||
|
nc='\033[0m'
|
||
|
verbose=0
|
||
|
quiet=0
|
||
|
|
||
|
while [ $# -ne 0 ]; do
|
||
|
case $1 in
|
||
|
-v)
|
||
|
verbose=1
|
||
|
shift
|
||
|
;;
|
||
|
-q)
|
||
|
quiet=1
|
||
|
shift
|
||
|
;;
|
||
|
--)
|
||
|
shift
|
||
|
break
|
||
|
;;
|
||
|
-?*)
|
||
|
echo "Invalid argument: $1" 1>&2
|
||
|
exit 1
|
||
|
;;
|
||
|
*)
|
||
|
break
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
vim="$1"
|
||
|
tests="$2"
|
||
|
|
||
|
function filter-vader-output() {
|
||
|
# When verbose mode is off, suppress output until Vader starts.
|
||
|
local start_output="$verbose"
|
||
|
local filtered_data=''
|
||
|
|
||
|
while read -r; do
|
||
|
if ((!start_output)); then
|
||
|
if [[ "$REPLY" = *'Starting Vader:'* ]]; then
|
||
|
start_output=1
|
||
|
else
|
||
|
continue
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if ((quiet)); then
|
||
|
if [[ "$REPLY" = *'Starting Vader:'* ]]; then
|
||
|
filtered_data="$REPLY"
|
||
|
elif [[ "$REPLY" = *'Success/Total'* ]]; then
|
||
|
success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)"
|
||
|
total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)"
|
||
|
|
||
|
if [ "$success" -lt "$total" ]; then
|
||
|
echo "$filtered_data"
|
||
|
echo "$REPLY"
|
||
|
fi
|
||
|
|
||
|
filtered_data=''
|
||
|
else
|
||
|
filtered_data="$filtered_data"$'\n'"$REPLY"
|
||
|
fi
|
||
|
else
|
||
|
echo "$REPLY"
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
function color-vader-output() {
|
||
|
while read -r; do
|
||
|
if [[ "$REPLY" = *'[EXECUTE] (X)'* ]]; then
|
||
|
echo -en "$red"
|
||
|
elif [[ "$REPLY" = *'[EXECUTE]'* ]] || [[ "$REPLY" = *'[ GIVEN]'* ]]; then
|
||
|
echo -en "$nc"
|
||
|
fi
|
||
|
|
||
|
if [[ "$REPLY" = *'Success/Total'* ]]; then
|
||
|
success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)"
|
||
|
total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)"
|
||
|
|
||
|
if [ "$success" -lt "$total" ]; then
|
||
|
echo -en "$red"
|
||
|
else
|
||
|
echo -en "$green"
|
||
|
fi
|
||
|
|
||
|
echo "$REPLY"
|
||
|
echo -en "$nc"
|
||
|
else
|
||
|
echo "$REPLY"
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
echo -en "$nc"
|
||
|
}
|
||
|
|
||
|
echo
|
||
|
echo '========================================'
|
||
|
echo "Running tests for $vim"
|
||
|
echo '========================================'
|
||
|
echo
|
||
|
|
||
|
if [[ $vim =~ ^neovim ]]; then
|
||
|
set -o pipefail
|
||
|
docker run -it -e VADER_OUTPUT_FILE=/dev/stderr "${docker_flags[@]}" \
|
||
|
"/vim-build/bin/$vim" -u test/vimrc \
|
||
|
--headless "+Vader! $tests" | filter-vader-output | color-vader-output
|
||
|
set +o pipefail
|
||
|
else
|
||
|
set -o pipefail
|
||
|
docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${docker_flags[@]}" \
|
||
|
"/vim-build/bin/$vim" -u test/vimrc \
|
||
|
"+Vader! $tests" 2>&1 | filter-vader-output | color-vader-output
|
||
|
set +o pipefail
|
||
|
fi
|