commit 57107c7c560580a4f6a28f65ac85ea9ee70fd3e8
parent 72d02207b021b968a185ed68b949c7a15f82c3d4
Author: Tinmarino <tinmarino@gmail.com>
Date: Wed, 22 Mar 2023 01:17:20 -0300
CI: Lint run_test: all in function
Diffstat:
M | test/run_tests.sh | | | 342 | ++++++++++++++++++++++++++++++++++++++++++++----------------------------------- |
1 file changed, 191 insertions(+), 151 deletions(-)
diff --git a/test/run_tests.sh b/test/run_tests.sh
@@ -1,22 +1,20 @@
#!/usr/bin/env bash
+# shellcheck disable=SC2155 # Declare and assign separately to avoid masking return values
-# credit to https://github.com/w0rp/ale for script ideas and the color vader
-# output function.
+: '
+Vimwiki vader test script
-# Say Hi
-echo -en "Starting $(basename "$0") for VimWiki\n"
-start_time=$(date +%s)
+Credit: https://github.com/w0rp/ale for script ideas and the color vader output function.
+'
-red='\033[0;31m'
-green='\033[0;32m'
-nc='\033[0m'
+# Capture start time now
+declare -g start_time=$(date +%s)
+
+# Declare color helper
+declare -g red='\033[0;31m'
+declare -g green='\033[0;32m'
+declare -g nc='\033[0m'
-# For windows: Cmder bash is appending busybox to the path and
-# and a smlll vim is included, so that override the windows path vim
-if [[ -v OLD_PATH ]]; then
- echo "Setting path from OLD_PATH : $OLD_PATH"
- export PATH="$OLD_PATH"
-fi
printHelp() {
cat << ' EOF' | sed -e 's/^ //'
@@ -67,31 +65,34 @@ print_versions() {
run_vader() {
# Run Vader tests
echo -e "\nStarting Vader tests."
- local err=0
+ local -i res=0
+ local opt='' current_test=''
+ echo "Tin 1 $g_file_test"
# Parse tests files to execute
- if [[ -z $file_test ]]; then
- res="test/*"
+ if [[ -z "$g_file_test" ]]; then
+ opt="test/*"
else
- read -ra TEST <<< "$file_test"
- for i in "${TEST[@]}"; do
+ read -ra TEST <<< "$g_file_test"
+ for current_test in "${TEST[@]}"; do
# Remove quotes
- i=${i#\'}
- i=${i%\'}
- if [[ "$i" == *"*"* ]]; then
- res="$res test/${i}"
- elif [[ -f "$i" ]]; then
- res="$res test/${i}"
- elif [[ -f "${i}.vader" ]]; then
- res="$res test/${i}.vader"
+ current_test=${current_test#\'}
+ current_test=${current_test%\'}
+ if [[ "$current_test" == *"*"* ]]; then
+ opt+=" test/${current_test}"
+ elif [[ -f "$current_test" ]]; then
+ opt+=" test/${current_test}"
+ elif [[ -f "${current_test}.vader" ]]; then
+ opt+=" test/${current_test}.vader"
else
- printf "WARNING: Test \"%s\" not found.\n", "$i"
+ printf "WARNING: Test \"%s\" not found.\n", "$current_test"
fi
done
fi
+ echo "Tin 2 $opt"
# Run tests for each specified version
- for v in $vers; do
+ for v in $g_vers; do
echo -e "\n\nRunning version: $v"
echo -e "============================="
@@ -101,14 +102,14 @@ run_vader() {
home_save="$HOME"
# Create temporary root
- mkdir -p "$tmp_dir/vader_wiki"
- mkdir -p "$tmp_dir/vader_wiki/home"
- mkdir -p "$tmp_dir/vader_wiki/home/test"
- mkdir -p "$tmp_dir/vader_wiki/testplugin"
+ mkdir -p "$g_tmp_dir/vader_wiki"
+ mkdir -p "$g_tmp_dir/vader_wiki/home"
+ mkdir -p "$g_tmp_dir/vader_wiki/home/test"
+ mkdir -p "$g_tmp_dir/vader_wiki/testplugin"
# Set vars
- export ROOT="$tmp_dir/vader_wiki/"
- export HOME="$tmp_dir/vader_wiki/home"
+ export ROOT="$g_tmp_dir/vader_wiki/"
+ export HOME="$g_tmp_dir/vader_wiki/home"
vim="vim"
vim_opt="-u ~/test/vimrc"
else
@@ -134,11 +135,11 @@ run_vader() {
# flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
echo -e "\nCopying resources to $ROOT"
# Copy testplugin
- cp -rf "$wiki_path/"* "$ROOT/testplugin/"
+ cp -rf "$g_wiki_path/"* "$ROOT/testplugin/"
# Copy home
- cp -rf "$script_path/"* "$HOME/test/"
+ cp -rf "$g_script_path/"* "$HOME/test/"
# Copy rtp.vim
- cp -rf "$script_path/resources/rtp_local.vim" "$ROOT/rtp.vim"
+ cp -rf "$g_script_path/resources/rtp_local.vim" "$ROOT/rtp.vim"
# Copy vader <- internet
echo 'Cloning Vader (git, do not care the fatal)'
git clone --depth 10 https://github.com/junegunn/vader.vim /tmp/vader_wiki/vader 2>&1
@@ -146,77 +147,80 @@ run_vader() {
# Run batch of tests
# shellcheck disable=SC2086,SC2206
- if [[ "$res" != "" ]]; then
+ if [[ "$opt" != "" ]]; then
if [[ "$v" == "local" ]]; then
- pushd "$tmp_dir/vader_wiki/testplugin" \
+ pushd "$g_tmp_dir/vader_wiki/testplugin" \
|| echo 'Warning pushd testplugin failed'
# Run the tests
fcmd(){
- $vim $vim_opt "+Vader! ${res}" 2>&1 \
+ $vim $vim_opt "+Vader! ${opt}" 2>&1 \
| vader_filter | vader_color
return ${PIPESTATUS[1]}
}
- echo -e "\nStarting Batch Vim/Vader:\n<- $res\n"
+ echo -e "\nStarting Batch Vim/Vader:\n<- $opt\n"
type fcmd | sed -n '/^ /{s/^ //p}' | sed '$s/.*/&;/' ; shift ;
fcmd; ret=$?
- err=$(( err + ret ))
echo -e "\nReturned Batch Vim/Vader -> $ret"
+ (( res |= ret ))
- popd \
- || echo 'Warning popd also failed'
+ popd || echo 'Warning popd failed'
else
# In docker
fcmd() {
docker run -a stderr -e "VADER_OUTPUT_FILE=/dev/stderr" \
- "${flags[@]}" "$v" $vim_opt "+Vader! ${res}" 2>&1 \
+ "${flags[@]}" "$v" $vim_opt "+Vader! ${opt}" 2>&1 \
| vader_filter | vader_color
return ${PIPESTATUS[1]}
}
- echo -e "\nStarting Batch Vim/Vader:\n<- $res\n"
+ echo -e "\nStarting Batch Vim/Vader with: $opt\n"
type fcmd | sed -n '/^ /{s/^ //p}' | sed '$s/.*/&;/' ; shift ;
fcmd; ret=$?
- err=$(( err + ret ))
echo -e "\nReturned Batch Docker/Vim/Vader -> $ret : ${PIPESTATUS[*]}"
+ (( res |= ret ))
fi
fi
#set +o pipefail
# Restore what must (I know it should be refactored in a while)
- if [[ "$v" == "local" ]]; then
+ if [[ "$v" == local ]]; then
export HOME=$home_save
fi
done
- return $err
+ return "$res"
}
run_vint() {
- local err=0
- cmd="vint -s . && vint -s test/vimrc"
- if echo "$vers" | grep "local" > /dev/null; then
- echo -e "\nRunning Vint: $cmd : in $wiki_path"
- pushd "$wiki_path" > /dev/null \
+ local -i res=0
+
+ local cmd="vint -s . && vint -s test/vimrc"
+
+ if echo "$g_vers" | grep "local" > /dev/null; then
+ echo -e "\nRunning Vint: $cmd : in $g_wiki_path"
+ pushd "$g_wiki_path" > /dev/null \
|| echo 'Warning pushd wiki_path failed'
$cmd
- err=$(( err | $? ))
+ res=$(( res | $? ))
popd > /dev/null \
|| echo 'Warning popd also failed'
else
echo -e "\nStarting Docker container and running Vint: $cmd"
docker run -a stdout "${flags[@]}" bash -c "$cmd"
- err=$(( err | $? ))
+ res=$(( res | $? ))
fi
- return $err
+
+ return "$res"
}
vader_filter() {
# Filter Vader Stdout
- local err=0
+ local -i res=0
# Keep indentation
local IFS=''
+
while read -r REPLY; do
# Print only possible error cases
if [[ "$REPLY" = *'docker:'* ]] || \
@@ -228,27 +232,28 @@ vader_filter() {
[[ "$REPLY" = *'[ DO] (X)'* ]] || \
[[ "$REPLY" = *'[ EXPECT] (X)'* ]]; then
echo -e "$red$REPLY$nc"
- err=1
+ res=1
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
- err=1
+ res=1
fi
echo "$REPLY"
- elif [[ "$verbose" != 0 ]]; then
+ elif [[ "$g_verbose" != 0 ]]; then
# just print everything
echo "$REPLY"
fi
done
- if [[ "$err" == 1 ]]; then
+ if (( res == 1 )); then
echo -e "\033[0;31m"
echo -e "!---------Failed tests detected---------!"
echo -e "Run with the '-v' flag for verbose output"
echo -e "\033[0m"
fi
- return $err
+
+ return "$res"
}
@@ -283,103 +288,138 @@ vader_color() {
echo -en "$nc"
}
-# path of the script, supposing no spaces
-script_file="$(dirname "$0")"
-script_path="$( realpath "$script_file" )"
-wiki_path="$( realpath "$script_path/.." )"
-tmp_dir="$(dirname "$(mktemp -u)")"
-
-# list of vim/nvim versions
-vers="$(print_versions)"
-
-# type of tests to run - vader/vint/all
-type="all"
-# verbose output flag
-verbose=0
-
-# only run these tests
-file_test=""
+parse_argument(){
+ : 'Parse user argument'
+
+ # Declare: Path of the script, supposing no spaces
+ declare -g g_script_file=$(dirname "$0")
+ declare -g g_script_path=$(realpath "$g_script_file")
+ declare -g g_wiki_path=$(realpath "$g_script_path/..")
+ declare -g g_tmp_dir=$(dirname "$(mktemp -u)")
+
+ # Declare: list of vim/nvim versions
+ declare -g g_vers="$(print_versions)"
+
+ # Declare: type of tests to run - vader/vint/all
+ declare -g g_type="all"
+
+ # Declare: verbose output flag
+ declare -g g_verbose=0
+
+ # Declare: only run these tests
+ declare -g g_file_test=""
+
+ # Declare: docker flags
+ declare -g flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
+
+ # Parse all argument options
+ while getopts ":hvn:lt:f:" opt; do
+ case ${opt} in
+ h)
+ printHelp
+ ;;
+ n)
+ g_vers="$OPTARG"
+ ;;
+ v)
+ g_verbose=1
+ ;;
+ l)
+ print_versions
+ ;;
+ t)
+ g_type="$OPTARG"
+ ;;
+ f)
+ g_file_test="$OPTARG"
+ ;;
+ \?)
+ echo "Invalid option: $OPTARG" 1>&2
+ exit 1
+ ;;
+ :)
+ echo "Invalid option: $OPTARG requires an argument" 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ # Shift out parameters already processed
+ shift $((OPTIND -1))
+
+ # Handle error for non-option arguments
+ if [[ $# -ne 0 ]]; then
+ echo "Error: Got $# non-option arguments." 1>&2
+ exit 1
+ fi
+}
-# docker flags
-flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki)
-while getopts ":hvn:lt:f:" opt; do
- case ${opt} in
- h)
- printHelp
- ;;
- n)
- vers="$OPTARG"
+execute_test_argument(){
+ : 'Execute test according to global variable'
+ # Global error return of the script
+ local -i res=0 ret=0
+
+ # Select and run tests
+ case $g_type in
+ vader)
+ run_vader; ret=$?
+ echo "Main Vader: returned $ret"
+ ((res |= ret))
;;
- v)
- verbose=1
+ vint)
+ run_vint; ret=$?
+ echo "Main Vint: returned $ret"
+ ((res |= ret))
;;
- l)
- print_versions
+ all)
+ run_vint; ret=$?
+ echo "Main Vint: returned $ret"
+ ((res |= ret))
+ run_vader; ret=$?
+ echo "Main Vader: returned $ret"
+ ((res |= ret))
;;
- t)
- type="$OPTARG"
- ;;
- f)
- file_test="$OPTARG"
- ;;
- \?)
- echo "Invalid option: $OPTARG" 1>&2
- exit 1
- ;;
- :)
- echo "Invalid option: $OPTARG requires an argument" 1>&2
+ *)
+ echo "Error: invalid type - '$g_type'" 1>&2
exit 1
- ;;
esac
-done
+
+ return "$res"
+}
-# shift out processed parameters
-shift $((OPTIND -1))
-# error handling for non-option arguments
-if [[ $# -ne 0 ]]; then
- echo "Error: Got $# non-option arguments." 1>&2
- exit 1
-fi
+run_test(){
+ local -i res=0
-# stop tests on ctrl-c or ctrl-z
-trap exit 1 SIGINT SIGTERM
-
-# Global error return of the script
-o_error=0
-
-# Select which tests should run
-case $type in
- vader)
- run_vader ; err=$?
- echo "Main Vader: returned $err"
- o_error=$(( err | o_error ))
- ;;
- vint)
- run_vint ; err=$?
- echo "Main Vint: returned $err"
- o_error=$(( err | o_error ))
- ;;
- all)
- run_vint ; err=$?
- echo "Main Vint: returned $err"
- o_error=$(( err | o_error ))
- run_vader ; err=$?
- echo "Main Vader: returned $err"
- o_error=$(( err | o_error ))
- ;;
- *)
- echo "Error: invalid type - '$type'" 1>&2
- exit 1
-esac
+ # Hi
+ echo -en "Starting $(basename "$0") for VimWiki\n"
+
+ # Hook ctrl-c or ctrl-z to stop tests
+ trap exit 1 SIGINT SIGTERM
+
+ # For windows: Cmder bash is appending busybox to the path and
+ # and a smlll vim is included, so that override the windows path vim
+ if [[ -v OLD_PATH ]]; then
+ echo "Setting path from OLD_PATH : $OLD_PATH"
+ export PATH="$OLD_PATH"
+ fi
+
+ # WORK
+ parse_argument "$@"; ((res |= $?))
+ execute_test_argument; ((res |= $?))
+
+ # Print ellapsed time (after calculate it)
+ end_time=$(date +%s)
+ sec_time=$((end_time - start_time))
+ printf -v script_time '%dh:%dm:%ds' $((sec_time/3600)) $((sec_time%3600/60)) $((sec_time%60))
+ echo -ne "Script $(basename "$0"), in $script_time, Returned -> $res\n\n"
+
+ return "$res"
+}
-# Calcultate time
-end_time=$(date +%s)
-sec_time=$((end_time - start_time))
-printf -v script_time '%dh:%dm:%ds' $((sec_time/3600)) $((sec_time%3600/60)) $((sec_time%60))
-# Exit
-echo -ne "Script $(basename "$0"), in $script_time, Returned -> $o_error\n\n"
-exit $o_error
+if ! (return 0 2>/dev/null); then
+ run_test "$@"; exit $?
+fi