diff --git a/autoload/vader.vim b/autoload/vader.vim index 592a598..071f069 100644 --- a/autoload/vader.vim +++ b/autoload/vader.vim @@ -45,7 +45,6 @@ function! vader#run(bang, ...) range endif call vader#assert#reset() - call s:prepare() try let all_cases = [] let qfl = [] @@ -182,34 +181,20 @@ function! vader#restore(args) endfor endfunction -function! s:prepare() - command! -nargs=+ Log :call vader#log() - command! -nargs=+ Save :call vader#save() - command! -nargs=* Restore :call vader#restore() - command! -nargs=+ Assert :call vader#assert#true() - command! -nargs=+ AssertEqual :call vader#assert#equal() - command! -nargs=+ AssertNotEqual :call vader#assert#not_equal() - command! -nargs=+ AssertThrows :call vader#assert#throws() - function! SyntaxAt(...) abort - return call('vader#helper#syntax_at', a:000) - endfunction - function! SyntaxOf(...) abort - return call('vader#helper#syntax_of', a:000) - endfunction -endfunction - function! s:cleanup() let s:register = {} let s:register_undefined = [] - delcommand Log - delcommand Save - delcommand Restore - delcommand Assert - delcommand AssertEqual - delcommand AssertNotEqual - delcommand AssertThrows - unlet g:SyntaxAt - unlet g:SyntaxOf + if exists(':Log') == 2 + delcommand Log + delcommand Save + delcommand Restore + delcommand Assert + delcommand AssertEqual + delcommand AssertNotEqual + delcommand AssertThrows + delfunction SyntaxAt + delfunction SyntaxOf + endif endfunction function! s:comment(case, label) @@ -268,9 +253,9 @@ function! s:execute(prefix, type, block, fpos, lang_if) call filter(tb_entries, "v:val !~# '\\vvader#assert#[^,]+, line \\d+$'") for tb_entry in tb_entries let [source, _, f] = s:get_source_linenr_from_tb_entry(tb_entry) - Log 'in '.f + call vader#log('in '.f) if len(source) - Log ' '.source + call vader#log(' '.source) endif endfor let tb_first = substitute(tb_first, '^function ', '', '') @@ -287,7 +272,7 @@ endfunction function! s:print_throwpoint() if v:throwpoint !~ 'vader#assert' - Log v:throwpoint + call vader#log(v:throwpoint) endif endfunction diff --git a/autoload/vader/window.vim b/autoload/vader/window.vim index 57562e1..677ddc9 100644 --- a/autoload/vader/window.vim +++ b/autoload/vader/window.vim @@ -67,14 +67,30 @@ endfunction function! vader#window#execute(lines, lang_if) let temp = tempname() try + let lines = [ + \ 'command! -nargs=+ Log :call vader#log()', + \ 'command! -nargs=+ Save :call vader#save()', + \ 'command! -nargs=* Restore :call vader#restore()', + \ 'command! -nargs=+ Assert :call vader#assert#true()', + \ 'command! -nargs=+ AssertEqual :call vader#assert#equal()', + \ 'command! -nargs=+ AssertNotEqual :call vader#assert#not_equal()', + \ 'command! -nargs=+ AssertThrows :call vader#assert#throws()', + \ 'function! SyntaxAt(...) abort', + \ " return call('vader#helper#syntax_at', a:000)", + \ 'endfunction', + \ 'function! SyntaxOf(...) abort', + \ " return call('vader#helper#syntax_of', a:000)", + \ 'endfunction', + \ ] + + call add(lines, 'function! s:vader_wrapper()') if empty(a:lang_if) - let lines = copy(a:lines) + call extend(lines, copy(a:lines)) else - let lines = copy(a:lines) - call insert(lines, a:lang_if . ' << __VADER__LANG__IF__') + call add(lines, a:lang_if . ' << __VADER__LANG__IF__') + call extend(lines, copy(a:lines)) call add(lines, '__VADER__LANG__IF__') endif - call insert(lines, 'function! s:vader_wrapper()') call extend(lines, ['endfunction', 'call s:vader_wrapper()']) call writefile(lines, temp) execute 'source '.temp diff --git a/test/feature/helper.vader b/test/feature/helper.vader index bac41bc..cb3b7eb 100644 --- a/test/feature/helper.vader +++ b/test/feature/helper.vader @@ -44,3 +44,12 @@ Execute (SyntaxOf does not move cursor): let pos = getpos('.') AssertEqual pos[1], 2 AssertEqual pos[2], 1 + +Execute (Helpers can access script-local var): + let s:foo = 1 + AssertEqual s:foo, 1 + + function! s:foo() + return 2 + endfunction + Assert s:foo() == 2, 'function s:foo should be callable'