xref: /vim-8.2.3635/src/testdir/test_source.vim (revision 5c504f68)
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