xref: /vim-8.2.3635/src/testdir/test_excmd.vim (revision 08d7b1c8)
194f82cbaSBram Moolenaar" Tests for various Ex commands.
294f82cbaSBram Moolenaar
3e20b9eceSBram Moolenaarsource check.vim
4e20b9eceSBram Moolenaar
594f82cbaSBram Moolenaarfunc Test_ex_delete()
694f82cbaSBram Moolenaar  new
794f82cbaSBram Moolenaar  call setline(1, ['a', 'b', 'c'])
894f82cbaSBram Moolenaar  2
994f82cbaSBram Moolenaar  " :dl is :delete with the "l" flag, not :dlist
1094f82cbaSBram Moolenaar  .dl
1194f82cbaSBram Moolenaar  call assert_equal(['a', 'c'], getline(1, 2))
1294f82cbaSBram Moolenaarendfunc
130acae7acSBram Moolenaar
140acae7acSBram Moolenaarfunc Test_range_error()
150acae7acSBram Moolenaar  call assert_fails(':.echo 1', 'E481:')
160acae7acSBram Moolenaar  call assert_fails(':$echo 1', 'E481:')
170acae7acSBram Moolenaar  call assert_fails(':1,2echo 1', 'E481:')
180acae7acSBram Moolenaar  call assert_fails(':+1echo 1', 'E481:')
190acae7acSBram Moolenaar  call assert_fails(':/1/echo 1', 'E481:')
200acae7acSBram Moolenaar  call assert_fails(':\/echo 1', 'E481:')
210acae7acSBram Moolenaar  normal vv
220acae7acSBram Moolenaar  call assert_fails(":'<,'>echo 1", 'E481:')
239f6277bdSBram Moolenaar  call assert_fails(":\\xcenter", 'E10:')
240acae7acSBram Moolenaarendfunc
2552410575SBram Moolenaar
2652410575SBram Moolenaarfunc Test_buffers_lastused()
2752410575SBram Moolenaar  call test_settime(localtime() - 2000) " middle
2852410575SBram Moolenaar  edit bufa
2952410575SBram Moolenaar  enew
3052410575SBram Moolenaar  call test_settime(localtime() - 10)   " newest
3152410575SBram Moolenaar  edit bufb
3252410575SBram Moolenaar  enew
3352410575SBram Moolenaar  call test_settime(1550010000)	        " oldest
3452410575SBram Moolenaar  edit bufc
3552410575SBram Moolenaar  enew
3652410575SBram Moolenaar  call test_settime(0)
3752410575SBram Moolenaar  enew
3852410575SBram Moolenaar
3952410575SBram Moolenaar  let ls = split(execute('buffers t', 'silent!'), '\n')
4052410575SBram Moolenaar  let bufs = ls->map({i,v->split(v, '"\s*')[1:2]})
4152410575SBram Moolenaar  call assert_equal(['bufb', 'bufa', 'bufc'], bufs[1:]->map({i,v->v[0]}))
4252410575SBram Moolenaar  call assert_match('1[0-3] seconds ago', bufs[1][1])
4352410575SBram Moolenaar  call assert_match('\d\d:\d\d:\d\d', bufs[2][1])
4452410575SBram Moolenaar  call assert_match('2019/02/1\d \d\d:\d\d:00', bufs[3][1])
4552410575SBram Moolenaar
4652410575SBram Moolenaar  bwipeout bufa
4752410575SBram Moolenaar  bwipeout bufb
4852410575SBram Moolenaar  bwipeout bufc
4952410575SBram Moolenaarendfunc
505d98dc2aSBram Moolenaar
515d98dc2aSBram Moolenaar" Test for the :copy command
525d98dc2aSBram Moolenaarfunc Test_copy()
535d98dc2aSBram Moolenaar  new
545d98dc2aSBram Moolenaar
555d98dc2aSBram Moolenaar  call setline(1, ['L1', 'L2', 'L3', 'L4'])
565d98dc2aSBram Moolenaar  " copy lines in a range to inside the range
575d98dc2aSBram Moolenaar  1,3copy 2
585d98dc2aSBram Moolenaar  call assert_equal(['L1', 'L2', 'L1', 'L2', 'L3', 'L3', 'L4'], getline(1, 7))
595d98dc2aSBram Moolenaar
601671f448SBram Moolenaar  " Specifying a count before using : to run an ex-command
611671f448SBram Moolenaar  exe "normal! gg4:yank\<CR>"
621671f448SBram Moolenaar  call assert_equal("L1\nL2\nL1\nL2\n", @")
631671f448SBram Moolenaar
645d98dc2aSBram Moolenaar  close!
655d98dc2aSBram Moolenaarendfunc
665d98dc2aSBram Moolenaar
675d98dc2aSBram Moolenaar" Test for the :file command
685d98dc2aSBram Moolenaarfunc Test_file_cmd()
695d98dc2aSBram Moolenaar  call assert_fails('3file', 'E474:')
705d98dc2aSBram Moolenaar  call assert_fails('0,0file', 'E474:')
715d98dc2aSBram Moolenaar  call assert_fails('0file abc', 'E474:')
7259b26236SYegappan Lakshmanan  if !has('win32')
7359b26236SYegappan Lakshmanan    " Change the name of the buffer to the same name
7459b26236SYegappan Lakshmanan    new Xfile1
7559b26236SYegappan Lakshmanan    file Xfile1
7659b26236SYegappan Lakshmanan    call assert_equal('Xfile1', @%)
7759b26236SYegappan Lakshmanan    call assert_equal('Xfile1', @#)
7859b26236SYegappan Lakshmanan    bw!
7959b26236SYegappan Lakshmanan  endif
805d98dc2aSBram Moolenaarendfunc
815d98dc2aSBram Moolenaar
825d98dc2aSBram Moolenaar" Test for the :drop command
835d98dc2aSBram Moolenaarfunc Test_drop_cmd()
845d98dc2aSBram Moolenaar  call writefile(['L1', 'L2'], 'Xfile')
855d98dc2aSBram Moolenaar  enew | only
865d98dc2aSBram Moolenaar  drop Xfile
875d98dc2aSBram Moolenaar  call assert_equal('L2', getline(2))
885d98dc2aSBram Moolenaar  " Test for switching to an existing window
895d98dc2aSBram Moolenaar  below new
905d98dc2aSBram Moolenaar  drop Xfile
915d98dc2aSBram Moolenaar  call assert_equal(1, winnr())
925d98dc2aSBram Moolenaar  " Test for splitting the current window
935d98dc2aSBram Moolenaar  enew | only
945d98dc2aSBram Moolenaar  set modified
955d98dc2aSBram Moolenaar  drop Xfile
965d98dc2aSBram Moolenaar  call assert_equal(2, winnr('$'))
975d98dc2aSBram Moolenaar  " Check for setting the argument list
985d98dc2aSBram Moolenaar  call assert_equal(['Xfile'], argv())
995d98dc2aSBram Moolenaar  enew | only!
1005d98dc2aSBram Moolenaar  call delete('Xfile')
1015d98dc2aSBram Moolenaarendfunc
1025d98dc2aSBram Moolenaar
1035d98dc2aSBram Moolenaar" Test for the :append command
1045d98dc2aSBram Moolenaarfunc Test_append_cmd()
1055d98dc2aSBram Moolenaar  new
1065d98dc2aSBram Moolenaar  call setline(1, ['  L1'])
1075d98dc2aSBram Moolenaar  call feedkeys(":append\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
1085d98dc2aSBram Moolenaar  call assert_equal(['  L1', '  L2', '  L3'], getline(1, '$'))
1095d98dc2aSBram Moolenaar  %delete _
1105d98dc2aSBram Moolenaar  " append after a specific line
1115d98dc2aSBram Moolenaar  call setline(1, ['  L1', '  L2', '  L3'])
1125d98dc2aSBram Moolenaar  call feedkeys(":2append\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
1135d98dc2aSBram Moolenaar  call assert_equal(['  L1', '  L2', '  L4', '  L5', '  L3'], getline(1, '$'))
1145d98dc2aSBram Moolenaar  %delete _
1155d98dc2aSBram Moolenaar  " append with toggling 'autoindent'
1165d98dc2aSBram Moolenaar  call setline(1, ['  L1'])
1175d98dc2aSBram Moolenaar  call feedkeys(":append!\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
1185d98dc2aSBram Moolenaar  call assert_equal(['  L1', '    L2', '      L3'], getline(1, '$'))
1195d98dc2aSBram Moolenaar  call assert_false(&autoindent)
1205d98dc2aSBram Moolenaar  %delete _
1215d98dc2aSBram Moolenaar  " append with 'autoindent' set and toggling 'autoindent'
1225d98dc2aSBram Moolenaar  set autoindent
1235d98dc2aSBram Moolenaar  call setline(1, ['  L1'])
1245d98dc2aSBram Moolenaar  call feedkeys(":append!\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
1255d98dc2aSBram Moolenaar  call assert_equal(['  L1', '  L2', '  L3'], getline(1, '$'))
1265d98dc2aSBram Moolenaar  call assert_true(&autoindent)
1275d98dc2aSBram Moolenaar  set autoindent&
1285d98dc2aSBram Moolenaar  close!
1295d98dc2aSBram Moolenaarendfunc
1305d98dc2aSBram Moolenaar
1315d98dc2aSBram Moolenaar" Test for the :insert command
1325d98dc2aSBram Moolenaarfunc Test_insert_cmd()
1335d98dc2aSBram Moolenaar  new
1345d98dc2aSBram Moolenaar  call setline(1, ['  L1'])
1355d98dc2aSBram Moolenaar  call feedkeys(":insert\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
1365d98dc2aSBram Moolenaar  call assert_equal(['  L2', '  L3', '  L1'], getline(1, '$'))
1375d98dc2aSBram Moolenaar  %delete _
1385d98dc2aSBram Moolenaar  " insert before a specific line
1395d98dc2aSBram Moolenaar  call setline(1, ['  L1', '  L2', '  L3'])
1405d98dc2aSBram Moolenaar  call feedkeys(":2insert\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
1415d98dc2aSBram Moolenaar  call assert_equal(['  L1', '  L4', '  L5', '  L2', '  L3'], getline(1, '$'))
1425d98dc2aSBram Moolenaar  %delete _
1435d98dc2aSBram Moolenaar  " insert with toggling 'autoindent'
1445d98dc2aSBram Moolenaar  call setline(1, ['  L1'])
1455d98dc2aSBram Moolenaar  call feedkeys(":insert!\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
1465d98dc2aSBram Moolenaar  call assert_equal(['    L2', '      L3', '  L1'], getline(1, '$'))
1475d98dc2aSBram Moolenaar  call assert_false(&autoindent)
1485d98dc2aSBram Moolenaar  %delete _
1495d98dc2aSBram Moolenaar  " insert with 'autoindent' set and toggling 'autoindent'
1505d98dc2aSBram Moolenaar  set autoindent
1515d98dc2aSBram Moolenaar  call setline(1, ['  L1'])
1525d98dc2aSBram Moolenaar  call feedkeys(":insert!\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
1535d98dc2aSBram Moolenaar  call assert_equal(['  L2', '  L3', '  L1'], getline(1, '$'))
1545d98dc2aSBram Moolenaar  call assert_true(&autoindent)
1555d98dc2aSBram Moolenaar  set autoindent&
1565d98dc2aSBram Moolenaar  close!
1575d98dc2aSBram Moolenaarendfunc
1585d98dc2aSBram Moolenaar
1595d98dc2aSBram Moolenaar" Test for the :change command
1605d98dc2aSBram Moolenaarfunc Test_change_cmd()
1615d98dc2aSBram Moolenaar  new
1625d98dc2aSBram Moolenaar  call setline(1, ['  L1', 'L2', 'L3'])
1635d98dc2aSBram Moolenaar  call feedkeys(":change\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
1645d98dc2aSBram Moolenaar  call assert_equal(['  L4', '  L5', 'L2', 'L3'], getline(1, '$'))
1655d98dc2aSBram Moolenaar  %delete _
1665d98dc2aSBram Moolenaar  " change a specific line
1675d98dc2aSBram Moolenaar  call setline(1, ['  L1', '  L2', '  L3'])
1685d98dc2aSBram Moolenaar  call feedkeys(":2change\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
1695d98dc2aSBram Moolenaar  call assert_equal(['  L1', '  L4', '  L5', '  L3'], getline(1, '$'))
1705d98dc2aSBram Moolenaar  %delete _
1715d98dc2aSBram Moolenaar  " change with toggling 'autoindent'
1725d98dc2aSBram Moolenaar  call setline(1, ['  L1', 'L2', 'L3'])
1735d98dc2aSBram Moolenaar  call feedkeys(":change!\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
1745d98dc2aSBram Moolenaar  call assert_equal(['    L4', '      L5', 'L2', 'L3'], getline(1, '$'))
1755d98dc2aSBram Moolenaar  call assert_false(&autoindent)
1765d98dc2aSBram Moolenaar  %delete _
1775d98dc2aSBram Moolenaar  " change with 'autoindent' set and toggling 'autoindent'
1785d98dc2aSBram Moolenaar  set autoindent
1795d98dc2aSBram Moolenaar  call setline(1, ['  L1', 'L2', 'L3'])
1805d98dc2aSBram Moolenaar  call feedkeys(":change!\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
1815d98dc2aSBram Moolenaar  call assert_equal(['  L4', '  L5', 'L2', 'L3'], getline(1, '$'))
1825d98dc2aSBram Moolenaar  call assert_true(&autoindent)
1835d98dc2aSBram Moolenaar  set autoindent&
1845d98dc2aSBram Moolenaar  close!
1855d98dc2aSBram Moolenaarendfunc
1865d98dc2aSBram Moolenaar
187e20b9eceSBram Moolenaar" Test for the :language command
188e20b9eceSBram Moolenaarfunc Test_language_cmd()
189e20b9eceSBram Moolenaar  CheckFeature multi_lang
190e20b9eceSBram Moolenaar
191e20b9eceSBram Moolenaar  call assert_fails('language ctype non_existing_lang', 'E197:')
192e20b9eceSBram Moolenaar  call assert_fails('language time non_existing_lang', 'E197:')
193e20b9eceSBram Moolenaarendfunc
194e20b9eceSBram Moolenaar
195e20b9eceSBram Moolenaar" Test for the :confirm command dialog
196e20b9eceSBram Moolenaarfunc Test_confirm_cmd()
197e20b9eceSBram Moolenaar  CheckNotGui
198e20b9eceSBram Moolenaar  CheckRunVimInTerminal
199e20b9eceSBram Moolenaar
20027321dbeSBram Moolenaar  call writefile(['foo1'], 'Xfoo')
20127321dbeSBram Moolenaar  call writefile(['bar1'], 'Xbar')
202e20b9eceSBram Moolenaar
203e20b9eceSBram Moolenaar  " Test for saving all the modified buffers
20427321dbeSBram Moolenaar  let lines =<< trim END
20527321dbeSBram Moolenaar    set nomore
20627321dbeSBram Moolenaar    new Xfoo
20727321dbeSBram Moolenaar    call setline(1, 'foo2')
20827321dbeSBram Moolenaar    new Xbar
20927321dbeSBram Moolenaar    call setline(1, 'bar2')
21027321dbeSBram Moolenaar    wincmd b
21127321dbeSBram Moolenaar  END
21227321dbeSBram Moolenaar  call writefile(lines, 'Xscript')
21327321dbeSBram Moolenaar  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
214e20b9eceSBram Moolenaar  call term_sendkeys(buf, ":confirm qall\n")
215e20b9eceSBram Moolenaar  call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000)
216e20b9eceSBram Moolenaar  call term_sendkeys(buf, "A")
217e20b9eceSBram Moolenaar  call StopVimInTerminal(buf)
218e20b9eceSBram Moolenaar
21927321dbeSBram Moolenaar  call assert_equal(['foo2'], readfile('Xfoo'))
22027321dbeSBram Moolenaar  call assert_equal(['bar2'], readfile('Xbar'))
221e20b9eceSBram Moolenaar
222e20b9eceSBram Moolenaar  " Test for discarding all the changes to modified buffers
22327321dbeSBram Moolenaar  let lines =<< trim END
22427321dbeSBram Moolenaar    set nomore
22527321dbeSBram Moolenaar    new Xfoo
22627321dbeSBram Moolenaar    call setline(1, 'foo3')
22727321dbeSBram Moolenaar    new Xbar
22827321dbeSBram Moolenaar    call setline(1, 'bar3')
22927321dbeSBram Moolenaar    wincmd b
23027321dbeSBram Moolenaar  END
23127321dbeSBram Moolenaar  call writefile(lines, 'Xscript')
23227321dbeSBram Moolenaar  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
233e20b9eceSBram Moolenaar  call term_sendkeys(buf, ":confirm qall\n")
234e20b9eceSBram Moolenaar  call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000)
235e20b9eceSBram Moolenaar  call term_sendkeys(buf, "D")
236e20b9eceSBram Moolenaar  call StopVimInTerminal(buf)
237e20b9eceSBram Moolenaar
23827321dbeSBram Moolenaar  call assert_equal(['foo2'], readfile('Xfoo'))
23927321dbeSBram Moolenaar  call assert_equal(['bar2'], readfile('Xbar'))
240e20b9eceSBram Moolenaar
241e20b9eceSBram Moolenaar  " Test for saving and discarding changes to some buffers
24227321dbeSBram Moolenaar  let lines =<< trim END
24327321dbeSBram Moolenaar    set nomore
24427321dbeSBram Moolenaar    new Xfoo
24527321dbeSBram Moolenaar    call setline(1, 'foo4')
24627321dbeSBram Moolenaar    new Xbar
24727321dbeSBram Moolenaar    call setline(1, 'bar4')
24827321dbeSBram Moolenaar    wincmd b
24927321dbeSBram Moolenaar  END
25027321dbeSBram Moolenaar  call writefile(lines, 'Xscript')
25127321dbeSBram Moolenaar  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
252e20b9eceSBram Moolenaar  call term_sendkeys(buf, ":confirm qall\n")
253e20b9eceSBram Moolenaar  call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000)
254e20b9eceSBram Moolenaar  call term_sendkeys(buf, "N")
255e20b9eceSBram Moolenaar  call WaitForAssert({-> assert_match('\[Y\]es, (N)o, (C)ancel: ', term_getline(buf, 20))}, 1000)
256e20b9eceSBram Moolenaar  call term_sendkeys(buf, "Y")
257e20b9eceSBram Moolenaar  call StopVimInTerminal(buf)
258e20b9eceSBram Moolenaar
25927321dbeSBram Moolenaar  call assert_equal(['foo4'], readfile('Xfoo'))
26027321dbeSBram Moolenaar  call assert_equal(['bar2'], readfile('Xbar'))
261e20b9eceSBram Moolenaar
26227321dbeSBram Moolenaar  call delete('Xscript')
26327321dbeSBram Moolenaar  call delete('Xfoo')
26427321dbeSBram Moolenaar  call delete('Xbar')
26572749f06SBram Moolenaarendfunc
26672749f06SBram Moolenaar
26772749f06SBram Moolenaarfunc Test_confirm_cmd_cancel()
268bea9023dSBram Moolenaar  CheckNotGui
269bea9023dSBram Moolenaar  CheckRunVimInTerminal
270bea9023dSBram Moolenaar
271406cd90fSBram Moolenaar  " Test for closing a window with a modified buffer
27227321dbeSBram Moolenaar  let lines =<< trim END
27327321dbeSBram Moolenaar    set nomore
27427321dbeSBram Moolenaar    new
27527321dbeSBram Moolenaar    call setline(1, 'abc')
27627321dbeSBram Moolenaar  END
27727321dbeSBram Moolenaar  call writefile(lines, 'Xscript')
27827321dbeSBram Moolenaar  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
279406cd90fSBram Moolenaar  call term_sendkeys(buf, ":confirm close\n")
280406cd90fSBram Moolenaar  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o, (C)ancel: *$',
281406cd90fSBram Moolenaar        \ term_getline(buf, 20))}, 1000)
282406cd90fSBram Moolenaar  call term_sendkeys(buf, "C")
2837b1b36b1SBram Moolenaar  call WaitForAssert({-> assert_equal('', term_getline(buf, 20))}, 1000)
284406cd90fSBram Moolenaar  call term_sendkeys(buf, ":confirm close\n")
285406cd90fSBram Moolenaar  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o, (C)ancel: *$',
286406cd90fSBram Moolenaar        \ term_getline(buf, 20))}, 1000)
287406cd90fSBram Moolenaar  call term_sendkeys(buf, "N")
2889207d1f5SBram Moolenaar  call WaitForAssert({-> assert_match('^ *0,0-1         All$',
2899207d1f5SBram Moolenaar        \ term_getline(buf, 20))}, 1000)
290406cd90fSBram Moolenaar  call StopVimInTerminal(buf)
29127321dbeSBram Moolenaar  call delete('Xscript')
29227321dbeSBram Moolenaarendfunc
29327321dbeSBram Moolenaar
29427321dbeSBram Moolenaar" The ":confirm" prompt was sometimes used with the terminal in cooked mode.
29527321dbeSBram Moolenaar" This test verifies that a "\<CR>" character is NOT required to respond to a
29627321dbeSBram Moolenaar" prompt from the ":conf q" and ":conf wq" commands.
29727321dbeSBram Moolenaarfunc Test_confirm_q_wq()
29827321dbeSBram Moolenaar  CheckNotGui
29927321dbeSBram Moolenaar  CheckRunVimInTerminal
30027321dbeSBram Moolenaar
30127321dbeSBram Moolenaar  call writefile(['foo'], 'Xfoo')
30227321dbeSBram Moolenaar
30327321dbeSBram Moolenaar  let lines =<< trim END
30427321dbeSBram Moolenaar    set hidden nomore
30527321dbeSBram Moolenaar    call setline(1, 'abc')
30627321dbeSBram Moolenaar    edit Xfoo
30727321dbeSBram Moolenaar  END
30827321dbeSBram Moolenaar  call writefile(lines, 'Xscript')
30927321dbeSBram Moolenaar  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
31027321dbeSBram Moolenaar  call term_sendkeys(buf, ":confirm q\n")
31127321dbeSBram Moolenaar  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o, (C)ancel: *$',
31227321dbeSBram Moolenaar        \ term_getline(buf, 20))}, 1000)
31327321dbeSBram Moolenaar  call term_sendkeys(buf, 'C')
31427321dbeSBram Moolenaar  call WaitForAssert({-> assert_notmatch('^\[Y\]es, (N)o, (C)ancel: C*$',
31527321dbeSBram Moolenaar        \ term_getline(buf, 20))}, 1000)
31627321dbeSBram Moolenaar
31727321dbeSBram Moolenaar  call term_sendkeys(buf, ":edit Xfoo\n")
31827321dbeSBram Moolenaar  call term_sendkeys(buf, ":confirm wq\n")
31927321dbeSBram Moolenaar  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o, (C)ancel: *$',
32027321dbeSBram Moolenaar        \ term_getline(buf, 20))}, 1000)
32127321dbeSBram Moolenaar  call term_sendkeys(buf, 'C')
32227321dbeSBram Moolenaar  call WaitForAssert({-> assert_notmatch('^\[Y\]es, (N)o, (C)ancel: C*$',
32327321dbeSBram Moolenaar        \ term_getline(buf, 20))}, 1000)
32427321dbeSBram Moolenaar  call StopVimInTerminal(buf)
32527321dbeSBram Moolenaar
32627321dbeSBram Moolenaar  call delete('Xscript')
32727321dbeSBram Moolenaar  call delete('Xfoo')
328e20b9eceSBram Moolenaarendfunc
329e20b9eceSBram Moolenaar
3302bf6034eSDominique Pellefunc Test_confirm_write_ro()
3312bf6034eSDominique Pelle  CheckNotGui
3322bf6034eSDominique Pelle  CheckRunVimInTerminal
3332bf6034eSDominique Pelle
3342bf6034eSDominique Pelle  call writefile(['foo'], 'Xconfirm_write_ro')
3352bf6034eSDominique Pelle  let lines =<< trim END
3362bf6034eSDominique Pelle    set nobackup ff=unix cmdheight=2
3372bf6034eSDominique Pelle    edit Xconfirm_write_ro
3382bf6034eSDominique Pelle    norm Abar
3392bf6034eSDominique Pelle  END
3402bf6034eSDominique Pelle  call writefile(lines, 'Xscript')
3412bf6034eSDominique Pelle  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
3422bf6034eSDominique Pelle
3432bf6034eSDominique Pelle  " Try to write with 'ro' option.
3442bf6034eSDominique Pelle  call term_sendkeys(buf, ":set ro | confirm w\n")
3452bf6034eSDominique Pelle  call WaitForAssert({-> assert_match("^'readonly' option is set for \"Xconfirm_write_ro\"\. *$",
3462bf6034eSDominique Pelle        \            term_getline(buf, 18))}, 1000)
3472bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^Do you wish to write anyway? *$',
3482bf6034eSDominique Pelle        \            term_getline(buf, 19))}, 1000)
3492bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
3502bf6034eSDominique Pelle  call term_sendkeys(buf, 'N')
3512bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^ *$', term_getline(buf, 19))}, 1000)
3522bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('.* All$', term_getline(buf, 20))}, 1000)
3532bf6034eSDominique Pelle  call assert_equal(['foo'], readfile('Xconfirm_write_ro'))
3542bf6034eSDominique Pelle
3552bf6034eSDominique Pelle  call term_sendkeys(buf, ":confirm w\n")
3562bf6034eSDominique Pelle  call WaitForAssert({-> assert_match("^'readonly' option is set for \"Xconfirm_write_ro\"\. *$",
3572bf6034eSDominique Pelle        \            term_getline(buf, 18))}, 1000)
3582bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^Do you wish to write anyway? *$',
3592bf6034eSDominique Pelle        \            term_getline(buf, 19))}, 1000)
3602bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
3612bf6034eSDominique Pelle  call term_sendkeys(buf, 'Y')
3622bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^"Xconfirm_write_ro" 1L, 7B written$',
3632bf6034eSDominique Pelle        \            term_getline(buf, 19))}, 1000)
3642bf6034eSDominique Pelle  call assert_equal(['foobar'], readfile('Xconfirm_write_ro'))
3652bf6034eSDominique Pelle
3662bf6034eSDominique Pelle  " Try to write with read-only file permissions.
3672bf6034eSDominique Pelle  call setfperm('Xconfirm_write_ro', 'r--r--r--')
3682bf6034eSDominique Pelle  call term_sendkeys(buf, ":set noro | undo | confirm w\n")
3692bf6034eSDominique Pelle  call WaitForAssert({-> assert_match("^File permissions of \"Xconfirm_write_ro\" are read-only\. *$",
3702bf6034eSDominique Pelle        \            term_getline(buf, 17))}, 1000)
3712bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^It may still be possible to write it\. *$',
3722bf6034eSDominique Pelle        \            term_getline(buf, 18))}, 1000)
3732bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^Do you wish to try? *$', term_getline(buf, 19))}, 1000)
3742bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
3752bf6034eSDominique Pelle  call term_sendkeys(buf, 'Y')
3762bf6034eSDominique Pelle  call WaitForAssert({-> assert_match('^"Xconfirm_write_ro" 1L, 4B written$',
3772bf6034eSDominique Pelle        \            term_getline(buf, 19))}, 1000)
3782bf6034eSDominique Pelle  call assert_equal(['foo'], readfile('Xconfirm_write_ro'))
3792bf6034eSDominique Pelle
3802bf6034eSDominique Pelle  call StopVimInTerminal(buf)
3812bf6034eSDominique Pelle  call delete('Xscript')
3822bf6034eSDominique Pelle  call delete('Xconfirm_write_ro')
3832bf6034eSDominique Pelleendfunc
3842bf6034eSDominique Pelle
385bd9e7961SDominique Pellefunc Test_confirm_write_partial_file()
386bd9e7961SDominique Pelle  CheckNotGui
387bd9e7961SDominique Pelle  CheckRunVimInTerminal
388bd9e7961SDominique Pelle
389bd9e7961SDominique Pelle  call writefile(['a', 'b', 'c', 'd'], 'Xwrite_partial')
390bd9e7961SDominique Pelle  call writefile(['set nobackup ff=unix cmdheight=2',
391bd9e7961SDominique Pelle        \         'edit Xwrite_partial'], 'Xscript')
392bd9e7961SDominique Pelle  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
393bd9e7961SDominique Pelle
394bd9e7961SDominique Pelle  call term_sendkeys(buf, ":confirm 2,3w\n")
395bd9e7961SDominique Pelle  call WaitForAssert({-> assert_match('^Write partial file? *$',
396bd9e7961SDominique Pelle        \            term_getline(buf, 19))}, 1000)
397bd9e7961SDominique Pelle  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$',
398bd9e7961SDominique Pelle        \            term_getline(buf, 20))}, 1000)
399bd9e7961SDominique Pelle  call term_sendkeys(buf, 'N')
400bd9e7961SDominique Pelle  call WaitForAssert({-> assert_match('.* All$', term_getline(buf, 20))}, 1000)
401bd9e7961SDominique Pelle  call assert_equal(['a', 'b', 'c', 'd'], readfile('Xwrite_partial'))
402bd9e7961SDominique Pelle  call delete('Xwrite_partial')
403bd9e7961SDominique Pelle
404bd9e7961SDominique Pelle  call term_sendkeys(buf, ":confirm 2,3w\n")
405bd9e7961SDominique Pelle  call WaitForAssert({-> assert_match('^Write partial file? *$',
406bd9e7961SDominique Pelle        \            term_getline(buf, 19))}, 1000)
407bd9e7961SDominique Pelle  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$',
408bd9e7961SDominique Pelle        \            term_getline(buf, 20))}, 1000)
409bd9e7961SDominique Pelle  call term_sendkeys(buf, 'Y')
410bd9e7961SDominique Pelle  call WaitForAssert({-> assert_match('^"Xwrite_partial" \[New\] 2L, 4B written *$',
411bd9e7961SDominique Pelle        \            term_getline(buf, 19))}, 1000)
412bd9e7961SDominique Pelle  call WaitForAssert({-> assert_match('^Press ENTER or type command to continue *$',
413bd9e7961SDominique Pelle        \            term_getline(buf, 20))}, 1000)
414bd9e7961SDominique Pelle  call assert_equal(['b', 'c'], readfile('Xwrite_partial'))
415bd9e7961SDominique Pelle
416bd9e7961SDominique Pelle  call StopVimInTerminal(buf)
417bd9e7961SDominique Pelle  call delete('Xwrite_partial')
418bd9e7961SDominique Pelle  call delete('Xscript')
419bd9e7961SDominique Pelleendfunc
420bd9e7961SDominique Pelle
4219f6277bdSBram Moolenaar" Test for the :print command
4229f6277bdSBram Moolenaarfunc Test_print_cmd()
4239f6277bdSBram Moolenaar  call assert_fails('print', 'E749:')
4249f6277bdSBram Moolenaarendfunc
4259f6277bdSBram Moolenaar
4269f6277bdSBram Moolenaar" Test for the :winsize command
4279f6277bdSBram Moolenaarfunc Test_winsize_cmd()
4289f6277bdSBram Moolenaar  call assert_fails('winsize 1', 'E465:')
429f5a5116aSBram Moolenaar  call assert_fails('winsize 1 x', 'E465:')
430f5a5116aSBram Moolenaar  call assert_fails('win_getid(1)', 'E475: Invalid argument: _getid(1)')
431f5a5116aSBram Moolenaar  " Actually changing the window size would be flaky.
4329f6277bdSBram Moolenaarendfunc
4339f6277bdSBram Moolenaar
4349f6277bdSBram Moolenaar" Test for the :redir command
435f9a65505SBram Moolenaar" NOTE: if you run tests as root this will fail.  Don't run tests as root!
4369f6277bdSBram Moolenaarfunc Test_redir_cmd()
4379f6277bdSBram Moolenaar  call assert_fails('redir @@', 'E475:')
4389f6277bdSBram Moolenaar  call assert_fails('redir abc', 'E475:')
4398dfcce3aSBram Moolenaar  call assert_fails('redir => 1abc', 'E474:')
4408dfcce3aSBram Moolenaar  call assert_fails('redir => a b', 'E488:')
4419b7bf9e9SBram Moolenaar  call assert_fails('redir => abc[1]', 'E121:')
4428dfcce3aSBram Moolenaar  let b = 0zFF
4438dfcce3aSBram Moolenaar  call assert_fails('redir =>> b', 'E734:')
4448dfcce3aSBram Moolenaar  unlet b
4458dfcce3aSBram Moolenaar
4469f6277bdSBram Moolenaar  if has('unix')
4478dfcce3aSBram Moolenaar    " Redirecting to a directory name
4489f6277bdSBram Moolenaar    call mkdir('Xdir')
4499f6277bdSBram Moolenaar    call assert_fails('redir > Xdir', 'E17:')
4509f6277bdSBram Moolenaar    call delete('Xdir', 'd')
4519f6277bdSBram Moolenaar  endif
452bc2b71d4SBram Moolenaar
453bc2b71d4SBram Moolenaar  " Test for redirecting to a register
454bc2b71d4SBram Moolenaar  redir @q> | echon 'clean ' | redir END
455bc2b71d4SBram Moolenaar  redir @q>> | echon 'water' | redir END
456bc2b71d4SBram Moolenaar  call assert_equal('clean water', @q)
457bc2b71d4SBram Moolenaar
458bc2b71d4SBram Moolenaar  " Test for redirecting to a variable
459bc2b71d4SBram Moolenaar  redir => color | echon 'blue ' | redir END
460bc2b71d4SBram Moolenaar  redir =>> color | echon 'sky' | redir END
461bc2b71d4SBram Moolenaar  call assert_equal('blue sky', color)
4629f6277bdSBram Moolenaarendfunc
4639f6277bdSBram Moolenaar
46417709e28SBram Moolenaarfunc Test_redir_cmd_readonly()
46517709e28SBram Moolenaar  CheckNotRoot
46617709e28SBram Moolenaar
46717709e28SBram Moolenaar  " Redirecting to a read-only file
46817709e28SBram Moolenaar  call writefile([], 'Xfile')
46917709e28SBram Moolenaar  call setfperm('Xfile', 'r--r--r--')
47017709e28SBram Moolenaar  call assert_fails('redir! > Xfile', 'E190:')
47117709e28SBram Moolenaar  call delete('Xfile')
47217709e28SBram Moolenaarendfunc
47317709e28SBram Moolenaar
4749f6277bdSBram Moolenaar" Test for the :filetype command
4759f6277bdSBram Moolenaarfunc Test_filetype_cmd()
4769f6277bdSBram Moolenaar  call assert_fails('filetype abc', 'E475:')
4779f6277bdSBram Moolenaarendfunc
4789f6277bdSBram Moolenaar
4799f6277bdSBram Moolenaar" Test for the :mode command
4809f6277bdSBram Moolenaarfunc Test_mode_cmd()
4819f6277bdSBram Moolenaar  call assert_fails('mode abc', 'E359:')
4829f6277bdSBram Moolenaarendfunc
4839f6277bdSBram Moolenaar
484bc2b71d4SBram Moolenaar" Test for the :sleep command
485bc2b71d4SBram Moolenaarfunc Test_sleep_cmd()
486bc2b71d4SBram Moolenaar  call assert_fails('sleep x', 'E475:')
487bc2b71d4SBram Moolenaarendfunc
488bc2b71d4SBram Moolenaar
489bc2b71d4SBram Moolenaar" Test for the :read command
490bc2b71d4SBram Moolenaarfunc Test_read_cmd()
491bc2b71d4SBram Moolenaar  call writefile(['one'], 'Xfile')
492bc2b71d4SBram Moolenaar  new
493bc2b71d4SBram Moolenaar  call assert_fails('read', 'E32:')
494bc2b71d4SBram Moolenaar  edit Xfile
495bc2b71d4SBram Moolenaar  read
496bc2b71d4SBram Moolenaar  call assert_equal(['one', 'one'], getline(1, '$'))
497bc2b71d4SBram Moolenaar  close!
498bc2b71d4SBram Moolenaar  new
499bc2b71d4SBram Moolenaar  read Xfile
500bc2b71d4SBram Moolenaar  call assert_equal(['', 'one'], getline(1, '$'))
501bc2b71d4SBram Moolenaar  call deletebufline('', 1, '$')
502bc2b71d4SBram Moolenaar  call feedkeys("Qr Xfile\<CR>visual\<CR>", 'xt')
503bc2b71d4SBram Moolenaar  call assert_equal(['one'], getline(1, '$'))
504bc2b71d4SBram Moolenaar  close!
505bc2b71d4SBram Moolenaar  call delete('Xfile')
506bc2b71d4SBram Moolenaarendfunc
507bc2b71d4SBram Moolenaar
508bc2b71d4SBram Moolenaar" Test for running Ex commands when text is locked.
509bc2b71d4SBram Moolenaar" <C-\>e in the command line is used to lock the text
510bc2b71d4SBram Moolenaarfunc Test_run_excmd_with_text_locked()
511bc2b71d4SBram Moolenaar  " :quit
512bc2b71d4SBram Moolenaar  let cmd = ":\<C-\>eexecute('quit')\<CR>\<C-C>"
513ff06f283SBram Moolenaar  call assert_fails("call feedkeys(cmd, 'xt')", 'E565:')
514bc2b71d4SBram Moolenaar
515bc2b71d4SBram Moolenaar  " :qall
516bc2b71d4SBram Moolenaar  let cmd = ":\<C-\>eexecute('qall')\<CR>\<C-C>"
517ff06f283SBram Moolenaar  call assert_fails("call feedkeys(cmd, 'xt')", 'E565:')
518bc2b71d4SBram Moolenaar
519bc2b71d4SBram Moolenaar  " :exit
520bc2b71d4SBram Moolenaar  let cmd = ":\<C-\>eexecute('exit')\<CR>\<C-C>"
521ff06f283SBram Moolenaar  call assert_fails("call feedkeys(cmd, 'xt')", 'E565:')
522bc2b71d4SBram Moolenaar
523bc2b71d4SBram Moolenaar  " :close - should be ignored
524bc2b71d4SBram Moolenaar  new
525bc2b71d4SBram Moolenaar  let cmd = ":\<C-\>eexecute('close')\<CR>\<C-C>"
526bc2b71d4SBram Moolenaar  call assert_equal(2, winnr('$'))
527bc2b71d4SBram Moolenaar  close
528818fc9adSBram Moolenaar
529ff06f283SBram Moolenaar  call assert_fails("call feedkeys(\":\<C-R>=execute('bnext')\<CR>\", 'xt')", 'E565:')
5305d3c9f8cSBram Moolenaar
5315d3c9f8cSBram Moolenaar  " :tabfirst
5325d3c9f8cSBram Moolenaar  tabnew
5335d3c9f8cSBram Moolenaar  call assert_fails("call feedkeys(\":\<C-R>=execute('tabfirst')\<CR>\", 'xt')", 'E565:')
5345d3c9f8cSBram Moolenaar  tabclose
535818fc9adSBram Moolenaarendfunc
536818fc9adSBram Moolenaar
537818fc9adSBram Moolenaar" Test for the :verbose command
538818fc9adSBram Moolenaarfunc Test_verbose_cmd()
539818fc9adSBram Moolenaar  call assert_equal(['  verbose=1'], split(execute('verbose set vbs'), "\n"))
540818fc9adSBram Moolenaar  call assert_equal(['  verbose=0'], split(execute('0verbose set vbs'), "\n"))
541818fc9adSBram Moolenaar  let l = execute("4verbose set verbose | set verbose")
542818fc9adSBram Moolenaar  call assert_equal(['  verbose=4', '  verbose=0'], split(l, "\n"))
543818fc9adSBram Moolenaarendfunc
544818fc9adSBram Moolenaar
545818fc9adSBram Moolenaar" Test for the :delete command and the related abbreviated commands
546818fc9adSBram Moolenaarfunc Test_excmd_delete()
547818fc9adSBram Moolenaar  new
548818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
549818fc9adSBram Moolenaar  call assert_equal(['^Ibar$'], split(execute('dl'), "\n"))
550818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
551818fc9adSBram Moolenaar  call assert_equal(['^Ibar$'], split(execute('dell'), "\n"))
552818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
553818fc9adSBram Moolenaar  call assert_equal(['^Ibar$'], split(execute('delel'), "\n"))
554818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
555818fc9adSBram Moolenaar  call assert_equal(['^Ibar$'], split(execute('deletl'), "\n"))
556818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
557818fc9adSBram Moolenaar  call assert_equal(['^Ibar$'], split(execute('deletel'), "\n"))
558818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
559818fc9adSBram Moolenaar  call assert_equal(['        bar'], split(execute('dp'), "\n"))
560818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
561818fc9adSBram Moolenaar  call assert_equal(['        bar'], split(execute('dep'), "\n"))
562818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
563818fc9adSBram Moolenaar  call assert_equal(['        bar'], split(execute('delp'), "\n"))
564818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
565818fc9adSBram Moolenaar  call assert_equal(['        bar'], split(execute('delep'), "\n"))
566818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
567818fc9adSBram Moolenaar  call assert_equal(['        bar'], split(execute('deletp'), "\n"))
568818fc9adSBram Moolenaar  call setline(1, ['foo', "\tbar"])
569818fc9adSBram Moolenaar  call assert_equal(['        bar'], split(execute('deletep'), "\n"))
570818fc9adSBram Moolenaar  close!
571bc2b71d4SBram Moolenaarendfunc
572bc2b71d4SBram Moolenaar
573ca68ae13SBram Moolenaar" Test for commands that are blocked in a sandbox
574ca68ae13SBram Moolenaarfunc Sandbox_tests()
575ca68ae13SBram Moolenaar  call assert_fails("call histadd(':', 'ls')", 'E48:')
576ca68ae13SBram Moolenaar  call assert_fails("call mkdir('Xdir')", 'E48:')
577ca68ae13SBram Moolenaar  call assert_fails("call rename('a', 'b')", 'E48:')
578ca68ae13SBram Moolenaar  call assert_fails("call setbufvar(1, 'myvar', 1)", 'E48:')
579ca68ae13SBram Moolenaar  call assert_fails("call settabvar(1, 'myvar', 1)", 'E48:')
580ca68ae13SBram Moolenaar  call assert_fails("call settabwinvar(1, 1, 'myvar', 1)", 'E48:')
581ca68ae13SBram Moolenaar  call assert_fails("call setwinvar(1, 'myvar', 1)", 'E48:')
582ca68ae13SBram Moolenaar  call assert_fails("call timer_start(100, '')", 'E48:')
583ca68ae13SBram Moolenaar  if has('channel')
584ca68ae13SBram Moolenaar    call assert_fails("call prompt_setcallback(1, '')", 'E48:')
585ca68ae13SBram Moolenaar    call assert_fails("call prompt_setinterrupt(1, '')", 'E48:')
586ca68ae13SBram Moolenaar    call assert_fails("call prompt_setprompt(1, '')", 'E48:')
587ca68ae13SBram Moolenaar  endif
588ca68ae13SBram Moolenaar  call assert_fails("let $TESTVAR=1", 'E48:')
589ca68ae13SBram Moolenaar  call assert_fails("call feedkeys('ivim')", 'E48:')
590ca68ae13SBram Moolenaar  call assert_fails("source! Xfile", 'E48:')
591ca68ae13SBram Moolenaar  call assert_fails("call delete('Xfile')", 'E48:')
592ca68ae13SBram Moolenaar  call assert_fails("call writefile([], 'Xfile')", 'E48:')
593ca68ae13SBram Moolenaar  call assert_fails('!ls', 'E48:')
594ca68ae13SBram Moolenaar  call assert_fails('shell', 'E48:')
595ca68ae13SBram Moolenaar  call assert_fails('stop', 'E48:')
596ca68ae13SBram Moolenaar  call assert_fails('exe "normal \<C-Z>"', 'E48:')
597ca68ae13SBram Moolenaar  set insertmode
598ca68ae13SBram Moolenaar  call assert_fails('call feedkeys("\<C-Z>", "xt")', 'E48:')
599ca68ae13SBram Moolenaar  set insertmode&
600ca68ae13SBram Moolenaar  call assert_fails('suspend', 'E48:')
601ca68ae13SBram Moolenaar  call assert_fails('call system("ls")', 'E48:')
602ca68ae13SBram Moolenaar  call assert_fails('call systemlist("ls")', 'E48:')
603ca68ae13SBram Moolenaar  if has('clientserver')
604ca68ae13SBram Moolenaar    call assert_fails('let s=remote_expr("gvim", "2+2")', 'E48:')
605ca68ae13SBram Moolenaar    if !has('win32')
606ca68ae13SBram Moolenaar      " remote_foreground() doesn't thrown an error message on MS-Windows
607ca68ae13SBram Moolenaar      call assert_fails('call remote_foreground("gvim")', 'E48:')
608ca68ae13SBram Moolenaar    endif
609ca68ae13SBram Moolenaar    call assert_fails('let s=remote_peek("gvim")', 'E48:')
610ca68ae13SBram Moolenaar    call assert_fails('let s=remote_read("gvim")', 'E48:')
611ca68ae13SBram Moolenaar    call assert_fails('let s=remote_send("gvim", "abc")', 'E48:')
612ca68ae13SBram Moolenaar    call assert_fails('let s=server2client("gvim", "abc")', 'E48:')
613ca68ae13SBram Moolenaar  endif
614ca68ae13SBram Moolenaar  if has('terminal')
615ca68ae13SBram Moolenaar    call assert_fails('terminal', 'E48:')
616ca68ae13SBram Moolenaar    call assert_fails('call term_start("vim")', 'E48:')
617ca68ae13SBram Moolenaar    call assert_fails('call term_dumpwrite(1, "Xfile")', 'E48:')
618ca68ae13SBram Moolenaar  endif
619ca68ae13SBram Moolenaar  if has('channel')
620ca68ae13SBram Moolenaar    call assert_fails("call ch_logfile('chlog')", 'E48:')
621ca68ae13SBram Moolenaar    call assert_fails("call ch_open('localhost:8765')", 'E48:')
622ca68ae13SBram Moolenaar  endif
623ca68ae13SBram Moolenaar  if has('job')
624ca68ae13SBram Moolenaar    call assert_fails("call job_start('vim')", 'E48:')
625ca68ae13SBram Moolenaar  endif
626ca68ae13SBram Moolenaar  if has('unix') && has('libcall')
627ca68ae13SBram Moolenaar    call assert_fails("echo libcall('libc.so', 'getenv', 'HOME')", 'E48:')
628ca68ae13SBram Moolenaar  endif
629ca68ae13SBram Moolenaar  if has('unix')
630ca68ae13SBram Moolenaar    call assert_fails('cd `pwd`', 'E48:')
631ca68ae13SBram Moolenaar  endif
63259585497SYegappan Lakshmanan  " some options cannot be changed in a sandbox
63359585497SYegappan Lakshmanan  call assert_fails('set exrc', 'E48:')
63459585497SYegappan Lakshmanan  call assert_fails('set cdpath', 'E48:')
6352d6d718dSYegappan Lakshmanan  if has('xim') && has('gui_gtk')
63659585497SYegappan Lakshmanan    call assert_fails('set imstyle', 'E48:')
63759585497SYegappan Lakshmanan  endif
638ca68ae13SBram Moolenaarendfunc
639ca68ae13SBram Moolenaar
640ca68ae13SBram Moolenaarfunc Test_sandbox()
641ca68ae13SBram Moolenaar  sandbox call Sandbox_tests()
642ca68ae13SBram Moolenaarendfunc
643ca68ae13SBram Moolenaar
6446d37e8e3SDominique Pellefunc Test_command_not_implemented_E319()
6456d37e8e3SDominique Pelle  if !has('mzscheme')
6466d37e8e3SDominique Pelle    call assert_fails('mzscheme', 'E319:')
6476d37e8e3SDominique Pelle  endif
6486d37e8e3SDominique Pelleendfunc
6496d37e8e3SDominique Pelle
650*08d7b1c8Skuuotefunc Test_not_break_expression_register()
651*08d7b1c8Skuuote  call setreg('=', '1+1')
652*08d7b1c8Skuuote  if 0
653*08d7b1c8Skuuote    put =1
654*08d7b1c8Skuuote  endif
655*08d7b1c8Skuuote  call assert_equal('1+1', getreg('=', 1))
656*08d7b1c8Skuuoteendfunc
657*08d7b1c8Skuuote
6585d98dc2aSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
659