changeset 16578:5726af4931e3 v8.1.1292

patch 8.1.1292: invalid command line arguments not tested commit https://github.com/vim/vim/commit/ba9ea91beb8f687b0f61b28319c1dbdced2f46ca Author: Bram Moolenaar <Bram@vim.org> Date: Tue May 7 22:10:50 2019 +0200 patch 8.1.1292: invalid command line arguments not tested Problem: Invalid command line arguments not tested. Solution: Add a test. (Dominique Pelle, closes https://github.com/vim/vim/issues/4346)
author Bram Moolenaar <Bram@vim.org>
date Tue, 07 May 2019 22:15:06 +0200
parents 3afc140c9ef6
children 083130237591
files src/testdir/test_startup.vim src/version.c
diffstat 2 files changed, 92 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_startup.vim
+++ b/src/testdir/test_startup.vim
@@ -385,6 +385,96 @@ func Test_A_F_H_arg()
   call delete('Xtestout')
 endfunc
 
+func Test_invalid_args()
+  if !has('unix') || has('gui_running')
+    " can't get output of Vim.
+    return
+  endif
+
+  for opt in ['-Y', '--does-not-exist']
+    let out = split(system(GetVimCommand() .. ' ' .. opt), "\n")
+    call assert_equal(1, v:shell_error)
+    call assert_match('^VIM - Vi IMproved .* (.*)$',              out[0])
+    call assert_equal('Unknown option argument: "' .. opt .. '"', out[1])
+    call assert_equal('More info with: "vim -h"',                 out[2])
+  endfor
+
+  for opt in ['-c', '-i', '-s', '-t', '-T', '-u', '-U', '-w', '-W', '--cmd', '--startuptime']
+    let out = split(system(GetVimCommand() .. ' '  .. opt), "\n")
+    call assert_equal(1, v:shell_error)
+    call assert_match('^VIM - Vi IMproved .* (.*)$',             out[0])
+    call assert_equal('Argument missing after: "' .. opt .. '"', out[1])
+    call assert_equal('More info with: "vim -h"',                out[2])
+  endfor
+
+  if has('clientserver')
+    " FIXME: need to add --servername to this list
+    " but it causes vim-8.1.1282 to crash!
+    for opt in ['--remote', '--remote-send', '--remote-silent', '--remote-expr',
+          \     '--remote-tab', '--remote-tab-wait',
+          \     '--remote-tab-wait-silent', '--remote-tab-silent',
+          \     '--remote-wait', '--remote-wait-silent',
+          \    ]
+      let out = split(system(GetVimCommand() .. ' '  .. opt), "\n")
+      call assert_equal(1, v:shell_error)
+      call assert_match('^VIM - Vi IMproved .* (.*)$',             out[0])
+      call assert_equal('Argument missing after: "' .. opt .. '"', out[1])
+      call assert_equal('More info with: "vim -h"',                out[2])
+    endfor
+  endif
+
+  " FIXME: commented out as this causes vim-8.1.1282 to crash!
+  "if has('clipboard')
+  "  let out = split(system(GetVimCommand() .. ' --display'), "\n")
+  "  call assert_equal(1, v:shell_error)
+  "  call assert_match('^VIM - Vi IMproved .* (.*)$',         out[0])
+  "  call assert_equal('Argument missing after: "--display"', out[1])
+  "  call assert_equal('More info with: "vim -h"',            out[2])
+  "endif
+
+  let out = split(system(GetVimCommand() .. ' -ix'), "\n")
+  call assert_equal(1, v:shell_error)
+  call assert_match('^VIM - Vi IMproved .* (.*)$',          out[0])
+  call assert_equal('Garbage after option argument: "-ix"', out[1])
+  call assert_equal('More info with: "vim -h"',             out[2])
+
+  let out = split(system(GetVimCommand() .. ' - xxx'), "\n")
+  call assert_equal(1, v:shell_error)
+  call assert_match('^VIM - Vi IMproved .* (.*)$',    out[0])
+  call assert_equal('Too many edit arguments: "xxx"', out[1])
+  call assert_equal('More info with: "vim -h"',       out[2])
+
+  " Detect invalid repeated arguments '-t foo -t foo", '-q foo -q foo'.
+  for opt in ['-t', '-q']
+    let out = split(system(GetVimCommand() .. repeat(' ' .. opt .. ' foo', 2)), "\n")
+    call assert_equal(1, v:shell_error)
+    call assert_match('^VIM - Vi IMproved .* (.*)$',              out[0])
+    call assert_equal('Too many edit arguments: "' .. opt .. '"', out[1])
+    call assert_equal('More info with: "vim -h"',                 out[2])
+  endfor
+
+  for opt in [' -cq', ' --cmd q', ' +', ' -S foo']
+    let out = split(system(GetVimCommand() .. repeat(opt, 11)), "\n")
+    call assert_equal(1, v:shell_error)
+    " FIXME: The error message given by Vim is not ideal in case of repeated
+    " -S foo since it does not mention -S.
+    call assert_match('^VIM - Vi IMproved .* (.*)$',                                    out[0])
+    call assert_equal('Too many "+command", "-c command" or "--cmd command" arguments', out[1])
+    call assert_equal('More info with: "vim -h"',                                       out[2])
+  endfor
+
+  " FIXME: commented out as this causes vim-8.1.1282 to crash!
+  "if has('gui_gtk')
+  "  for opt in ['--socketid x', '--socketid 0xg']
+  "    let out = split(system(GetVimCommand() .. ' ' .. opt), "\n")
+  "    call assert_equal(1, v:shell_error)
+  "    call assert_match('^VIM - Vi IMproved .* (.*)$',        out[0])
+  "    call assert_equal('Invalid argument for: "--socketid"', out[1])
+  "    call assert_equal('More info with: "vim -h"',           out[2])
+  "  endfor
+  "endif
+endfunc
+
 func Test_file_args()
   let after = [
 	\ 'call writefile(argv(), "Xtestout")',
--- a/src/version.c
+++ b/src/version.c
@@ -768,6 +768,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1292,
+/**/
     1291,
 /**/
     1290,