vimwiki

Personal wiki for vim
git clone https://github.com/vimwiki/vimwiki.git
Log | Files | Refs | README | LICENSE

commit 0a9b11fb0f565f098c93166d71f29dbd01aac435
parent c9ba53e204a64d106fe4e2c3208f60ebe17eb202
Author: Tinmarino <tinmarino@gmail.com>
Date:   Sat, 25 Jul 2020 23:26:31 -0400

Test: Add local testing (no docker need), working on windows

Problem: User do not want to install docker to test
        and docker is not set for windows already
Solution: Get the script to make the tests locally with current os and
        vim

Log of workflow (6h):
=====================

Test: cloning only last 10 Vader commits locally [tinwin]
Test: run_bash fix local copies and prettify/robustify [tinwin]
Test: Lint tests and fix err treatment in run_bash [Tinmarino]
Test; Windows: Restore the bug that I appended on Linux OLD-PATH env deps [Tinmarino]
Test: bash script first success on Windows (only the script not the tests) [tinwin]
Test: Dirty Backup [tinwin]

Diffstat:
Atest/resources/rtp_local.vim | 3+++
Mtest/run_tests.sh | 142+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
Mtest/vimrc | 30+++++++++++++++---------------
Atest/z_success.vader | 10++++++++++
4 files changed, 146 insertions(+), 39 deletions(-)

