blob: 8f8e9632a1b0ebb482f08e60afd0fd5dee310d15 [file] [log] [blame]
Bram Moolenaar2b618522019-01-12 13:26:03 +01001" Tests for the :source command.
2
Bram Moolenaar5c504f62021-04-01 13:39:51 +02003source check.vim
4source view_util.vim
5
Bram Moolenaar2b618522019-01-12 13:26:03 +01006func Test_source_autocmd()
7 call writefile([
8 \ 'let did_source = 1',
9 \ ], 'Xsourced')
10 au SourcePre *source* let did_source_pre = 1
11 au SourcePost *source* let did_source_post = 1
12
13 source Xsourced
14
15 call assert_equal(g:did_source, 1)
16 call assert_equal(g:did_source_pre, 1)
17 call assert_equal(g:did_source_post, 1)
18
19 call delete('Xsourced')
20 au! SourcePre
21 au! SourcePost
22 unlet g:did_source
23 unlet g:did_source_pre
24 unlet g:did_source_post
25endfunc
26
27func Test_source_cmd()
28 au SourceCmd *source* let did_source = expand('<afile>')
29 au SourcePre *source* let did_source_pre = 2
30 au SourcePost *source* let did_source_post = 2
31
32 source Xsourced
33
34 call assert_equal(g:did_source, 'Xsourced')
35 call assert_false(exists('g:did_source_pre'))
36 call assert_equal(g:did_source_post, 2)
37
38 au! SourceCmd
39 au! SourcePre
40 au! SourcePost
41endfunc
Bram Moolenaar53575522019-05-22 22:38:25 +020042
43func Test_source_sandbox()
44 new
45 call writefile(["Ohello\<Esc>"], 'Xsourcehello')
46 source! Xsourcehello | echo
47 call assert_equal('hello', getline(1))
48 call assert_fails('sandbox source! Xsourcehello', 'E48:')
49 bwipe!
Bram Moolenaarddd33082019-06-03 23:07:25 +020050 call delete('Xsourcehello')
Bram Moolenaar53575522019-05-22 22:38:25 +020051endfunc
Bram Moolenaarca33eb22020-01-19 20:18:09 +010052
53" When deleting a file and immediately creating a new one the inode may be
54" recycled. Vim should not recognize it as the same script.
55func Test_different_script()
Bram Moolenaarca33eb22020-01-19 20:18:09 +010056 call writefile(['let s:var = "asdf"'], 'XoneScript')
57 source XoneScript
58 call delete('XoneScript')
59 call writefile(['let g:var = s:var'], 'XtwoScript')
60 call assert_fails('source XtwoScript', 'E121:')
61 call delete('XtwoScript')
62endfunc
Bram Moolenaar9f6277b2020-02-11 22:04:02 +010063
64" When sourcing a vim script, shebang should be ignored.
65func Test_source_ignore_shebang()
66 call writefile(['#!./xyzabc', 'let g:val=369'], 'Xfile.vim')
67 source Xfile.vim
68 call assert_equal(g:val, 369)
69 call delete('Xfile.vim')
70endfunc
71
Dominique Pelleaf4a61a2021-12-27 17:21:41 +000072" Test for expanding <sfile> in an autocmd and for <slnum> and <sflnum>
Bram Moolenaarbc2b71d2020-02-17 21:33:30 +010073func Test_source_autocmd_sfile()
74 let code =<< trim [CODE]
75 let g:SfileName = ''
76 augroup sfiletest
77 au!
78 autocmd User UserAutoCmd let g:Sfile = '<sfile>:t'
79 augroup END
80 doautocmd User UserAutoCmd
81 let g:Slnum = expand('<slnum>')
82 let g:Sflnum = expand('<sflnum>')
83 augroup! sfiletest
84 [CODE]
85 call writefile(code, 'Xscript.vim')
86 source Xscript.vim
87 call assert_equal('Xscript.vim', g:Sfile)
88 call assert_equal('7', g:Slnum)
89 call assert_equal('8', g:Sflnum)
90 call delete('Xscript.vim')
91endfunc
92
Bram Moolenaar476a6132020-04-08 19:48:56 +020093func Test_source_error()
94 call assert_fails('scriptencoding utf-8', 'E167:')
95 call assert_fails('finish', 'E168:')
96 call assert_fails('scriptversion 2', 'E984:')
97endfunc
98
Bram Moolenaar5c504f62021-04-01 13:39:51 +020099" Test for sourcing a script recursively
100func Test_nested_script()
101 CheckRunVimInTerminal
102 call writefile([':source! Xscript.vim', ''], 'Xscript.vim')
103 let buf = RunVimInTerminal('', {'rows': 6})
104 call term_wait(buf)
105 call term_sendkeys(buf, ":set noruler\n")
106 call term_sendkeys(buf, ":source! Xscript.vim\n")
107 call term_wait(buf)
108 call WaitForAssert({-> assert_match('E22: Scripts nested too deep\s*', term_getline(buf, 6))})
109 call delete('Xscript.vim')
110 call StopVimInTerminal(buf)
111endfunc
112
Bram Moolenaar9f6277b2020-02-11 22:04:02 +0100113" vim: shiftwidth=2 sts=2 expandtab