diff options
author | w0rp <devw0rp@gmail.com> | 2017-12-01 17:50:19 +0000 |
---|---|---|
committer | w0rp <devw0rp@gmail.com> | 2017-12-01 17:50:24 +0000 |
commit | 499c1542727c7e79302529f61ffb2bbaecb08b68 (patch) | |
tree | 38b57e3d59febd4f20258d3f509c305689eb5d40 /test/script/run-vader-tests | |
parent | 51b127a4fd8e581ab0592874db584facb70e9f79 (diff) | |
download | ale-499c1542727c7e79302529f61ffb2bbaecb08b68.zip |
Move the Bash code for running Vader tests to its own file
Diffstat (limited to 'test/script/run-vader-tests')
-rwxr-xr-x | test/script/run-vader-tests | 120 |
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 |