diff --git a/test/resources/rtp_local.vim b/test/resources/rtp_local.vim @@ -0,0 +1,3 @@ +set runtimepath+=/tmp/vader_wiki/home/vimtest/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,/tmp/vader_wiki/home/vimtest/vim/after +execute 'set rtp+='.join(filter(split(expand('/tmp/vader_wiki/home/vimtest/plugins/*')), 'isdirectory(v:val)'), ',') +set runtimepath+=/tmp/vader_wiki/testplugin diff --git a/test/run_tests.sh b/test/run_tests.sh @@ -3,8 +3,15 @@ # credit to https://github.com/w0rp/ale for script ideas and the color vader # output function. -# Global error return of the script -o_error=0 +# Say Hi +echo -en "Starting $(basename $0) for VimWiki\n" + +# 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/^ //' @@ -15,6 +22,8 @@ printHelp() { -h (Help) Print help message -n (versioN) Specify vim/nvim version to run tests for. + Specify "local" to run on your current vim install + for example on Windows. Multiple versions can be specified by quoting the value and separating versions with a space. E.g. -n "vim1 vim2". Default is all available versions. @@ -28,7 +37,10 @@ printHelp() { -v (Verbose) Turn on verbose output. - E.g. bash run_tests.sh -v -t vader -n "vim_7.4.1099 vim_8.1.0519" -f link_creation.vader,issue_markdown.vader + E.g. On Linux + bash run_tests.sh -v -t vader -n "vim_7.4.1099 vim_8.1.0519" -f link_creation.vader,issue_markdown.vader + E.g. On Windows + bash run_tests.sh -v -t vader -n local -f z_success.vader | cat EOF exit 0 @@ -42,7 +54,8 @@ printVersions() { runVader() { # Run Vader tests - echo "Starting Docker container and Vader tests." + echo -e "\nStarting Vader tests." + local err=0 # Parse tests files to execute if [[ -z $file_test ]]; then @@ -64,36 +77,112 @@ runVader() { fi done fi - echo "Vader: running files: $res and independantly $ind" + echo "Vader: will run files: $res and independantly $ind" # Run tests for each specified version for v in $vers; do echo -e "\nRunning version: $v" - vim="/vim-build/bin/$v -u test/vimrc -i NONE" - test_cmd="for VF in ${ind}; do $vim \"+Vader! \$VF\"; done" + + # Set local environment variables + if [[ "$v" == "local" ]]; then + # Save HOME var + 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 + + # Set vars + export ROOT="$tmp_dir/vader_wiki/" + export HOME="$tmp_dir/vader_wiki/home" + vim="vim" + vim_opt="-u ~/test/vimrc -i NONE" + else + # Only set dockerized vars + export ROOT="/" # So no if in vimrc + vim="/vim-build/bin/$v" + vim_opt="-u test/vimrc -i NONE" + fi set -o pipefail - # Run Fast tests - docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${flags[@]}" \ - "$v" -u test/vimrc -i NONE "+Vader! ${res}" 2>&1 | vader_filter | vader_color - o_error=$(( $o_error | $? )) + # Copy the resources to temporary directory + if [[ "$v" == "local" ]]; then + # 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/ + # Copy home + cp -rf $script_path/* $HOME/test/ + # Copy rtp.vim + cp -rf $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 + fi + + # Run batch of tests + if [[ "$v" == "local" ]]; then + pushd $tmp_dir/vader_wiki/testplugin + + # Run the tests + echo -e "\nStarting vim with Vader" + "$vim" $vim_opt "+Vader! ${res}" 2>&1 + err=$(( $err | $? )) + + popd + else # In docker + echo -e "\nStarting docker with vim with Vader" + docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${flags[@]}" \ + "$v" $vim_opt "+Vader! ${res}" 2>&1 | vader_filter | vader_color + err=$(( $err | $? )) + fi # Run Tests that must be run in individual vim instances # see README.md for more information - docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${flags[@]}" \ - /bin/bash -c "$test_cmd" 2>&1 | vader_filter | vader_color - o_error=$(( $o_error | $? )) + test_cmd="for VF in ${ind}; do $vim $vim_opt \"+Vader! \$VF\"; done" + if [[ "$v" == "local" ]]; then + pushd $tmp_dir/vader_wiki/testplugin + + echo "Starting vim with Vader" + bash -c "$test_cmd" 2>&1 + err=$(( $err | $? )) + + popd + else # In docker + echo "Starting docker with vim with Vader" + docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${flags[@]}" \ + /bin/bash -c "$test_cmd" 2>&1 | vader_filter | vader_color + err=$(( $err | $? )) + fi set +o pipefail + + # Restore what must (I know it should be refactored in a while) + if [[ "$v" == "local" ]]; then + export HOME=$home_save + fi done - return $o_error + return $err } runVint() { - echo "Starting Docker container and running Vint." - - docker run -a stdout "${flags[@]}" vint -s . + local err=0 + cmd="vint -s . && vint -s test/vimrc" + if echo "$vers" | grep "local" > /dev/null; then + echo "Running Vint: $cmd : in $wiki_path" + pushd $wiki_path > /dev/null + $cmd + err=$(( $err | $? )) + popd > /dev/null + else + echo "Starting Docker container and running Vint: $cmd" + docker run -a stdout "${flags[@]}" bash -c "$cmd" + err=$(( $err | $? )) + fi + return $err } getVers() { @@ -130,18 +219,14 @@ vader_filter() { done if [[ "$err" == 1 ]]; then - o_error=1 echo "" echo "!---------Failed tests detected---------!" echo "Run with the '-v' flag for verbose output" echo "" fi - return $o_error + return $err } -# Say Hi -echo -en "Starting $(basename $0) for VimWiki\n" - red='\033[0;31m' green='\033[0;32m' @@ -177,6 +262,12 @@ 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="$(getVers)" @@ -235,6 +326,9 @@ fi # 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" ) @@ -249,7 +343,7 @@ case $type in ;; "all" ) runVint ; err=$? - echo "Vint: returned $?" + echo "Vint: returned $err" o_error=$(( $err | $o_error )) runVader ; err=$? echo "Vader: returned $err" diff --git a/test/vimrc b/test/vimrc @@ -1,18 +1,18 @@ -source /rtp.vim -set runtimepath+=/vader - +" Declare tipical Vim preambule " vint: -ProhibitSetNoCompatible set nocompatible filetype plugin indent on syntax enable -" Wiki's resources to be used after: -" :!cp -r /testplugin/test/resources/* $HOME/ -" or from a test.vader file Execute block: -" call CopyResources() -" This complication aims for these copies to be writable +" Set chrooted virtual runtime path +let rtp=$ROOT.'/rtp.vim' +exe 'source '.rtp + +" Load Vader +let vader=$ROOT.'/vader' +exe 'set runtimepath+='.vader -" default syntax +" Declare default syntax let vimwiki_default = {} let vimwiki_default.path = $HOME . '/testwiki' let vimwiki_default.path_html = $HOME . '/html/default' @@ -21,7 +21,7 @@ let vimwiki_default.ext = '.wiki' let vimwiki_default.name = 'DefaultSyntax' let vimwiki_default.base_url = 'https://example.com/' -" markdown syntax - https://github.github.com/gfm/ +" Declare markdown syntax - https://github.github.com/gfm/ let vimwiki_markdown = {} let vimwiki_markdown.path = $HOME . '/testmarkdown' let vimwiki_markdown.path_html = $HOME . '/html/markdown' @@ -29,7 +29,7 @@ let vimwiki_markdown.syntax = 'markdown' let vimwiki_markdown.ext = '.md' let vimwiki_markdown.name = 'MarkdownSyntax' -" mediawiki syntax - https://www.mediawiki.org/wiki/Help:Formatting +" Declare mediawiki syntax - https://www.mediawiki.org/wiki/Help:Formatting let vimwiki_mediawiki = {} let vimwiki_mediawiki.path = $HOME . '/testmediawiki' let vimwiki_mediawiki.path_html = $HOME . '/html/mediawiki' @@ -37,10 +37,10 @@ let vimwiki_mediawiki.syntax = 'media' let vimwiki_mediawiki.ext = '.mw' let vimwiki_mediawiki.name = 'MediaWikiSyntax' -" register the 3 wikis +" Register the 3 wikis let g:vimwiki_list = [vimwiki_default, vimwiki_markdown, vimwiki_mediawiki] -" basic settings +" Set basic settings set backspace=indent,eol,start set wildmode=longest:full,full set wildmenu @@ -54,11 +54,11 @@ set hidden set laststatus=2 set hlsearch -" use ctrl-p/n for history completion instead of up/down arrows +" Map ctrl-p/n for history completion instead of up/down arrows cnoremap <C-p> <Up> cnoremap <C-n> <Down> -" jj to go back to command mode +" Map jj to go back to command mode inoremap jj <esc> " Use <C-L> to clear the highlighting of :set hlsearch and also preserve the diff --git a/test/z_success.vader b/test/z_success.vader @@ -0,0 +1,10 @@ +# Succeding test just to test the script when everything goes fine + +Given (Text v0.01): + Text + +Do (press escape): + \<Esc> + +Expect (Text): + Text