12b618528SBram Moolenaar" Tests for the :source command. 22b618528SBram Moolenaar 3*5c504f68SBram Moolenaarsource check.vim 4*5c504f68SBram Moolenaarsource view_util.vim 5*5c504f68SBram Moolenaar 62b618528SBram Moolenaarfunc Test_source_autocmd() 72b618528SBram Moolenaar call writefile([ 82b618528SBram Moolenaar \ 'let did_source = 1', 92b618528SBram Moolenaar \ ], 'Xsourced') 102b618528SBram Moolenaar au SourcePre *source* let did_source_pre = 1 112b618528SBram Moolenaar au SourcePost *source* let did_source_post = 1 122b618528SBram Moolenaar 132b618528SBram Moolenaar source Xsourced 142b618528SBram Moolenaar 152b618528SBram Moolenaar call assert_equal(g:did_source, 1) 162b618528SBram Moolenaar call assert_equal(g:did_source_pre, 1) 172b618528SBram Moolenaar call assert_equal(g:did_source_post, 1) 182b618528SBram Moolenaar 192b618528SBram Moolenaar call delete('Xsourced') 202b618528SBram Moolenaar au! SourcePre 212b618528SBram Moolenaar au! SourcePost 222b618528SBram Moolenaar unlet g:did_source 232b618528SBram Moolenaar unlet g:did_source_pre 242b618528SBram Moolenaar unlet g:did_source_post 252b618528SBram Moolenaarendfunc 262b618528SBram Moolenaar 272b618528SBram Moolenaarfunc Test_source_cmd() 282b618528SBram Moolenaar au SourceCmd *source* let did_source = expand('<afile>') 292b618528SBram Moolenaar au SourcePre *source* let did_source_pre = 2 302b618528SBram Moolenaar au SourcePost *source* let did_source_post = 2 312b618528SBram Moolenaar 322b618528SBram Moolenaar source Xsourced 332b618528SBram Moolenaar 342b618528SBram Moolenaar call assert_equal(g:did_source, 'Xsourced') 352b618528SBram Moolenaar call assert_false(exists('g:did_source_pre')) 362b618528SBram Moolenaar call assert_equal(g:did_source_post, 2) 372b618528SBram Moolenaar 382b618528SBram Moolenaar au! SourceCmd 392b618528SBram Moolenaar au! SourcePre 402b618528SBram Moolenaar au! SourcePost 412b618528SBram Moolenaarendfunc 4253575521SBram Moolenaar 4353575521SBram Moolenaarfunc Test_source_sandbox() 4453575521SBram Moolenaar new 4553575521SBram Moolenaar call writefile(["Ohello\<Esc>"], 'Xsourcehello') 4653575521SBram Moolenaar source! Xsourcehello | echo 4753575521SBram Moolenaar call assert_equal('hello', getline(1)) 4853575521SBram Moolenaar call assert_fails('sandbox source! Xsourcehello', 'E48:') 4953575521SBram Moolenaar bwipe! 50ddd33087SBram Moolenaar call delete('Xsourcehello') 5153575521SBram Moolenaarendfunc 52ca33eb25SBram Moolenaar 53ca33eb25SBram Moolenaar" When deleting a file and immediately creating a new one the inode may be 54ca33eb25SBram Moolenaar" recycled. Vim should not recognize it as the same script. 55ca33eb25SBram Moolenaarfunc Test_different_script() 56ca33eb25SBram Moolenaar call writefile(['let s:var = "asdf"'], 'XoneScript') 57ca33eb25SBram Moolenaar source XoneScript 58ca33eb25SBram Moolenaar call delete('XoneScript') 59ca33eb25SBram Moolenaar call writefile(['let g:var = s:var'], 'XtwoScript') 60ca33eb25SBram Moolenaar call assert_fails('source XtwoScript', 'E121:') 61ca33eb25SBram Moolenaar call delete('XtwoScript') 62ca33eb25SBram Moolenaarendfunc 639f6277bdSBram Moolenaar 649f6277bdSBram Moolenaar" When sourcing a vim script, shebang should be ignored. 659f6277bdSBram Moolenaarfunc Test_source_ignore_shebang() 669f6277bdSBram Moolenaar call writefile(['#!./xyzabc', 'let g:val=369'], 'Xfile.vim') 679f6277bdSBram Moolenaar source Xfile.vim 689f6277bdSBram Moolenaar call assert_equal(g:val, 369) 699f6277bdSBram Moolenaar call delete('Xfile.vim') 709f6277bdSBram Moolenaarendfunc 719f6277bdSBram Moolenaar 72bc2b71d4SBram Moolenaar" Test for expanding <sfile> in a autocmd and for <slnum> and <sflnum> 73bc2b71d4SBram Moolenaarfunc Test_source_autocmd_sfile() 74bc2b71d4SBram Moolenaar let code =<< trim [CODE] 75bc2b71d4SBram Moolenaar let g:SfileName = '' 76bc2b71d4SBram Moolenaar augroup sfiletest 77bc2b71d4SBram Moolenaar au! 78bc2b71d4SBram Moolenaar autocmd User UserAutoCmd let g:Sfile = '<sfile>:t' 79bc2b71d4SBram Moolenaar augroup END 80bc2b71d4SBram Moolenaar doautocmd User UserAutoCmd 81bc2b71d4SBram Moolenaar let g:Slnum = expand('<slnum>') 82bc2b71d4SBram Moolenaar let g:Sflnum = expand('<sflnum>') 83bc2b71d4SBram Moolenaar augroup! sfiletest 84bc2b71d4SBram Moolenaar [CODE] 85bc2b71d4SBram Moolenaar call writefile(code, 'Xscript.vim') 86bc2b71d4SBram Moolenaar source Xscript.vim 87bc2b71d4SBram Moolenaar call assert_equal('Xscript.vim', g:Sfile) 88bc2b71d4SBram Moolenaar call assert_equal('7', g:Slnum) 89bc2b71d4SBram Moolenaar call assert_equal('8', g:Sflnum) 90bc2b71d4SBram Moolenaar call delete('Xscript.vim') 91bc2b71d4SBram Moolenaarendfunc 92bc2b71d4SBram Moolenaar 93476a6131SBram Moolenaarfunc Test_source_error() 94476a6131SBram Moolenaar call assert_fails('scriptencoding utf-8', 'E167:') 95476a6131SBram Moolenaar call assert_fails('finish', 'E168:') 96476a6131SBram Moolenaar call assert_fails('scriptversion 2', 'E984:') 97476a6131SBram Moolenaarendfunc 98476a6131SBram Moolenaar 99*5c504f68SBram Moolenaar" Test for sourcing a script recursively 100*5c504f68SBram Moolenaarfunc Test_nested_script() 101*5c504f68SBram Moolenaar CheckRunVimInTerminal 102*5c504f68SBram Moolenaar call writefile([':source! Xscript.vim', ''], 'Xscript.vim') 103*5c504f68SBram Moolenaar let buf = RunVimInTerminal('', {'rows': 6}) 104*5c504f68SBram Moolenaar call term_wait(buf) 105*5c504f68SBram Moolenaar call term_sendkeys(buf, ":set noruler\n") 106*5c504f68SBram Moolenaar call term_sendkeys(buf, ":source! Xscript.vim\n") 107*5c504f68SBram Moolenaar call term_wait(buf) 108*5c504f68SBram Moolenaar call WaitForAssert({-> assert_match('E22: Scripts nested too deep\s*', term_getline(buf, 6))}) 109*5c504f68SBram Moolenaar call delete('Xscript.vim') 110*5c504f68SBram Moolenaar call StopVimInTerminal(buf) 111*5c504f68SBram Moolenaarendfunc 112*5c504f68SBram Moolenaar 1139f6277bdSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 114