]> granicus.if.org Git - vim/commitdiff
patch 8.2.0049: command line completion not fully tested v8.2.0049
authorBram Moolenaar <Bram@vim.org>
Fri, 27 Dec 2019 16:20:55 +0000 (17:20 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 27 Dec 2019 16:20:55 +0000 (17:20 +0100)
Problem:    Command line completion not fully tested.
Solution:   Add more test cases.  Make help sorting stable. (Dominique Pelle,
            closes #5402)

src/ex_cmds.c
src/testdir/test_cd.vim
src/testdir/test_cmdline.vim
src/testdir/test_help.vim
src/testdir/test_menu.vim
src/testdir/test_options.vim
src/testdir/test_syntax.vim
src/version.c

index 49104919449190ddc6da333638baf8f0d6fb01ad..c8a93bc0a89e1ae845cb430f593a38fe97d4a63b 100644 (file)
@@ -5341,10 +5341,18 @@ help_compare(const void *s1, const void *s2)
 {
     char    *p1;
     char    *p2;
+    int            cmp;
 
     p1 = *(char **)s1 + strlen(*(char **)s1) + 1;
     p2 = *(char **)s2 + strlen(*(char **)s2) + 1;
-    return strcmp(p1, p2);
+
+    // Compare by help heuristic number first.
+    cmp = strcmp(p1, p2);
+    if (cmp != 0)
+       return cmp;
+
+    // Compare by strings as tie-breaker when same heuristic number.
+    return strcmp(*(char **)s1, *(char **)s2);
 }
 
 /*
index bdb26cddcef3a51721126ece520a9ea579544a0a..05d3877c7024d3c498a570327d9b88251321c743 100644 (file)
@@ -106,3 +106,18 @@ func Test_chdir_func()
   call chdir(topdir)
   call delete('Xdir', 'rf')
 endfunc
+
+func Test_cd_completion()
+  call mkdir('XComplDir1', 'p')
+  call mkdir('XComplDir2', 'p')
+  call writefile([], 'XComplFile')
+
+  for cmd in ['cd', 'chdir', 'lcd', 'lchdir', 'tcd', 'tchdir']
+    call feedkeys(':' .. cmd .. " XCompl\<C-A>\<C-B>\"\<CR>", 'tx')
+    call assert_equal('"' .. cmd .. ' XComplDir1/ XComplDir2/', @:)
+  endfor
+
+  call delete('XComplDir1', 'd')
+  call delete('XComplDir2', 'd')
+  call delete('XComplFile')
+endfunc
index 837ef63ddafccc2b1b38d48f50b37df2793811a3..38b5826e623e007bbc4c8ec82071551b074515b8 100644 (file)
@@ -553,6 +553,14 @@ func Test_cmdline_complete_user_names()
   endif
 endfunc
 
+func Test_cmdline_complete_bang()
+  if executable('whoami')
+    return
+  endif
+  call feedkeys(":!whoam\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_match('^".*\<whoami\>', @:)
+endfunc
+
 funct Test_cmdline_complete_languages()
   let lang = substitute(execute('language messages'), '.*"\(.*\)"$', '\1', '')
 
@@ -575,6 +583,15 @@ funct Test_cmdline_complete_languages()
   endif
 endfunc
 
+func Test_cmdline_complete_env_variable()
+  let $X_VIM_TEST_COMPLETE_ENV = 'foo'
+
+  call feedkeys(":edit $X_VIM_TEST_COMPLETE_E\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_match('"edit $X_VIM_TEST_COMPLETE_ENV', @:)
+
+  unlet $X_VIM_TEST_COMPLETE_ENV
+endfunc
+
 func Test_cmdline_write_alternatefile()
   new
   call setline('.', ['one', 'two'])
index 5dd937a935cd7303866d8790069d456b4b637f4d..4f46a44c90e2f3ed8f8f6ffed7ab8314f043d655 100644 (file)
@@ -55,3 +55,8 @@ func Test_help_local_additions()
   call delete('Xruntime', 'rf')
   let &rtp = rtp_save
 endfunc
+
+func Test_help_completion()
+  call feedkeys(":help :undo\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"help :undo :undoj :undol :undojoin :undolist', @:)
+endfunc
index 0d6b78ef7188a0d7f81219efe6307901ae017b42..04d45d611c202f256b65a59cfcdd022a75869cfb 100644 (file)
@@ -45,6 +45,10 @@ func Test_menu_commands()
   imenu 2 Test.FooBar :let g:did_menu = 'insert'<CR>
   cmenu 2 Test.FooBar :let g:did_menu = 'cmdline'<CR>
   emenu n Test.FooBar
+
+  call feedkeys(":menu Test.FooB\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"menu Test.FooBar', @:)
+
   call assert_equal('normal', g:did_menu)
   emenu v Test.FooBar
   call assert_equal('visual', g:did_menu)
index 048356ae79db7ca6ef2a9289a876a194f5accf7d..636a24d6e9a08b26f56a7fc99c11e8fa05829015 100644 (file)
@@ -201,6 +201,12 @@ func Test_set_completion()
   call feedkeys(":set di\<C-A>\<C-B>\"\<CR>", 'tx')
   call assert_equal('"set dictionary diff diffexpr diffopt digraph directory display', @:)
 
+  call feedkeys(":setlocal di\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"setlocal dictionary diff diffexpr diffopt digraph directory display', @:)
+
+  call feedkeys(":setglobal di\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"setglobal dictionary diff diffexpr diffopt digraph directory display', @:)
+
   " Expand boolan options. When doing :set no<Tab>
   " vim displays the options names without "no" but completion uses "no...".
   call feedkeys(":set nodi\<C-A>\<C-B>\"\<CR>", 'tx')
@@ -239,6 +245,7 @@ func Test_set_completion()
 
   call feedkeys(":set tags=./\\\\ dif\<C-A>\<C-B>\"\<CR>", 'tx')
   call assert_equal('"set tags=./\\ diff diffexpr diffopt', @:)
+
   set tags&
 endfunc
 
index 21ee8dc62803a1050abbc2c3a408f60e8aee918a..389294ec7e7103918b99ff53c554e7fe439371dc 100644 (file)
@@ -180,6 +180,11 @@ func Test_syntax_completion()
   call assert_match('^"syn match Boolean Character ', @:)
 endfunc
 
+func Test_echohl_completion()
+  call feedkeys(":echohl no\<C-A>\<C-B>\"\<CR>", 'tx')
+  call assert_equal('"echohl NonText Normal none', @:)
+endfunc
+
 func Test_syntax_arg_skipped()
   syn clear
   syntax case ignore
index 0fc35dc834a48cb62004238e6a9056b2d3e9e39b..85c8462df93a3a85979b610180007fd3c4322bba 100644 (file)
@@ -742,6 +742,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    49,
 /**/
     48,
 /**/