VimPlugin: vader: Difference between revisions
From wikinotes
(2 intermediate revisions by the same user not shown) | |||
Line 62: | Line 62: | ||
<source lang="bash"> | <source lang="bash"> | ||
#!/usr/bin/env bash | #!/usr/bin/env bash | ||
EXECUTABLE="$(basename "${BASH_SOURCE[0]}")" | |||
while [ $# -gt 0 ] ; do | |||
setup_colours() { | |||
fg_comment=$(tput setaf 8) | |||
fg_preview=$(tput setaf 3) | |||
fg_normal=$(tput sgr0) | |||
fg_header=$(tput setaf 4) | |||
} | |||
show_help() { | |||
setup_colours | |||
echo "${fg_preview}${EXECUTABLE} [-i] [TESTFILE [TESTFILE...]]${fg_normal}" | |||
echo | |||
echo "${fg_header}DESCRIPTION:${fg_normal}" | |||
echo " runs unittests (all by default)" | |||
echo | |||
echo "${fg_header}ARGUMENTS:${fg_normal}" | |||
echo " -i --interactive" | |||
echo " runs vader interactively (defaults to non-interactive)" | |||
echo | |||
echo "${fg_header}EXAMPLES:${fg_normal}" | |||
echo " ${fg_comment}# run all tests, non-interactively${fg_normal}" | |||
echo " ./${EXECUTABLE}" | |||
echo | |||
echo " ${fg_comment}# run all tests, interactively${fg_normal}" | |||
echo " ./${EXECUTABLE} -i" | |||
echo | |||
echo " ${fg_comment}# run single testfile, non-interactively${fg_normal}" | |||
echo " ./${EXECUTABLE} tests/viml/test_error.vader" | |||
echo | |||
echo " ${fg_comment}# run multiple testfiles, non-interactively${fg_normal}" | |||
echo " ./${EXECUTABLE} \\" | |||
echo " tests/viml/test_error.vader \\" | |||
echo " tests/viml/test_graphql.vader" | |||
echo | |||
} | |||
vimrc() { | |||
cat <<-END | |||
filetype off | |||
set rtp+=.test_deps/vader.vim | |||
set rtp+=.test_deps/jellybeans.vim | |||
set rtp+=. | |||
filetype plugin indent on | |||
syntax enable | |||
colorscheme jellybeans | |||
map <leader>q :q<CR> | |||
END | |||
} | |||
install_deps() { | |||
test -d .test_deps || mkdir -p .test_deps | |||
test -e .test_deps/vader.vim/.git || git clone https://github.com/junegunn/vader.vim .test_deps/vader.vim | |||
test -e .test_deps/jellybeans.vim/.git || git clone https://github.com/nanotech/jellybeans.vim .test_deps/jellybeans.vim | |||
} | |||
run_tests() { | |||
args=$@ | |||
if test -z "${args}" ; then | |||
default_tests='tests/*.vader' | |||
else | |||
default_tests="" | |||
fi | |||
if [[ "$interactive" == "1" ]] ; then | |||
vadercmd='+Vader ' | |||
vadercmd+=" $default_tests" | |||
vim -Nu <(echo "$(vimrc)") "$vadercmd ${args[@]}" | |||
else | |||
vadercmd='Vader! ' | |||
vadercmd+=" $default_tests" | |||
vim -Nu <(echo "$(vimrc)") -c "$vadercmd ${args[@]}" > /dev/null | |||
fi | |||
} | |||
main() { | |||
interactive=0 | |||
args=$@ | |||
while [ $# -gt 0 ] ; do | |||
case $1 in | |||
-h|--help) | -h|--help) | ||
show_help | |||
exit 0 | exit 0 | ||
;; | ;; | ||
Line 106: | Line 161: | ||
shift | shift | ||
;; | ;; | ||
esac | |||
done | done | ||
install_deps | |||
run_tests "${args[@]}" | |||
} | |||
main "$@" | |||
</source> | </source> | ||
}} | }} | ||
Line 150: | Line 180: | ||
:e foo | :e foo | ||
:w abc | :w abc | ||
:call cursor(1, 2) | |||
After (teardown name): | After (teardown name): | ||
Line 172: | Line 203: | ||
| [[Vader.vim assertions]] | | [[Vader.vim assertions]] | ||
|} | |} | ||
</blockquote><!-- Syntax --> |
Latest revision as of 19:02, 7 January 2023
vader.vim is a vim plugin for testing vim itself, or vim plugins.
Documentation
github https://github.com/junegunn/vader.vim
Project Setup
Test in Filesystem
yourplugin/ tests/ test_filename1.vader test_filename2.vader ...Test names do not matter, but the directory structure must be flat . Tests are run using glob-matches.
Test-Runner
vim -n '+Vader tests/viml/*.vader' # interactive vim -n -c 'Vader! tests/viml/*.vader' > /dev/null # non-interactivesimple example
run-tests.sh
#!/usr/bin/bash # get dependencies test -d .test_deps || mkdir -p .test_deps test -e .test_deps/vader.vim/.git || git clone https://github.com/junegunn/vader.vim .test_deps/vader.vim test -e .test_deps/jellybeans.vim/.git || git clone https://github.com/nanotech/jellybeans.vim .test_deps/jellybeans.vim # run tests vim -Nu <(cat << EOF filetype off set rtp+=.test_deps/vader.vim set rtp+=.test_deps/jellybeans.vim set rtp+=. filetype plugin indent on syntax enable colorscheme jellybeans map <leader>q :q<CR> EOF) '+Vader tests/viml/*'featureful example
#!/usr/bin/env bash EXECUTABLE="$(basename "${BASH_SOURCE[0]}")" setup_colours() { fg_comment=$(tput setaf 8) fg_preview=$(tput setaf 3) fg_normal=$(tput sgr0) fg_header=$(tput setaf 4) } show_help() { setup_colours echo "${fg_preview}${EXECUTABLE} [-i] [TESTFILE [TESTFILE...]]${fg_normal}" echo echo "${fg_header}DESCRIPTION:${fg_normal}" echo " runs unittests (all by default)" echo echo "${fg_header}ARGUMENTS:${fg_normal}" echo " -i --interactive" echo " runs vader interactively (defaults to non-interactive)" echo echo "${fg_header}EXAMPLES:${fg_normal}" echo " ${fg_comment}# run all tests, non-interactively${fg_normal}" echo " ./${EXECUTABLE}" echo echo " ${fg_comment}# run all tests, interactively${fg_normal}" echo " ./${EXECUTABLE} -i" echo echo " ${fg_comment}# run single testfile, non-interactively${fg_normal}" echo " ./${EXECUTABLE} tests/viml/test_error.vader" echo echo " ${fg_comment}# run multiple testfiles, non-interactively${fg_normal}" echo " ./${EXECUTABLE} \\" echo " tests/viml/test_error.vader \\" echo " tests/viml/test_graphql.vader" echo } vimrc() { cat <<-END filetype off set rtp+=.test_deps/vader.vim set rtp+=.test_deps/jellybeans.vim set rtp+=. filetype plugin indent on syntax enable colorscheme jellybeans map <leader>q :q<CR> END } install_deps() { test -d .test_deps || mkdir -p .test_deps test -e .test_deps/vader.vim/.git || git clone https://github.com/junegunn/vader.vim .test_deps/vader.vim test -e .test_deps/jellybeans.vim/.git || git clone https://github.com/nanotech/jellybeans.vim .test_deps/jellybeans.vim } run_tests() { args=$@ if test -z "${args}" ; then default_tests='tests/*.vader' else default_tests="" fi if [[ "$interactive" == "1" ]] ; then vadercmd='+Vader ' vadercmd+=" $default_tests" vim -Nu <(echo "$(vimrc)") "$vadercmd ${args[@]}" else vadercmd='Vader! ' vadercmd+=" $default_tests" vim -Nu <(echo "$(vimrc)") -c "$vadercmd ${args[@]}" > /dev/null fi } main() { interactive=0 args=$@ while [ $# -gt 0 ] ; do case $1 in -h|--help) show_help exit 0 ;; -i|--interactive) interactive=1 args=( "${args[@]/$1}" ) shift ;; *) shift ;; esac done install_deps run_tests "${args[@]}" } main "$@"Test File
# NOTE: everything indented by 2x spaces && tabwidth=2 Before (setup name): :e foo :w abc :call cursor(1, 2) After (teardown name): :bdel foo # tests Execute (test foo returns foo): AssertEqual my_function("foo"), "foo" Execute (test bar returns bar): AssertEqual my_function("bar"), "bar"
Syntax
Vader.vim test blocks Vader.vim assertions