neovim/test/old/testdir/test_source.vim
dundargoc af23d17388
test: move oldtests to test directory (#22536)
The new oldtest directory is in test/old/testdir. The reason for this is
that many tests have hardcoded the parent directory name to be
'testdir'.
2023-03-07 11:13:04 +08:00

114 lines
3.1 KiB
VimL

" Tests for the :source command.
source check.vim
source view_util.vim
func Test_source_autocmd()
call writefile([
\ 'let did_source = 1',
\ ], 'Xsourced')
au SourcePre *source* let did_source_pre = 1
au SourcePost *source* let did_source_post = 1
source Xsourced
call assert_equal(g:did_source, 1)
call assert_equal(g:did_source_pre, 1)
call assert_equal(g:did_source_post, 1)
call delete('Xsourced')
au! SourcePre
au! SourcePost
unlet g:did_source
unlet g:did_source_pre
unlet g:did_source_post
endfunc
func Test_source_cmd()
au SourceCmd *source* let did_source = expand('<afile>')
au SourcePre *source* let did_source_pre = 2
au SourcePost *source* let did_source_post = 2
source Xsourced
call assert_equal(g:did_source, 'Xsourced')
call assert_false(exists('g:did_source_pre'))
call assert_equal(g:did_source_post, 2)
au! SourceCmd
au! SourcePre
au! SourcePost
endfunc
func Test_source_sandbox()
new
call writefile(["Ohello\<Esc>"], 'Xsourcehello')
source! Xsourcehello | echo
call assert_equal('hello', getline(1))
call assert_fails('sandbox source! Xsourcehello', 'E48:')
bwipe!
call delete('Xsourcehello')
endfunc
" When deleting a file and immediately creating a new one the inode may be
" recycled. Vim should not recognize it as the same script.
func Test_different_script()
call writefile(['let s:var = "asdf"'], 'XoneScript')
source XoneScript
call delete('XoneScript')
call writefile(['let g:var = s:var'], 'XtwoScript')
call assert_fails('source XtwoScript', 'E121:')
call delete('XtwoScript')
endfunc
" When sourcing a vim script, shebang should be ignored.
func Test_source_ignore_shebang()
call writefile(['#!./xyzabc', 'let g:val=369'], 'Xfile.vim')
source Xfile.vim
call assert_equal(g:val, 369)
call delete('Xfile.vim')
endfunc
" Test for expanding <sfile> in a autocmd and for <slnum> and <sflnum>
func Test_source_autocmd_sfile()
let code =<< trim [CODE]
let g:SfileName = ''
augroup sfiletest
au!
autocmd User UserAutoCmd let g:Sfile = '<sfile>:t'
augroup END
doautocmd User UserAutoCmd
let g:Slnum = expand('<slnum>')
let g:Sflnum = expand('<sflnum>')
augroup! sfiletest
[CODE]
call writefile(code, 'Xscript.vim')
source Xscript.vim
call assert_equal('Xscript.vim', g:Sfile)
call assert_equal('7', g:Slnum)
call assert_equal('8', g:Sflnum)
call delete('Xscript.vim')
endfunc
func Test_source_error()
call assert_fails('scriptencoding utf-8', 'E167:')
call assert_fails('finish', 'E168:')
" call assert_fails('scriptversion 2', 'E984:')
endfunc
" Test for sourcing a script recursively
func Test_nested_script()
CheckRunVimInTerminal
call writefile([':source! Xscript.vim', ''], 'Xscript.vim')
let buf = RunVimInTerminal('', {'rows': 6})
call term_wait(buf)
call term_sendkeys(buf, ":set noruler\n")
call term_sendkeys(buf, ":source! Xscript.vim\n")
call term_wait(buf)
call WaitForAssert({-> assert_match('E22: Scripts nested too deep\s*', term_getline(buf, 6))})
call delete('Xscript.vim')
call StopVimInTerminal(buf)
endfunc
" vim: shiftwidth=2 sts=2 expandtab