#!/usr/bin/env ruby def run_script(src) if system("bash", "-eo", "pipefail", "-c", src) != true exit(1) end end def run_vimscript(src) wrapper = <<~EOF vim --clean --not-a-term -u <(cat <<- "EOM" set nocompatible let &rtp='#{Dir.pwd},' . &rtp set t_ti= t_te= set shortmess+=F set noswapfile set nocp set nomore func! Log(msg) if $DEV != '1' echo a:msg endif endfunc EOM EOF wrapper += <<~'EOF' ) -S <(cat <<- "EOM" #{src} redir @q silent function /^NewTest_ redir END let s:tests = split(substitute(@q, '\(function\|def\) \(\k*()\)', '\2', 'g')) for test in s:tests echo test %bwipe! exe 'call ' . test set noinsertmode if len(v:errors) > 0 for err in v:errors echo err endfor cq! endif endfor qa! EOM ) | perl -pe 's/\e\[[0-9;]*[a-zA-Z]//g' EOF wrapper.gsub!('#{src}') { src } run_script(wrapper) end test_helptags = <<~EOF if ! expect -c 'set timeout 1' -c 'spawn vim -N --clean -c "set nomore | :helptags ./doc | q"' -c 'expect "ENTER" { exit 1 }' > /dev/null; then echo "Please ensure ':helptags ./doc' works properly" exit 1 fi EOF run_vimscript('source tests/filetypes.vim') run_vimscript('source tests/extensions.vim') if !ENV['DEV'] run_vimscript('source tests/native.vim') end run_script(test_helptags) # run_vimscript(" # func! TestIndent(file) # :e a:file # echo 'ok' # echo &filetype # endfunc # # #{Dir['tests/indent/**/test.*'].map { |f| "call TestIndent(\"#{f}\")"}.join("\n")} # ")