diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/functional/api/vim_spec.lua | 30 | ||||
-rw-r--r-- | test/functional/core/exit_spec.lua | 18 | ||||
-rw-r--r-- | test/functional/editor/mark_spec.lua | 27 | ||||
-rw-r--r-- | test/functional/ex_cmds/source_spec.lua | 20 | ||||
-rw-r--r-- | test/functional/ex_cmds/verbose_spec.lua | 2 | ||||
-rw-r--r-- | test/functional/legacy/assert_spec.lua | 8 | ||||
-rw-r--r-- | test/functional/lua/commands_spec.lua | 3 | ||||
-rw-r--r-- | test/functional/lua/vim_spec.lua | 2 | ||||
-rw-r--r-- | test/old/testdir/test_source.vim | 550 |
9 files changed, 622 insertions, 38 deletions
diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua index 3aa9ba49d5..b5fcd88f71 100644 --- a/test/functional/api/vim_spec.lua +++ b/test/functional/api/vim_spec.lua @@ -140,7 +140,7 @@ describe('API', function() it(':verbose set {option}?', function() api.nvim_exec2('set nowrap', { output = false }) eq( - { output = 'nowrap\n\tLast set from anonymous :source' }, + { output = 'nowrap\n\tLast set from anonymous :source line 1' }, api.nvim_exec2('verbose set wrap?', { output = true }) ) @@ -153,7 +153,7 @@ describe('API', function() { output = false } ) eq( - { output = 'nowrap\n\tLast set from anonymous :source (script id 1)' }, + { output = 'nowrap\n\tLast set from anonymous :source (script id 1) line 2' }, api.nvim_exec2('verbose set wrap?', { output = true }) ) end) @@ -296,16 +296,21 @@ describe('API', function() eq('ñxx', api.nvim_get_current_line()) end) + it('can use :finish', function() + api.nvim_exec2('let g:var = 123\nfinish\nlet g:var = 456', {}) + eq(123, api.nvim_get_var('var')) + end) + it('execution error', function() eq( - 'nvim_exec2(): Vim:E492: Not an editor command: bogus_command', + 'nvim_exec2(), line 1: Vim:E492: Not an editor command: bogus_command', pcall_err(request, 'nvim_exec2', 'bogus_command', {}) ) eq('', api.nvim_eval('v:errmsg')) -- v:errmsg was not updated. eq('', eval('v:exception')) eq( - 'nvim_exec2(): Vim(buffer):E86: Buffer 23487 does not exist', + 'nvim_exec2(), line 1: Vim(buffer):E86: Buffer 23487 does not exist', pcall_err(request, 'nvim_exec2', 'buffer 23487', {}) ) eq('', eval('v:errmsg')) -- v:errmsg was not updated. @@ -338,17 +343,28 @@ describe('API', function() write_file(sourcing_fname, 'call nvim_exec2("source ' .. fname .. '", {"output": v:false})\n') api.nvim_exec2('set verbose=2', { output = false }) local traceback_output = dedent([[ - line 0: sourcing "%s" - line 0: sourcing "%s" + sourcing "nvim_exec2()" + line 1: sourcing "nvim_exec2() called at nvim_exec2():1" + line 1: sourcing "%s" + line 1: sourcing "nvim_exec2() called at %s:1" + line 1: sourcing "%s" hello finished sourcing %s continuing in nvim_exec2() called at %s:1 + finished sourcing nvim_exec2() called at %s:1 + continuing in %s finished sourcing %s - continuing in nvim_exec2() called at nvim_exec2():0]]):format( + continuing in nvim_exec2() called at nvim_exec2():1 + finished sourcing nvim_exec2() called at nvim_exec2():1 + continuing in nvim_exec2() + finished sourcing nvim_exec2()]]):format( + sourcing_fname, sourcing_fname, fname, fname, sourcing_fname, + sourcing_fname, + sourcing_fname, sourcing_fname ) eq( diff --git a/test/functional/core/exit_spec.lua b/test/functional/core/exit_spec.lua index 65f6bc28a6..aafad4c8a5 100644 --- a/test/functional/core/exit_spec.lua +++ b/test/functional/core/exit_spec.lua @@ -97,14 +97,26 @@ describe(':cquit', function() end) it('exits with redir msg for multiple exit codes after :cquit 1 2', function() - test_cq('cquit 1 2', nil, 'nvim_exec2(): Vim(cquit):E488: Trailing characters: 2: cquit 1 2') + test_cq( + 'cquit 1 2', + nil, + 'nvim_exec2(), line 1: Vim(cquit):E488: Trailing characters: 2: cquit 1 2' + ) end) it('exits with redir msg for non-number exit code after :cquit X', function() - test_cq('cquit X', nil, 'nvim_exec2(): Vim(cquit):E488: Trailing characters: X: cquit X') + test_cq( + 'cquit X', + nil, + 'nvim_exec2(), line 1: Vim(cquit):E488: Trailing characters: X: cquit X' + ) end) it('exits with redir msg for negative exit code after :cquit -1', function() - test_cq('cquit -1', nil, 'nvim_exec2(): Vim(cquit):E488: Trailing characters: -1: cquit -1') + test_cq( + 'cquit -1', + nil, + 'nvim_exec2(), line 1: Vim(cquit):E488: Trailing characters: -1: cquit -1' + ) end) end) diff --git a/test/functional/editor/mark_spec.lua b/test/functional/editor/mark_spec.lua index 08f90b088d..91bd2f4bbd 100644 --- a/test/functional/editor/mark_spec.lua +++ b/test/functional/editor/mark_spec.lua @@ -42,59 +42,62 @@ describe('named marks', function() it('errors when set out of range with :mark', function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, '1000mark x') - eq('nvim_exec2(): Vim(mark):E16: Invalid range: 1000mark x', err) + eq('nvim_exec2(), line 1: Vim(mark):E16: Invalid range: 1000mark x', err) end) it('errors when set out of range with :k', function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, '1000kx') - eq('nvim_exec2(): Vim(k):E16: Invalid range: 1000kx', err) + eq('nvim_exec2(), line 1: Vim(k):E16: Invalid range: 1000kx', err) end) it('errors on unknown mark name with :mark', function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, 'mark #') - eq('nvim_exec2(): Vim(mark):E191: Argument must be a letter or forward/backward quote', err) + eq( + 'nvim_exec2(), line 1: Vim(mark):E191: Argument must be a letter or forward/backward quote', + err + ) end) it("errors on unknown mark name with '", function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, "normal! '#") - eq('nvim_exec2(): Vim(normal):E78: Unknown mark', err) + eq('nvim_exec2(), line 1: Vim(normal):E78: Unknown mark', err) end) it('errors on unknown mark name with `', function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, 'normal! `#') - eq('nvim_exec2(): Vim(normal):E78: Unknown mark', err) + eq('nvim_exec2(), line 1: Vim(normal):E78: Unknown mark', err) end) it("errors when moving to a mark that is not set with '", function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, "normal! 'z") - eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) + eq('nvim_exec2(), line 1: Vim(normal):E20: Mark not set', err) err = pcall_err(n.exec_capture, "normal! '.") - eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) + eq('nvim_exec2(), line 1: Vim(normal):E20: Mark not set', err) end) it('errors when moving to a mark that is not set with `', function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, 'normal! `z') - eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) + eq('nvim_exec2(), line 1: Vim(normal):E20: Mark not set', err) err = pcall_err(n.exec_capture, 'normal! `>') - eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) + eq('nvim_exec2(), line 1: Vim(normal):E20: Mark not set', err) end) it("errors when moving to a global mark that is not set with '", function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, "normal! 'Z") - eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) + eq('nvim_exec2(), line 1: Vim(normal):E20: Mark not set', err) end) it('errors when moving to a global mark that is not set with `', function() command('edit ' .. file1) local err = pcall_err(n.exec_capture, 'normal! `Z') - eq('nvim_exec2(): Vim(normal):E20: Mark not set', err) + eq('nvim_exec2(), line 1: Vim(normal):E20: Mark not set', err) end) it("can move to them using '", function() @@ -169,7 +172,7 @@ describe('named marks', function() command('next') command('bw! ' .. file1) local err = pcall_err(n.exec_capture, "normal! 'A") - eq('nvim_exec2(): Vim(normal):E92: Buffer 1 not found', err) + eq('nvim_exec2(), line 1: Vim(normal):E92: Buffer 1 not found', err) os.remove(file1) end) diff --git a/test/functional/ex_cmds/source_spec.lua b/test/functional/ex_cmds/source_spec.lua index 8a15aa04d1..4548e51624 100644 --- a/test/functional/ex_cmds/source_spec.lua +++ b/test/functional/ex_cmds/source_spec.lua @@ -101,16 +101,14 @@ describe(':source', function() \ k: "v" "\ (o_o) \ } - let c = expand("<SID>")->empty() + let c = expand("<SID>") let s:s = 0zbeef.cafe let d = s:s]]) command('source') eq('2', exec_capture('echo a')) eq("{'k': 'v'}", exec_capture('echo b')) - - -- Script items are created only on script var access - eq('1', exec_capture('echo c')) + eq('<SNR>1_', exec_capture('echo c')) eq('0zBEEFCAFE', exec_capture('echo d')) exec('set cpoptions+=C') @@ -136,6 +134,10 @@ describe(':source', function() feed_command(':source') eq('3', exec_capture('echo a')) + -- Source last line only + feed_command(':$source') + eq('Vim(echo):E117: Unknown function: s:C', exc_exec('echo D()')) + -- Source from 2nd line to end of file feed('ggjVG') feed_command(':source') @@ -143,9 +145,9 @@ describe(':source', function() eq("{'K': 'V'}", exec_capture('echo b')) eq('<SNR>1_C()', exec_capture('echo D()')) - -- Source last line only + -- Source last line after the lines that define s:C() have been sourced feed_command(':$source') - eq('Vim(echo):E117: Unknown function: s:C', exc_exec('echo D()')) + eq('<SNR>1_C()', exec_capture('echo D()')) exec('set cpoptions+=C') eq("Vim(let):E723: Missing end of Dictionary '}': ", exc_exec("'<,'>source")) @@ -248,9 +250,9 @@ describe(':source', function() eq(12, eval('g:c')) eq(' \\ 1\n "\\ 2', exec_lua('return _G.a')) - eq(':source (no file)', api.nvim_get_var('sfile_value')) - eq(':source (no file)', api.nvim_get_var('stack_value')) - eq(':source (no file)', api.nvim_get_var('script_value')) + eq(':source buffer=1', api.nvim_get_var('sfile_value')) + eq(':source buffer=1', api.nvim_get_var('stack_value')) + eq(':source buffer=1', api.nvim_get_var('script_value')) end) end diff --git a/test/functional/ex_cmds/verbose_spec.lua b/test/functional/ex_cmds/verbose_spec.lua index 0187baf4ac..faddab1e42 100644 --- a/test/functional/ex_cmds/verbose_spec.lua +++ b/test/functional/ex_cmds/verbose_spec.lua @@ -256,7 +256,7 @@ TestHL2 xxx guibg=Green local result = exec_capture(':verbose set tw?') local loc = get_last_set_location(40) if loc == 'Lua (run Nvim with -V1 for more details)' then - loc = 'anonymous :source (script id 1)' + loc = 'anonymous :source (script id 1) line 5' end eq( string.format( diff --git a/test/functional/legacy/assert_spec.lua b/test/functional/legacy/assert_spec.lua index 47eea5e7d5..9863d146b1 100644 --- a/test/functional/legacy/assert_spec.lua +++ b/test/functional/legacy/assert_spec.lua @@ -148,10 +148,10 @@ describe('assert function:', function() call assert_true('', 'file two') ]]) expected_errors({ - 'nvim_exec2(): equal assertion failed: Expected 1 but got 100', - "nvim_exec2(): true assertion failed: Expected False but got 'true'", - "nvim_exec2(): false assertion failed: Expected True but got 'false'", - "nvim_exec2(): file two: Expected True but got ''", + 'nvim_exec2() line 1: equal assertion failed: Expected 1 but got 100', + "nvim_exec2() line 2: true assertion failed: Expected False but got 'true'", + "nvim_exec2() line 3: false assertion failed: Expected True but got 'false'", + "nvim_exec2() line 1: file two: Expected True but got ''", }) end) end) diff --git a/test/functional/lua/commands_spec.lua b/test/functional/lua/commands_spec.lua index 1fd01cfd5a..fb55611198 100644 --- a/test/functional/lua/commands_spec.lua +++ b/test/functional/lua/commands_spec.lua @@ -207,7 +207,8 @@ describe(':lua', function() -- ":{range}lua" fails on invalid Lua code. eq( - [[:{range}lua: Vim(lua):E5107: Error loading lua [string ":{range}lua"]:0: '=' expected near '<eof>']], + [[:{range}lua buffer=1: Vim(lua):E5107: Error loading lua ]] + .. [[[string ":{range}lua buffer=1"]:0: '=' expected near '<eof>']], pcall_err(command, '1lua') ) diff --git a/test/functional/lua/vim_spec.lua b/test/functional/lua/vim_spec.lua index 8e22644339..c31ce3c678 100644 --- a/test/functional/lua/vim_spec.lua +++ b/test/functional/lua/vim_spec.lua @@ -3956,7 +3956,7 @@ stack traceback: it('failure modes', function() matches( - 'nvim_exec2%(%): Vim:E492: Not an editor command: fooooo', + 'nvim_exec2%(%), line 1: Vim:E492: Not an editor command: fooooo', pcall_err(exec_lua, [[vim.api.nvim_win_call(0, function() vim.cmd 'fooooo' end)]]) ) eq( diff --git a/test/old/testdir/test_source.vim b/test/old/testdir/test_source.vim index 01c08b183c..10b00d3784 100644 --- a/test/old/testdir/test_source.vim +++ b/test/old/testdir/test_source.vim @@ -92,6 +92,12 @@ func Test_source_error() call assert_fails('scriptencoding utf-8', 'E167:') call assert_fails('finish', 'E168:') " call assert_fails('scriptversion 2', 'E984:') + call assert_fails('source!', 'E471:') + new + call setline(1, ['', '', '', '']) + call assert_fails('1,3source Xscript.vim', 'E481:') + call assert_fails('1,3source! Xscript.vim', 'E481:') + bw! endfunc " Test for sourcing a script recursively @@ -108,4 +114,548 @@ func Test_nested_script() call StopVimInTerminal(buf) endfunc +" Test for sourcing a script from the current buffer +func Test_source_buffer() + new + " Source a simple script + let lines =<< trim END + let a = "Test" + let b = 20 + + let c = [1.1] + END + call setline(1, lines) + source + call assert_equal(['Test', 20, [1.1]], [g:a, g:b, g:c]) + + " Source a range of lines in the current buffer + %d _ + let lines =<< trim END + let a = 10 + let a += 20 + let a += 30 + let a += 40 + END + call setline(1, lines) + .source + call assert_equal(10, g:a) + 3source + call assert_equal(40, g:a) + 2,3source + call assert_equal(90, g:a) + + " Make sure the script line number is correct when sourcing a range of + " lines. + %d _ + let lines =<< trim END + Line 1 + Line 2 + func Xtestfunc() + return expand("<sflnum>") + endfunc + Line 3 + Line 4 + END + call setline(1, lines) + 3,5source + call assert_equal('4', Xtestfunc()) + delfunc Xtestfunc + + " Source a script with line continuation lines + %d _ + let lines =<< trim END + let m = [ + \ 1, + \ 2, + \ ] + call add(m, 3) + END + call setline(1, lines) + source + call assert_equal([1, 2, 3], g:m) + " Source a script with line continuation lines and a comment + %d _ + let lines =<< trim END + let m = [ + "\ first entry + \ 'a', + "\ second entry + \ 'b', + \ ] + " third entry + call add(m, 'c') + END + call setline(1, lines) + source + call assert_equal(['a', 'b', 'c'], g:m) + " Source an incomplete line continuation line + %d _ + let lines =<< trim END + let k = [ + \ + END + call setline(1, lines) + call assert_fails('source', 'E697:') + " Source a function with a for loop + %d _ + let lines =<< trim END + let m = [] + " test function + func! Xtest() + for i in range(5, 7) + call add(g:m, i) + endfor + endfunc + call Xtest() + END + call setline(1, lines) + source + call assert_equal([5, 6, 7], g:m) + " Source an empty buffer + %d _ + source + + " test for script local functions and variables + let lines =<< trim END + let s:var1 = 10 + func s:F1() + let s:var1 += 1 + return s:var1 + endfunc + func s:F2() + endfunc + let g:ScriptID = expand("<SID>") + END + call setline(1, lines) + source + call assert_true(g:ScriptID != '') + call assert_true(exists('*' .. g:ScriptID .. 'F1')) + call assert_true(exists('*' .. g:ScriptID .. 'F2')) + call assert_equal(11, call(g:ScriptID .. 'F1', [])) + + " the same script ID should be used even if the buffer is sourced more than + " once + %d _ + let lines =<< trim END + let g:ScriptID = expand("<SID>") + let g:Count += 1 + END + call setline(1, lines) + let g:Count = 0 + source + call assert_true(g:ScriptID != '') + let scid = g:ScriptID + source + call assert_equal(scid, g:ScriptID) + call assert_equal(2, g:Count) + source + call assert_equal(scid, g:ScriptID) + call assert_equal(3, g:Count) + + " test for the script line number + %d _ + let lines =<< trim END + " comment + let g:Slnum1 = expand("<slnum>") + let i = 1 + + \ 2 + + "\ comment + \ 3 + let g:Slnum2 = expand("<slnum>") + END + call setline(1, lines) + source + call assert_equal('2', g:Slnum1) + call assert_equal('7', g:Slnum2) + + " test for retaining the same script number across source calls + let lines =<< trim END + let g:ScriptID1 = expand("<SID>") + let g:Slnum1 = expand("<slnum>") + let l =<< trim END + let g:Slnum2 = expand("<slnum>") + let g:ScriptID2 = expand("<SID>") + END + new + call setline(1, l) + source + bw! + let g:ScriptID3 = expand("<SID>") + let g:Slnum3 = expand("<slnum>") + END + call writefile(lines, 'Xscript') + source Xscript + call assert_true(g:ScriptID1 != g:ScriptID2) + call assert_equal(g:ScriptID1, g:ScriptID3) + call assert_equal('2', g:Slnum1) + call assert_equal('1', g:Slnum2) + call assert_equal('12', g:Slnum3) + call delete('Xscript') + + " test for sourcing a heredoc + %d _ + let lines =<< trim END + let a = 1 + let heredoc =<< trim DATA + red + green + blue + DATA + let b = 2 + END + call setline(1, lines) + source + call assert_equal(['red', ' green', 'blue'], g:heredoc) + + " test for a while and for statement + %d _ + let lines =<< trim END + let a = 0 + let b = 1 + while b <= 10 + let a += 10 + let b += 1 + endwhile + for i in range(5) + let a += 10 + endfor + END + call setline(1, lines) + source + call assert_equal(150, g:a) + + " test for sourcing the same buffer multiple times after changing a function + %d _ + let lines =<< trim END + func Xtestfunc() + return "one" + endfunc + END + call setline(1, lines) + source + call assert_equal("one", Xtestfunc()) + call setline(2, ' return "two"') + source + call assert_equal("two", Xtestfunc()) + call setline(2, ' return "three"') + source + call assert_equal("three", Xtestfunc()) + delfunc Xtestfunc + + " test for using try/catch + %d _ + let lines =<< trim END + let Trace = '1' + try + let a1 = b1 + catch + let Trace ..= '2' + finally + let Trace ..= '3' + endtry + END + call setline(1, lines) + source + call assert_equal("123", g:Trace) + + " test with the finish command + %d _ + let lines =<< trim END + let g:Color = 'blue' + finish + let g:Color = 'green' + END + call setline(1, lines) + source + call assert_equal('blue', g:Color) + + " Test for the SourcePre and SourcePost autocmds + augroup Xtest + au! + au SourcePre * let g:XsourcePre=4 + \ | let g:XsourcePreFile = expand("<afile>") + au SourcePost * let g:XsourcePost=6 + \ | let g:XsourcePostFile = expand("<afile>") + augroup END + %d _ + let lines =<< trim END + let a = 1 + END + call setline(1, lines) + source + call assert_equal(4, g:XsourcePre) + call assert_equal(6, g:XsourcePost) + call assert_equal(':source buffer=' .. bufnr(), g:XsourcePreFile) + call assert_equal(':source buffer=' .. bufnr(), g:XsourcePostFile) + augroup Xtest + au! + augroup END + augroup! Xtest + + %bw! +endfunc + +" Test for sourcing a Vim9 script from the current buffer +func Test_source_buffer_vim9() + throw 'Skipped: Vim9 script is N/A' + new + + " test for sourcing a Vim9 script + %d _ + let lines =<< trim END + vim9script + + # check dict + var x: number = 10 + def g:Xtestfunc(): number + return x + enddef + END + call setline(1, lines) + source + call assert_equal(10, Xtestfunc()) + + " test for sourcing a vim9 script with line continuation + %d _ + let lines =<< trim END + vim9script + + g:Str1 = "hello " + .. "world" + .. ", how are you?" + g:Colors = [ + 'red', + # comment + 'blue' + ] + g:Dict = { + a: 22, + # comment + b: 33 + } + + # calling a function with line continuation + def Sum(...values: list<number>): number + var sum: number = 0 + for v in values + sum += v + endfor + return sum + enddef + g:Total1 = Sum(10, + 20, + 30) + + var i: number = 0 + while i < 10 + # while loop + i += + 1 + endwhile + g:Count1 = i + + # for loop + g:Count2 = 0 + for j in range(10, 20) + g:Count2 += + i + endfor + + g:Total2 = 10 + + 20 - + 5 + + g:Result1 = g:Total2 > 1 + ? 'red' + : 'blue' + + g:Str2 = 'x' + ->repeat(10) + ->trim() + ->strpart(4) + + g:Result2 = g:Dict + .a + + augroup Test + au! + au BufNewFile Xfile g:readFile = 1 + | g:readExtra = 2 + augroup END + g:readFile = 0 + g:readExtra = 0 + new Xfile + bwipe! + augroup Test + au! + augroup END + END + call setline(1, lines) + source + call assert_equal("hello world, how are you?", g:Str1) + call assert_equal(['red', 'blue'], g:Colors) + call assert_equal(#{a: 22, b: 33}, g:Dict) + call assert_equal(60, g:Total1) + call assert_equal(10, g:Count1) + call assert_equal(110, g:Count2) + call assert_equal(25, g:Total2) + call assert_equal('red', g:Result1) + call assert_equal('xxxxxx', g:Str2) + call assert_equal(22, g:Result2) + call assert_equal(1, g:readFile) + call assert_equal(2, g:readExtra) + + " test for sourcing the same buffer multiple times after changing a function + %d _ + let lines =<< trim END + vim9script + def g:Xtestfunc(): string + return "one" + enddef + END + call setline(1, lines) + source + call assert_equal("one", Xtestfunc()) + call setline(3, ' return "two"') + source + call assert_equal("two", Xtestfunc()) + call setline(3, ' return "three"') + source + call assert_equal("three", Xtestfunc()) + delfunc Xtestfunc + + " Test for sourcing a range of lines. Make sure the script line number is + " correct. + %d _ + let lines =<< trim END + Line 1 + Line 2 + vim9script + def g:Xtestfunc(): string + return expand("<sflnum>") + enddef + Line 3 + Line 4 + END + call setline(1, lines) + 3,6source + call assert_equal('5', Xtestfunc()) + delfunc Xtestfunc + + " test for sourcing a heredoc + %d _ + let lines =<< trim END + vim9script + var a = 1 + g:heredoc =<< trim DATA + red + green + blue + DATA + var b = 2 + END + call setline(1, lines) + source + call assert_equal(['red', ' green', 'blue'], g:heredoc) + + " test for using the :vim9cmd modifier + %d _ + let lines =<< trim END + first line + g:Math = { + pi: 3.12, + e: 2.71828 + } + g:Editors = [ + 'vim', + # comment + 'nano' + ] + last line + END + call setline(1, lines) + vim9cmd :2,10source + call assert_equal(#{pi: 3.12, e: 2.71828}, g:Math) + call assert_equal(['vim', 'nano'], g:Editors) + + " test for using try/catch + %d _ + let lines =<< trim END + vim9script + g:Trace = '1' + try + a1 = b1 + catch + g:Trace ..= '2' + finally + g:Trace ..= '3' + endtry + END + call setline(1, lines) + source + call assert_equal('123', g:Trace) + + " test with the finish command + %d _ + let lines =<< trim END + vim9script + g:Color = 'red' + finish + g:Color = 'blue' + END + call setline(1, lines) + source + call assert_equal('red', g:Color) + + " test for ++clear argument to clear all the functions/variables + %d _ + let lines =<< trim END + g:ScriptVarFound = exists("color") + g:MyFuncFound = exists('*Myfunc') + if g:MyFuncFound + finish + endif + var color = 'blue' + def Myfunc() + enddef + END + call setline(1, lines) + vim9cmd source + call assert_false(g:MyFuncFound) + call assert_false(g:ScriptVarFound) + vim9cmd source + call assert_true(g:MyFuncFound) + call assert_true(g:ScriptVarFound) + vim9cmd source ++clear + call assert_false(g:MyFuncFound) + call assert_false(g:ScriptVarFound) + vim9cmd source ++clear + call assert_false(g:MyFuncFound) + call assert_false(g:ScriptVarFound) + call assert_fails('vim9cmd source ++clearx', 'E475:') + call assert_fails('vim9cmd source ++abcde', 'E484:') + + %bw! +endfunc + +func Test_source_buffer_long_line() + " This was reading past the end of the line. + new + norm300gr0 + so + bwipe! + + let lines =<< trim END + new + norm 10a0000000000ø00000000000 + norm i0000000000000000000 + silent! so + END + call writefile(lines, 'Xtest.vim') + source Xtest.vim + bwipe! + call delete('Xtest.vim') +endfunc + + " vim: shiftwidth=2 sts=2 expandtab |