]> git.madduck.net Git - etc/vim.git/blobdiff - .vim/bundle/ale/run-tests

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Merge commit '76265755a1add77121c8f9dabb3e9bb70fe9a972' as '.vim/bundle/ale'
[etc/vim.git] / .vim / bundle / ale / run-tests
diff --git a/.vim/bundle/ale/run-tests b/.vim/bundle/ale/run-tests
new file mode 100755 (executable)
index 0000000..a4ddb05
--- /dev/null
@@ -0,0 +1,317 @@
+#!/usr/bin/env bash
+DOCKER=${DOCKER:-docker}
+export DOCKER
+# Author: w0rp <devw0rp@gmail.com>
+#
+# This script runs tests for the ALE project. Run `./run-tests --help` for
+# options, or read the output below.
+#
+
+image=docker.io/denseanalysis/ale
+
+# Create docker image tag based on Dockerfile contents
+if [ -n "$(command -v md5)" ]; then
+    image_tag=$(md5 -q Dockerfile)
+else
+    image_tag=$(md5sum Dockerfile | cut -d' ' -f1)
+fi
+git_version=$(git describe --always --tags)
+
+# Used in all test scripts for running the selected Docker image.
+DOCKER_RUN_IMAGE="$image:$image_tag"
+export DOCKER_RUN_IMAGE
+
+tests='test/*.vader test/*/*.vader test/*/*/*.vader'
+# These flags are forwarded to the script for running Vader tests.
+verbose_flag=''
+quiet_flag=''
+run_neovim_07_tests=1
+run_neovim_08_tests=1
+run_vim_80_tests=1
+run_vim_90_tests=1
+run_lua_tests=1
+run_linters=1
+
+while [ $# -ne 0 ]; do
+    case $1 in
+    -v)
+        verbose_flag='-v'
+        shift
+    ;;
+    -q)
+        quiet_flag='-q'
+        shift
+    ;;
+    --build-image)
+        run_vim_80_tests=0
+        run_vim_90_tests=0
+        run_neovim_07_tests=0
+        run_neovim_08_tests=0
+        run_lua_tests=0
+        run_linters=0
+        shift
+    ;;
+    --neovim-only)
+        run_vim_80_tests=0
+        run_vim_90_tests=0
+        run_lua_tests=0
+        run_linters=0
+        shift
+    ;;
+    --neovim-07-only)
+        run_neovim_08_tests=0
+        run_vim_80_tests=0
+        run_vim_90_tests=0
+        run_lua_tests=0
+        run_linters=0
+        shift
+    ;;
+    --neovim-08-only)
+        run_neovim_07_tests=0
+        run_vim_80_tests=0
+        run_vim_90_tests=0
+        run_lua_tests=0
+        run_linters=0
+        shift
+    ;;
+    --vim-only)
+        run_neovim_07_tests=0
+        run_neovim_08_tests=0
+        run_lua_tests=0
+        run_linters=0
+        shift
+    ;;
+    --vim-80-only)
+        run_neovim_07_tests=0
+        run_neovim_08_tests=0
+        run_vim_90_tests=0
+        run_lua_tests=0
+        run_linters=0
+        shift
+    ;;
+    --vim-90-only)
+        run_neovim_07_tests=0
+        run_neovim_08_tests=0
+        run_vim_80_tests=0
+        run_lua_tests=0
+        run_linters=0
+        shift
+    ;;
+    --linters-only)
+        run_vim_80_tests=0
+        run_vim_90_tests=0
+        run_neovim_07_tests=0
+        run_neovim_08_tests=0
+        run_lua_tests=0
+        shift
+    ;;
+    --lua-only)
+        run_vim_80_tests=0
+        run_vim_90_tests=0
+        run_neovim_07_tests=0
+        run_neovim_08_tests=0
+        run_linters=0
+        shift
+    ;;
+    --fast)
+        run_vim_80_tests=0
+        run_vim_90_tests=0
+        run_neovim_07_tests=0
+        run_neovim_08_tests=1
+        shift
+    ;;
+    --help)
+        echo 'Usage: ./run-tests [OPTION]... [FILE]...'
+        echo
+        echo 'Filenames can be given as arguments to run a subset of tests.'
+        echo 'For example: ./run-tests test/test_ale_var.vader'
+        echo
+        echo 'Options:'
+        echo '  -v                Enable verbose output'
+        echo '  -q                Hide output for successful tests'
+        echo '  --build-image     Run docker image build only.'
+        echo '  --neovim-only     Run tests only for Neovim'
+        echo '  --neovim-07-only  Run tests only for Neovim 0.7'
+        echo '  --neovim-08-only  Run tests only for Neovim 0.8'
+        echo '  --vim-only        Run tests only for Vim'
+        echo '  --vim-80-only     Run tests only for Vim 8.2'
+        echo '  --vim-90-only     Run tests only for Vim 9.0'
+        echo '  --lua-only        Run only Lua tests'
+        echo '  --linters-only    Run only Vint and custom checks'
+        echo '  --fast            Run only the fastest Vim and custom checks'
+        echo '  --help            Show this help text'
+        echo '  --                Stop parsing options after this'
+        exit 0
+    ;;
+    --)
+        shift
+        break
+    ;;
+    -?*)
+        echo "Invalid argument: $1" 1>&2
+        exit 1
+    ;;
+    *)
+        break
+    ;;
+    esac
+done
+
+# Allow tests to be passed as arguments.
+if [ $# -ne 0 ]; then
+    # This doesn't perfectly handle work splitting, but none of our files
+    # have spaces in the names.
+    tests="$*"
+
+    # Don't run other tools when targeting tests.
+    run_linters=0
+    run_lua_tests=0
+fi
+
+# Delete .swp files in the test directory, which cause Vim 8 to hang.
+find test -name '*.swp' -delete
+
+set -eu
+
+# Check if docker un image is available locally
+has_image=$(docker images --quiet "${image}:${image_tag}" | wc -l)
+
+if [[ "$DOCKER" == docker ]]; then
+  arch=$(docker info -f '{{ .Architecture }}')
+elif [[ "$DOCKER" == podman ]]; then
+  arch=$(podman info -f '{{ .Host.Arch }}')
+  if [[ "$arch" == "amd64" ]]; then
+    arch="x86_64"
+  fi
+else
+  echo "The DOCKER environment variable must be docker or podman, not ${DOCKER}"
+  exit 1
+fi
+
+download_image() {
+  if [[ $arch != x86_64 ]]; then
+    echo "Pre-built docker image is not available for architecture ${arch}"
+    return 1
+  fi
+  echo "Downloading run image ${image}:${image_tag}"
+  docker pull "${image}:${image_tag}" &> /dev/null
+}
+
+if [ "$has_image" -eq 0 ] && ! download_image; then
+  echo "Building run image ${image}:${image_tag}"
+
+  build_args=( --build-arg GIT_VERSION="$git_version" )
+
+  if [[ $arch != x86_64 ]]; then
+    echo "Building testbed/vim:24 for $arch"
+    testbed_vim_ref=902917c4caa50db2f2e80009b839605602f9f014
+    "$DOCKER" build -t "testbed/vim:$testbed_vim_ref" "https://github.com/Vimjas/vim-testbed.git#$testbed_vim_ref"
+    build_args+=( --build-arg TESTBED_VIM_VERSION="$testbed_vim_ref" )
+  fi
+
+  "$DOCKER" build "${build_args[@]}" -t "${image}:${image_tag}" .
+  "$DOCKER" tag "${image}:${image_tag}" "${image}:latest"
+
+  if [[ -z "${DOCKER_HUB_USER:-}" || -z "${DOCKER_HUB_PASS:-}" ]]; then
+    echo "Docker Hub credentials not set, skip push"
+  else
+    echo "Push ${image}:${image_tag} to Docker Hub"
+    echo "$DOCKER_HUB_PASS" | docker login -u "$DOCKER_HUB_USER" --password-stdin
+    docker push "${image}:${image_tag}"
+  fi
+else
+  echo "Docker run image ${image}:${image_tag} ready"
+fi
+
+"$DOCKER" tag "${image}:${image_tag}" "${image}:latest"
+
+output_dir=$(mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir')
+
+trap '{ rm -rf "$output_dir"; }' EXIT
+
+file_number=0
+pid_list=''
+
+# Used for killing tests when you kill the script.
+cancel_tests() {
+    set +e
+
+    if [ -n "$pid_list" ]; then
+        for pid in $pid_list; do
+            kill "$pid"
+            wait "$pid"
+        done
+    fi
+
+    # shellcheck disable=SC2046
+    docker kill $(docker ps -a -q --filter ancestor="$image" --format='{{.ID}}') &> /dev/null
+
+    if [ -d "$output_dir" ]; then
+        rm -rf "$output_dir"
+    fi
+
+    echo
+    exit 1
+}
+
+trap cancel_tests INT TERM
+
+for vim in $("$DOCKER" run --rm "$DOCKER_RUN_IMAGE" ls /vim-build/bin | grep '^neovim\|^vim' ); do
+    if ( [[ $vim =~ ^vim-v8.0 ]] && ((run_vim_80_tests)) ) \
+    || ( [[ $vim =~ ^vim-v9.0 ]] && ((run_vim_90_tests)) ) \
+    || ( [[ $vim =~ ^neovim-v0.7 ]] && ((run_neovim_07_tests)) ) \
+    || ( [[ $vim =~ ^neovim-v0.8 ]] && ((run_neovim_08_tests)) ); then
+        echo "Starting Vim: $vim..."
+        file_number=$((file_number+1))
+        test/script/run-vader-tests $quiet_flag $verbose_flag "$vim" "$tests" \
+            > "$output_dir/$file_number" 2>&1 &
+        pid_list="$pid_list $!"
+    fi
+done
+
+if ((run_lua_tests)); then
+    echo "Starting Lua tests..."
+    file_number=$((file_number+1))
+    test/script/run-lua-tests $quiet_flag > "$output_dir/$file_number" 2>&1 &
+    pid_list="$pid_list $!"
+fi
+
+if ((run_linters)); then
+    echo "Starting Vint..."
+    file_number=$((file_number+1))
+    test/script/run-vint > "$output_dir/$file_number" 2>&1 &
+    pid_list="$pid_list $!"
+
+    echo "Starting Custom checks..."
+    file_number=$((file_number+1))
+    test/script/custom-checks &> "$output_dir/$file_number" 2>&1 &
+    pid_list="$pid_list $!"
+fi
+
+echo
+
+failed=0
+index=0
+
+for pid in $pid_list; do
+    this_failed=0
+    index=$((index+1))
+
+    if ! wait "$pid"; then
+        failed=1
+        this_failed=1
+    fi
+
+    # Hide output for things that passed if -q is set.
+    if [ "$quiet_flag" != '-q' ] || ((this_failed)); then
+        cat "$output_dir/$index"
+    fi
+done
+
+if ((failed)); then
+    echo 'Something went wrong!'
+else
+    echo 'All tests passed!'
+fi
+
+exit $failed