xref: /vim-8.2.3635/src/testdir/test_excmd.vim (revision d2ea7cf1)
1" Tests for various Ex commands.
2
3source check.vim
4
5func Test_ex_delete()
6  new
7  call setline(1, ['a', 'b', 'c'])
8  2
9  " :dl is :delete with the "l" flag, not :dlist
10  .dl
11  call assert_equal(['a', 'c'], getline(1, 2))
12endfunc
13
14func Test_range_error()
15  call assert_fails(':.echo 1', 'E481:')
16  call assert_fails(':$echo 1', 'E481:')
17  call assert_fails(':1,2echo 1', 'E481:')
18  call assert_fails(':+1echo 1', 'E481:')
19  call assert_fails(':/1/echo 1', 'E481:')
20  call assert_fails(':\/echo 1', 'E481:')
21  normal vv
22  call assert_fails(":'<,'>echo 1", 'E481:')
23  call assert_fails(":\\xcenter", 'E10:')
24endfunc
25
26func Test_buffers_lastused()
27  call test_settime(localtime() - 2000) " middle
28  edit bufa
29  enew
30  call test_settime(localtime() - 10)   " newest
31  edit bufb
32  enew
33  call test_settime(1550010000)	        " oldest
34  edit bufc
35  enew
36  call test_settime(0)
37  enew
38
39  let ls = split(execute('buffers t', 'silent!'), '\n')
40  let bufs = ls->map({i,v->split(v, '"\s*')[1:2]})
41  call assert_equal(['bufb', 'bufa', 'bufc'], bufs[1:]->map({i,v->v[0]}))
42  call assert_match('1[0-3] seconds ago', bufs[1][1])
43  call assert_match('\d\d:\d\d:\d\d', bufs[2][1])
44  call assert_match('2019/02/1\d \d\d:\d\d:00', bufs[3][1])
45
46  bwipeout bufa
47  bwipeout bufb
48  bwipeout bufc
49endfunc
50
51" Test for the :copy command
52func Test_copy()
53  new
54
55  call setline(1, ['L1', 'L2', 'L3', 'L4'])
56  " copy lines in a range to inside the range
57  1,3copy 2
58  call assert_equal(['L1', 'L2', 'L1', 'L2', 'L3', 'L3', 'L4'], getline(1, 7))
59
60  " Specifying a count before using : to run an ex-command
61  exe "normal! gg4:yank\<CR>"
62  call assert_equal("L1\nL2\nL1\nL2\n", @")
63
64  close!
65endfunc
66
67" Test for the :file command
68func Test_file_cmd()
69  call assert_fails('3file', 'E474:')
70  call assert_fails('0,0file', 'E474:')
71  call assert_fails('0file abc', 'E474:')
72endfunc
73
74" Test for the :drop command
75func Test_drop_cmd()
76  call writefile(['L1', 'L2'], 'Xfile')
77  enew | only
78  drop Xfile
79  call assert_equal('L2', getline(2))
80  " Test for switching to an existing window
81  below new
82  drop Xfile
83  call assert_equal(1, winnr())
84  " Test for splitting the current window
85  enew | only
86  set modified
87  drop Xfile
88  call assert_equal(2, winnr('$'))
89  " Check for setting the argument list
90  call assert_equal(['Xfile'], argv())
91  enew | only!
92  call delete('Xfile')
93endfunc
94
95" Test for the :append command
96func Test_append_cmd()
97  new
98  call setline(1, ['  L1'])
99  call feedkeys(":append\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
100  call assert_equal(['  L1', '  L2', '  L3'], getline(1, '$'))
101  %delete _
102  " append after a specific line
103  call setline(1, ['  L1', '  L2', '  L3'])
104  call feedkeys(":2append\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
105  call assert_equal(['  L1', '  L2', '  L4', '  L5', '  L3'], getline(1, '$'))
106  %delete _
107  " append with toggling 'autoindent'
108  call setline(1, ['  L1'])
109  call feedkeys(":append!\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
110  call assert_equal(['  L1', '    L2', '      L3'], getline(1, '$'))
111  call assert_false(&autoindent)
112  %delete _
113  " append with 'autoindent' set and toggling 'autoindent'
114  set autoindent
115  call setline(1, ['  L1'])
116  call feedkeys(":append!\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
117  call assert_equal(['  L1', '  L2', '  L3'], getline(1, '$'))
118  call assert_true(&autoindent)
119  set autoindent&
120  close!
121endfunc
122
123" Test for the :insert command
124func Test_insert_cmd()
125  new
126  call setline(1, ['  L1'])
127  call feedkeys(":insert\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
128  call assert_equal(['  L2', '  L3', '  L1'], getline(1, '$'))
129  %delete _
130  " insert before a specific line
131  call setline(1, ['  L1', '  L2', '  L3'])
132  call feedkeys(":2insert\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
133  call assert_equal(['  L1', '  L4', '  L5', '  L2', '  L3'], getline(1, '$'))
134  %delete _
135  " insert with toggling 'autoindent'
136  call setline(1, ['  L1'])
137  call feedkeys(":insert!\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
138  call assert_equal(['    L2', '      L3', '  L1'], getline(1, '$'))
139  call assert_false(&autoindent)
140  %delete _
141  " insert with 'autoindent' set and toggling 'autoindent'
142  set autoindent
143  call setline(1, ['  L1'])
144  call feedkeys(":insert!\<CR>  L2\<CR>  L3\<CR>.\<CR>", 'xt')
145  call assert_equal(['  L2', '  L3', '  L1'], getline(1, '$'))
146  call assert_true(&autoindent)
147  set autoindent&
148  close!
149endfunc
150
151" Test for the :change command
152func Test_change_cmd()
153  new
154  call setline(1, ['  L1', 'L2', 'L3'])
155  call feedkeys(":change\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
156  call assert_equal(['  L4', '  L5', 'L2', 'L3'], getline(1, '$'))
157  %delete _
158  " change a specific line
159  call setline(1, ['  L1', '  L2', '  L3'])
160  call feedkeys(":2change\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
161  call assert_equal(['  L1', '  L4', '  L5', '  L3'], getline(1, '$'))
162  %delete _
163  " change with toggling 'autoindent'
164  call setline(1, ['  L1', 'L2', 'L3'])
165  call feedkeys(":change!\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
166  call assert_equal(['    L4', '      L5', 'L2', 'L3'], getline(1, '$'))
167  call assert_false(&autoindent)
168  %delete _
169  " change with 'autoindent' set and toggling 'autoindent'
170  set autoindent
171  call setline(1, ['  L1', 'L2', 'L3'])
172  call feedkeys(":change!\<CR>  L4\<CR>  L5\<CR>.\<CR>", 'xt')
173  call assert_equal(['  L4', '  L5', 'L2', 'L3'], getline(1, '$'))
174  call assert_true(&autoindent)
175  set autoindent&
176  close!
177endfunc
178
179" Test for the :language command
180func Test_language_cmd()
181  CheckFeature multi_lang
182
183  call assert_fails('language ctype non_existing_lang', 'E197:')
184  call assert_fails('language time non_existing_lang', 'E197:')
185endfunc
186
187" Test for the :confirm command dialog
188func Test_confirm_cmd()
189  CheckNotGui
190  CheckRunVimInTerminal
191
192  call writefile(['foo1'], 'Xfoo')
193  call writefile(['bar1'], 'Xbar')
194
195  " Test for saving all the modified buffers
196  let lines =<< trim END
197    set nomore
198    new Xfoo
199    call setline(1, 'foo2')
200    new Xbar
201    call setline(1, 'bar2')
202    wincmd b
203  END
204  call writefile(lines, 'Xscript')
205  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
206  call term_sendkeys(buf, ":confirm qall\n")
207  call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000)
208  call term_sendkeys(buf, "A")
209  call StopVimInTerminal(buf)
210
211  call assert_equal(['foo2'], readfile('Xfoo'))
212  call assert_equal(['bar2'], readfile('Xbar'))
213
214  " Test for discarding all the changes to modified buffers
215  let lines =<< trim END
216    set nomore
217    new Xfoo
218    call setline(1, 'foo3')
219    new Xbar
220    call setline(1, 'bar3')
221    wincmd b
222  END
223  call writefile(lines, 'Xscript')
224  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
225  call term_sendkeys(buf, ":confirm qall\n")
226  call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000)
227  call term_sendkeys(buf, "D")
228  call StopVimInTerminal(buf)
229
230  call assert_equal(['foo2'], readfile('Xfoo'))
231  call assert_equal(['bar2'], readfile('Xbar'))
232
233  " Test for saving and discarding changes to some buffers
234  let lines =<< trim END
235    set nomore
236    new Xfoo
237    call setline(1, 'foo4')
238    new Xbar
239    call setline(1, 'bar4')
240    wincmd b
241  END
242  call writefile(lines, 'Xscript')
243  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
244  call term_sendkeys(buf, ":confirm qall\n")
245  call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000)
246  call term_sendkeys(buf, "N")
247  call WaitForAssert({-> assert_match('\[Y\]es, (N)o, (C)ancel: ', term_getline(buf, 20))}, 1000)
248  call term_sendkeys(buf, "Y")
249  call StopVimInTerminal(buf)
250
251  call assert_equal(['foo4'], readfile('Xfoo'))
252  call assert_equal(['bar2'], readfile('Xbar'))
253
254  call delete('Xscript')
255  call delete('Xfoo')
256  call delete('Xbar')
257endfunc
258
259func Test_confirm_cmd_cancel()
260  CheckNotGui
261  CheckRunVimInTerminal
262
263  " Test for closing a window with a modified buffer
264  let lines =<< trim END
265    set nomore
266    new
267    call setline(1, 'abc')
268  END
269  call writefile(lines, 'Xscript')
270  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
271  call term_sendkeys(buf, ":confirm close\n")
272  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o, (C)ancel: *$',
273        \ term_getline(buf, 20))}, 1000)
274  call term_sendkeys(buf, "C")
275  call WaitForAssert({-> assert_equal('', term_getline(buf, 20))}, 1000)
276  call term_sendkeys(buf, ":confirm close\n")
277  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o, (C)ancel: *$',
278        \ term_getline(buf, 20))}, 1000)
279  call term_sendkeys(buf, "N")
280  call WaitForAssert({-> assert_match('^ *0,0-1         All$',
281        \ term_getline(buf, 20))}, 1000)
282  call StopVimInTerminal(buf)
283  call delete('Xscript')
284endfunc
285
286" The ":confirm" prompt was sometimes used with the terminal in cooked mode.
287" This test verifies that a "\<CR>" character is NOT required to respond to a
288" prompt from the ":conf q" and ":conf wq" commands.
289func Test_confirm_q_wq()
290  CheckNotGui
291  CheckRunVimInTerminal
292
293  call writefile(['foo'], 'Xfoo')
294
295  let lines =<< trim END
296    set hidden nomore
297    call setline(1, 'abc')
298    edit Xfoo
299  END
300  call writefile(lines, 'Xscript')
301  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
302  call term_sendkeys(buf, ":confirm q\n")
303  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o, (C)ancel: *$',
304        \ term_getline(buf, 20))}, 1000)
305  call term_sendkeys(buf, 'C')
306  call WaitForAssert({-> assert_notmatch('^\[Y\]es, (N)o, (C)ancel: C*$',
307        \ term_getline(buf, 20))}, 1000)
308
309  call term_sendkeys(buf, ":edit Xfoo\n")
310  call term_sendkeys(buf, ":confirm wq\n")
311  call WaitForAssert({-> assert_match('^\[Y\]es, (N)o, (C)ancel: *$',
312        \ term_getline(buf, 20))}, 1000)
313  call term_sendkeys(buf, 'C')
314  call WaitForAssert({-> assert_notmatch('^\[Y\]es, (N)o, (C)ancel: C*$',
315        \ term_getline(buf, 20))}, 1000)
316  call StopVimInTerminal(buf)
317
318  call delete('Xscript')
319  call delete('Xfoo')
320endfunc
321
322func Test_confirm_write_ro()
323  CheckNotGui
324  CheckRunVimInTerminal
325
326  call writefile(['foo'], 'Xconfirm_write_ro')
327  let lines =<< trim END
328    set nobackup ff=unix cmdheight=2
329    edit Xconfirm_write_ro
330    norm Abar
331  END
332  call writefile(lines, 'Xscript')
333  let buf = RunVimInTerminal('-S Xscript', {'rows': 20})
334
335  " Try to write with 'ro' option.
336  call term_sendkeys(buf, ":set ro | confirm w\n")
337  call WaitForAssert({-> assert_match("^'readonly' option is set for \"Xconfirm_write_ro\"\. *$",
338        \            term_getline(buf, 18))}, 1000)
339  call WaitForAssert({-> assert_match('^Do you wish to write anyway? *$',
340        \            term_getline(buf, 19))}, 1000)
341  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
342  call term_sendkeys(buf, 'N')
343  call WaitForAssert({-> assert_match('^ *$', term_getline(buf, 19))}, 1000)
344  call WaitForAssert({-> assert_match('.* All$', term_getline(buf, 20))}, 1000)
345  call assert_equal(['foo'], readfile('Xconfirm_write_ro'))
346
347  call term_sendkeys(buf, ":confirm w\n")
348  call WaitForAssert({-> assert_match("^'readonly' option is set for \"Xconfirm_write_ro\"\. *$",
349        \            term_getline(buf, 18))}, 1000)
350  call WaitForAssert({-> assert_match('^Do you wish to write anyway? *$',
351        \            term_getline(buf, 19))}, 1000)
352  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
353  call term_sendkeys(buf, 'Y')
354  call WaitForAssert({-> assert_match('^"Xconfirm_write_ro" 1L, 7B written$',
355        \            term_getline(buf, 19))}, 1000)
356  call assert_equal(['foobar'], readfile('Xconfirm_write_ro'))
357
358  " Try to write with read-only file permissions.
359  call setfperm('Xconfirm_write_ro', 'r--r--r--')
360  call term_sendkeys(buf, ":set noro | undo | confirm w\n")
361  call WaitForAssert({-> assert_match("^File permissions of \"Xconfirm_write_ro\" are read-only\. *$",
362        \            term_getline(buf, 17))}, 1000)
363  call WaitForAssert({-> assert_match('^It may still be possible to write it\. *$',
364        \            term_getline(buf, 18))}, 1000)
365  call WaitForAssert({-> assert_match('^Do you wish to try? *$', term_getline(buf, 19))}, 1000)
366  call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000)
367  call term_sendkeys(buf, 'Y')
368  call WaitForAssert({-> assert_match('^"Xconfirm_write_ro" 1L, 4B written$',
369        \            term_getline(buf, 19))}, 1000)
370  call assert_equal(['foo'], readfile('Xconfirm_write_ro'))
371
372  call StopVimInTerminal(buf)
373  call delete('Xscript')
374  call delete('Xconfirm_write_ro')
375endfunc
376
377" Test for the :print command
378func Test_print_cmd()
379  call assert_fails('print', 'E749:')
380endfunc
381
382" Test for the :winsize command
383func Test_winsize_cmd()
384  call assert_fails('winsize 1', 'E465:')
385  call assert_fails('winsize 1 x', 'E465:')
386  call assert_fails('win_getid(1)', 'E475: Invalid argument: _getid(1)')
387  " Actually changing the window size would be flaky.
388endfunc
389
390" Test for the :redir command
391" NOTE: if you run tests as root this will fail.  Don't run tests as root!
392func Test_redir_cmd()
393  call assert_fails('redir @@', 'E475:')
394  call assert_fails('redir abc', 'E475:')
395  call assert_fails('redir => 1abc', 'E474:')
396  call assert_fails('redir => a b', 'E488:')
397  call assert_fails('redir => abc[1]', 'E121:')
398  let b = 0zFF
399  call assert_fails('redir =>> b', 'E734:')
400  unlet b
401
402  if has('unix')
403    " Redirecting to a directory name
404    call mkdir('Xdir')
405    call assert_fails('redir > Xdir', 'E17:')
406    call delete('Xdir', 'd')
407  endif
408
409  " Test for redirecting to a register
410  redir @q> | echon 'clean ' | redir END
411  redir @q>> | echon 'water' | redir END
412  call assert_equal('clean water', @q)
413
414  " Test for redirecting to a variable
415  redir => color | echon 'blue ' | redir END
416  redir =>> color | echon 'sky' | redir END
417  call assert_equal('blue sky', color)
418endfunc
419
420func Test_redir_cmd_readonly()
421  CheckNotRoot
422
423  " Redirecting to a read-only file
424  call writefile([], 'Xfile')
425  call setfperm('Xfile', 'r--r--r--')
426  call assert_fails('redir! > Xfile', 'E190:')
427  call delete('Xfile')
428endfunc
429
430" Test for the :filetype command
431func Test_filetype_cmd()
432  call assert_fails('filetype abc', 'E475:')
433endfunc
434
435" Test for the :mode command
436func Test_mode_cmd()
437  call assert_fails('mode abc', 'E359:')
438endfunc
439
440" Test for the :sleep command
441func Test_sleep_cmd()
442  call assert_fails('sleep x', 'E475:')
443endfunc
444
445" Test for the :read command
446func Test_read_cmd()
447  call writefile(['one'], 'Xfile')
448  new
449  call assert_fails('read', 'E32:')
450  edit Xfile
451  read
452  call assert_equal(['one', 'one'], getline(1, '$'))
453  close!
454  new
455  read Xfile
456  call assert_equal(['', 'one'], getline(1, '$'))
457  call deletebufline('', 1, '$')
458  call feedkeys("Qr Xfile\<CR>visual\<CR>", 'xt')
459  call assert_equal(['one'], getline(1, '$'))
460  close!
461  call delete('Xfile')
462endfunc
463
464" Test for running Ex commands when text is locked.
465" <C-\>e in the command line is used to lock the text
466func Test_run_excmd_with_text_locked()
467  " :quit
468  let cmd = ":\<C-\>eexecute('quit')\<CR>\<C-C>"
469  call assert_fails("call feedkeys(cmd, 'xt')", 'E565:')
470
471  " :qall
472  let cmd = ":\<C-\>eexecute('qall')\<CR>\<C-C>"
473  call assert_fails("call feedkeys(cmd, 'xt')", 'E565:')
474
475  " :exit
476  let cmd = ":\<C-\>eexecute('exit')\<CR>\<C-C>"
477  call assert_fails("call feedkeys(cmd, 'xt')", 'E565:')
478
479  " :close - should be ignored
480  new
481  let cmd = ":\<C-\>eexecute('close')\<CR>\<C-C>"
482  call assert_equal(2, winnr('$'))
483  close
484
485  call assert_fails("call feedkeys(\":\<C-R>=execute('bnext')\<CR>\", 'xt')", 'E565:')
486
487  " :tabfirst
488  tabnew
489  call assert_fails("call feedkeys(\":\<C-R>=execute('tabfirst')\<CR>\", 'xt')", 'E565:')
490  tabclose
491endfunc
492
493" Test for the :verbose command
494func Test_verbose_cmd()
495  call assert_equal(['  verbose=1'], split(execute('verbose set vbs'), "\n"))
496  call assert_equal(['  verbose=0'], split(execute('0verbose set vbs'), "\n"))
497  let l = execute("4verbose set verbose | set verbose")
498  call assert_equal(['  verbose=4', '  verbose=0'], split(l, "\n"))
499endfunc
500
501" Test for the :delete command and the related abbreviated commands
502func Test_excmd_delete()
503  new
504  call setline(1, ['foo', "\tbar"])
505  call assert_equal(['^Ibar$'], split(execute('dl'), "\n"))
506  call setline(1, ['foo', "\tbar"])
507  call assert_equal(['^Ibar$'], split(execute('dell'), "\n"))
508  call setline(1, ['foo', "\tbar"])
509  call assert_equal(['^Ibar$'], split(execute('delel'), "\n"))
510  call setline(1, ['foo', "\tbar"])
511  call assert_equal(['^Ibar$'], split(execute('deletl'), "\n"))
512  call setline(1, ['foo', "\tbar"])
513  call assert_equal(['^Ibar$'], split(execute('deletel'), "\n"))
514  call setline(1, ['foo', "\tbar"])
515  call assert_equal(['        bar'], split(execute('dp'), "\n"))
516  call setline(1, ['foo', "\tbar"])
517  call assert_equal(['        bar'], split(execute('dep'), "\n"))
518  call setline(1, ['foo', "\tbar"])
519  call assert_equal(['        bar'], split(execute('delp'), "\n"))
520  call setline(1, ['foo', "\tbar"])
521  call assert_equal(['        bar'], split(execute('delep'), "\n"))
522  call setline(1, ['foo', "\tbar"])
523  call assert_equal(['        bar'], split(execute('deletp'), "\n"))
524  call setline(1, ['foo', "\tbar"])
525  call assert_equal(['        bar'], split(execute('deletep'), "\n"))
526  close!
527endfunc
528
529" Test for commands that are blocked in a sandbox
530func Sandbox_tests()
531  call assert_fails("call histadd(':', 'ls')", 'E48:')
532  call assert_fails("call mkdir('Xdir')", 'E48:')
533  call assert_fails("call rename('a', 'b')", 'E48:')
534  call assert_fails("call setbufvar(1, 'myvar', 1)", 'E48:')
535  call assert_fails("call settabvar(1, 'myvar', 1)", 'E48:')
536  call assert_fails("call settabwinvar(1, 1, 'myvar', 1)", 'E48:')
537  call assert_fails("call setwinvar(1, 'myvar', 1)", 'E48:')
538  call assert_fails("call timer_start(100, '')", 'E48:')
539  if has('channel')
540    call assert_fails("call prompt_setcallback(1, '')", 'E48:')
541    call assert_fails("call prompt_setinterrupt(1, '')", 'E48:')
542    call assert_fails("call prompt_setprompt(1, '')", 'E48:')
543  endif
544  call assert_fails("let $TESTVAR=1", 'E48:')
545  call assert_fails("call feedkeys('ivim')", 'E48:')
546  call assert_fails("source! Xfile", 'E48:')
547  call assert_fails("call delete('Xfile')", 'E48:')
548  call assert_fails("call writefile([], 'Xfile')", 'E48:')
549  call assert_fails('!ls', 'E48:')
550  call assert_fails('shell', 'E48:')
551  call assert_fails('stop', 'E48:')
552  call assert_fails('exe "normal \<C-Z>"', 'E48:')
553  set insertmode
554  call assert_fails('call feedkeys("\<C-Z>", "xt")', 'E48:')
555  set insertmode&
556  call assert_fails('suspend', 'E48:')
557  call assert_fails('call system("ls")', 'E48:')
558  call assert_fails('call systemlist("ls")', 'E48:')
559  if has('clientserver')
560    call assert_fails('let s=remote_expr("gvim", "2+2")', 'E48:')
561    if !has('win32')
562      " remote_foreground() doesn't thrown an error message on MS-Windows
563      call assert_fails('call remote_foreground("gvim")', 'E48:')
564    endif
565    call assert_fails('let s=remote_peek("gvim")', 'E48:')
566    call assert_fails('let s=remote_read("gvim")', 'E48:')
567    call assert_fails('let s=remote_send("gvim", "abc")', 'E48:')
568    call assert_fails('let s=server2client("gvim", "abc")', 'E48:')
569  endif
570  if has('terminal')
571    call assert_fails('terminal', 'E48:')
572    call assert_fails('call term_start("vim")', 'E48:')
573    call assert_fails('call term_dumpwrite(1, "Xfile")', 'E48:')
574  endif
575  if has('channel')
576    call assert_fails("call ch_logfile('chlog')", 'E48:')
577    call assert_fails("call ch_open('localhost:8765')", 'E48:')
578  endif
579  if has('job')
580    call assert_fails("call job_start('vim')", 'E48:')
581  endif
582  if has('unix') && has('libcall')
583    call assert_fails("echo libcall('libc.so', 'getenv', 'HOME')", 'E48:')
584  endif
585  if has('unix')
586    call assert_fails('cd `pwd`', 'E48:')
587  endif
588endfunc
589
590func Test_sandbox()
591  sandbox call Sandbox_tests()
592endfunc
593
594func Test_command_not_implemented_E319()
595  if !has('mzscheme')
596    call assert_fails('mzscheme', 'E319:')
597  endif
598endfunc
599
600" vim: shiftwidth=2 sts=2 expandtab
601