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]
			
			
This commit is contained in:
		
							
								
								
									
										3
									
								
								test/resources/rtp_local.vim
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/resources/rtp_local.vim
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
| @@ -3,8 +3,15 @@ | |||||||
| # credit to https://github.com/w0rp/ale for script ideas and the color vader | # credit to https://github.com/w0rp/ale for script ideas and the color vader | ||||||
| # output function. | # output function. | ||||||
|  |  | ||||||
| # Global error return of the script | # Say Hi | ||||||
| o_error=0 | 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() { | printHelp() { | ||||||
|     cat << '        EOF' | sed -e 's/^        //' |     cat << '        EOF' | sed -e 's/^        //' | ||||||
| @@ -15,6 +22,8 @@ printHelp() { | |||||||
|         -h (Help) Print help message |         -h (Help) Print help message | ||||||
|  |  | ||||||
|         -n (versioN) Specify vim/nvim version to run tests for. |         -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 |            Multiple versions can be specified by quoting the value and | ||||||
|            separating versions with a space. E.g. -n "vim1 vim2". |            separating versions with a space. E.g. -n "vim1 vim2". | ||||||
|            Default is all available versions. |            Default is all available versions. | ||||||
| @@ -28,7 +37,10 @@ printHelp() { | |||||||
|  |  | ||||||
|         -v (Verbose) Turn on verbose output. |         -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 |         EOF | ||||||
|  |  | ||||||
|     exit 0 |     exit 0 | ||||||
| @@ -42,7 +54,8 @@ printVersions() { | |||||||
|  |  | ||||||
| runVader() { | runVader() { | ||||||
|     # Run Vader tests |     # Run Vader tests | ||||||
|     echo "Starting Docker container and Vader tests." |     echo -e "\nStarting Vader tests." | ||||||
|  |     local err=0 | ||||||
|  |  | ||||||
|     # Parse tests files to execute |     # Parse tests files to execute | ||||||
|     if [[ -z $file_test ]]; then |     if [[ -z $file_test ]]; then | ||||||
| @@ -64,36 +77,112 @@ runVader() { | |||||||
|             fi |             fi | ||||||
|         done |         done | ||||||
|     fi |     fi | ||||||
|     echo "Vader: running files: $res and independantly $ind" |     echo "Vader: will run files: $res and independantly $ind" | ||||||
|  |  | ||||||
|     # Run tests for each specified version |     # Run tests for each specified version | ||||||
|     for v in $vers; do |     for v in $vers; do | ||||||
|         echo -e "\nRunning version: $v" |         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 |         set -o pipefail | ||||||
|  |  | ||||||
|         # Run Fast tests |         # Copy the resources to temporary directory | ||||||
|         docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${flags[@]}" \ |         if [[ "$v" == "local" ]]; then | ||||||
|           "$v" -u test/vimrc -i NONE "+Vader! ${res}" 2>&1 | vader_filter | vader_color |             # flags=(--rm -v "$PWD/../:/testplugin" -v "$PWD/../test:/home" -w /testplugin vimwiki) | ||||||
|         o_error=$(( $o_error | $? )) |             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 |         # Run Tests that must be run in individual vim instances | ||||||
|         # see README.md for more information |         # see README.md for more information | ||||||
|         docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${flags[@]}" \ |         test_cmd="for VF in ${ind}; do $vim $vim_opt \"+Vader! \$VF\"; done" | ||||||
|           /bin/bash -c "$test_cmd" 2>&1 | vader_filter | vader_color |         if [[ "$v" == "local" ]]; then | ||||||
|         o_error=$(( $o_error | $? )) |             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 |         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 |     done | ||||||
|     return $o_error |     return $err | ||||||
| } | } | ||||||
|  |  | ||||||
| runVint() { | runVint() { | ||||||
|     echo "Starting Docker container and running Vint." |     local err=0 | ||||||
|  |     cmd="vint -s . && vint -s test/vimrc" | ||||||
|     docker run -a stdout "${flags[@]}" vint -s . |     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() { | getVers() { | ||||||
| @@ -130,18 +219,14 @@ vader_filter() { | |||||||
|     done |     done | ||||||
|  |  | ||||||
|     if [[ "$err" == 1 ]]; then |     if [[ "$err" == 1 ]]; then | ||||||
|         o_error=1 |  | ||||||
|         echo "" |         echo "" | ||||||
|         echo "!---------Failed tests detected---------!" |         echo "!---------Failed tests detected---------!" | ||||||
|         echo "Run with the '-v' flag for verbose output" |         echo "Run with the '-v' flag for verbose output" | ||||||
|         echo "" |         echo "" | ||||||
|     fi |     fi | ||||||
|     return $o_error |     return $err | ||||||
| } | } | ||||||
|  |  | ||||||
| # Say Hi |  | ||||||
| echo -en "Starting $(basename $0) for VimWiki\n" |  | ||||||
|  |  | ||||||
|  |  | ||||||
| red='\033[0;31m' | red='\033[0;31m' | ||||||
| green='\033[0;32m' | green='\033[0;32m' | ||||||
| @@ -177,6 +262,12 @@ vader_color() { | |||||||
|     echo -en "$nc" |     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 | # list of vim/nvim versions | ||||||
| vers="$(getVers)" | vers="$(getVers)" | ||||||
|  |  | ||||||
| @@ -235,6 +326,9 @@ fi | |||||||
| # stop tests on ctrl-c or ctrl-z | # stop tests on ctrl-c or ctrl-z | ||||||
| trap exit 1 SIGINT SIGTERM | trap exit 1 SIGINT SIGTERM | ||||||
|  |  | ||||||
|  | # Global error return of the script | ||||||
|  | o_error=0 | ||||||
|  |  | ||||||
| # select which tests should run | # select which tests should run | ||||||
| case $type in | case $type in | ||||||
|     "vader" ) |     "vader" ) | ||||||
| @@ -249,7 +343,7 @@ case $type in | |||||||
|         ;; |         ;; | ||||||
|     "all" ) |     "all" ) | ||||||
|         runVint ; err=$? |         runVint ; err=$? | ||||||
|         echo "Vint: returned $?" |         echo "Vint: returned $err" | ||||||
|         o_error=$(( $err | $o_error )) |         o_error=$(( $err | $o_error )) | ||||||
|         runVader ; err=$? |         runVader ; err=$? | ||||||
|         echo "Vader: returned $err" |         echo "Vader: returned $err" | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								test/vimrc
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								test/vimrc
									
									
									
									
									
								
							| @@ -1,18 +1,18 @@ | |||||||
| source /rtp.vim | " Declare tipical Vim preambule | ||||||
| set runtimepath+=/vader |  | ||||||
|  |  | ||||||
| " vint: -ProhibitSetNoCompatible | " vint: -ProhibitSetNoCompatible | ||||||
| set nocompatible | set nocompatible | ||||||
| filetype plugin indent on | filetype plugin indent on | ||||||
| syntax enable | syntax enable | ||||||
|  |  | ||||||
| " Wiki's resources to be used after: | " Set chrooted virtual runtime path | ||||||
| "   :!cp -r /testplugin/test/resources/* $HOME/ | let rtp=$ROOT.'/rtp.vim' | ||||||
| " or from a test.vader file Execute block: | exe 'source '.rtp | ||||||
| "   call CopyResources() |  | ||||||
| " This complication aims for these copies to be writable |  | ||||||
|  |  | ||||||
| " default syntax | " Load Vader | ||||||
|  | let vader=$ROOT.'/vader' | ||||||
|  | exe 'set runtimepath+='.vader | ||||||
|  |  | ||||||
|  | " Declare default syntax | ||||||
| let vimwiki_default = {} | let vimwiki_default = {} | ||||||
| let vimwiki_default.path = $HOME . '/testwiki' | let vimwiki_default.path = $HOME . '/testwiki' | ||||||
| let vimwiki_default.path_html = $HOME . '/html/default' | 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.name = 'DefaultSyntax' | ||||||
| let vimwiki_default.base_url = 'https://example.com/' | 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 = {} | ||||||
| let vimwiki_markdown.path = $HOME . '/testmarkdown' | let vimwiki_markdown.path = $HOME . '/testmarkdown' | ||||||
| let vimwiki_markdown.path_html = $HOME . '/html/markdown' | 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.ext = '.md' | ||||||
| let vimwiki_markdown.name = 'MarkdownSyntax' | 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 = {} | ||||||
| let vimwiki_mediawiki.path = $HOME . '/testmediawiki' | let vimwiki_mediawiki.path = $HOME . '/testmediawiki' | ||||||
| let vimwiki_mediawiki.path_html = $HOME . '/html/mediawiki' | 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.ext = '.mw' | ||||||
| let vimwiki_mediawiki.name = 'MediaWikiSyntax' | let vimwiki_mediawiki.name = 'MediaWikiSyntax' | ||||||
|  |  | ||||||
| " register the 3 wikis | " Register the 3 wikis | ||||||
| let g:vimwiki_list = [vimwiki_default, vimwiki_markdown, vimwiki_mediawiki] | let g:vimwiki_list = [vimwiki_default, vimwiki_markdown, vimwiki_mediawiki] | ||||||
|  |  | ||||||
| " basic settings | " Set basic settings | ||||||
| set backspace=indent,eol,start | set backspace=indent,eol,start | ||||||
| set wildmode=longest:full,full | set wildmode=longest:full,full | ||||||
| set wildmenu | set wildmenu | ||||||
| @@ -54,11 +54,11 @@ set hidden | |||||||
| set laststatus=2 | set laststatus=2 | ||||||
| set hlsearch | 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-p> <Up> | ||||||
| cnoremap <C-n> <Down> | cnoremap <C-n> <Down> | ||||||
|  |  | ||||||
| " jj to go back to command mode | " Map jj to go back to command mode | ||||||
| inoremap jj <esc> | inoremap jj <esc> | ||||||
|  |  | ||||||
| " Use <C-L> to clear the highlighting of :set hlsearch and also preserve the | " Use <C-L> to clear the highlighting of :set hlsearch and also preserve the | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								test/z_success.vader
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								test/z_success.vader
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||||
		Reference in New Issue
	
	Block a user