summaryrefslogtreecommitdiff
path: root/test/script/run-vader-tests
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2017-12-01 17:50:19 +0000
committerw0rp <devw0rp@gmail.com>2017-12-01 17:50:24 +0000
commit499c1542727c7e79302529f61ffb2bbaecb08b68 (patch)
tree38b57e3d59febd4f20258d3f509c305689eb5d40 /test/script/run-vader-tests
parent51b127a4fd8e581ab0592874db584facb70e9f79 (diff)
downloadale-499c1542727c7e79302529f61ffb2bbaecb08b68.zip
Move the Bash code for running Vader tests to its own file
Diffstat (limited to 'test/script/run-vader-tests')
-rwxr-xr-xtest/script/run-vader-tests120
1 files changed, 120 insertions, 0 deletions
diff --git a/test/script/run-vader-tests b/test/script/run-vader-tests
new file mode 100755
index 00000000..d28e1987
--- /dev/null
+++ b/test/script/run-vader-tests
@@ -0,0 +1,120 @@
+#!/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