82 lines
2.1 KiB
VimL
82 lines
2.1 KiB
VimL
|
let total_started = reltime()
|
||
|
|
||
|
" add vim-go the only plugin inside the runtimepath
|
||
|
let git_root_path = system("git rev-parse --show-toplevel | tr -d '\\n'")
|
||
|
exe 'set rtp=' . git_root_path
|
||
|
|
||
|
" source the passed test file
|
||
|
source %
|
||
|
|
||
|
" cd into the folder of the test file
|
||
|
let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd '
|
||
|
let dir = getcwd()
|
||
|
execute cd . expand('%:p:h')
|
||
|
|
||
|
" initialize variables
|
||
|
let g:testname = expand('%')
|
||
|
let s:fail = 0
|
||
|
let s:done = 0
|
||
|
let s:logs = []
|
||
|
|
||
|
" get a list of all Test_ functions for the given file
|
||
|
set nomore
|
||
|
redir @q
|
||
|
silent function /^Test_
|
||
|
redir END
|
||
|
let s:tests = split(substitute(@q, 'function \(\k*()\)', '\1', 'g'))
|
||
|
|
||
|
" Iterate over all tests and execute them
|
||
|
for s:test in sort(s:tests)
|
||
|
let started = reltime()
|
||
|
|
||
|
call add(s:logs, printf("=== RUN %s", s:test[:-3]))
|
||
|
exe 'call ' . s:test
|
||
|
|
||
|
let elapsed_time = reltimestr(reltime(started))
|
||
|
let elapsed_time = substitute(elapsed_time, '^\s*\(.\{-}\)\s*$', '\1', '')
|
||
|
|
||
|
let s:done += 1
|
||
|
|
||
|
if len(v:errors) > 0
|
||
|
let s:fail += 1
|
||
|
call add(s:logs, printf("--- FAIL: %s (%ss)", s:test[:-3], elapsed_time))
|
||
|
call extend(s:logs, map(v:errors, '" ". v:val'))
|
||
|
|
||
|
" reset so we can capture failures of next test
|
||
|
let v:errors = []
|
||
|
else
|
||
|
call add(s:logs, printf("--- PASS: %s (%ss)", s:test[:-3], elapsed_time))
|
||
|
endif
|
||
|
endfor
|
||
|
|
||
|
" pop out into the scripts folder
|
||
|
execute cd . fnameescape(dir)
|
||
|
|
||
|
" create an empty fail to indicate that the test failed
|
||
|
if s:fail > 0
|
||
|
split FAILED
|
||
|
write
|
||
|
endif
|
||
|
|
||
|
let total_elapsed_time = reltimestr(reltime(total_started))
|
||
|
let total_elapsed_time = substitute(total_elapsed_time, '^\s*\(.\{-}\)\s*$', '\1', '')
|
||
|
|
||
|
let message = 'Executed ' . s:done . (s:done > 1 ? ' tests' : ' test') . '. Total test time: '. total_elapsed_time .'s'
|
||
|
call add(s:logs, "")
|
||
|
call add(s:logs, message)
|
||
|
|
||
|
" store all error messages from within vim into test.log
|
||
|
redir > test.log
|
||
|
silent messages
|
||
|
redir END
|
||
|
|
||
|
" also store all internal messages from s:logs: as well
|
||
|
split test.log
|
||
|
call append(line('$'), '')
|
||
|
call append(line('$'), 'From ' . g:testname . ':')
|
||
|
call append(line('$'), s:logs)
|
||
|
write
|
||
|
|
||
|
" bye, bye!
|
||
|
qall!
|