Mercurial > vim
view src/testdir/test_shortpathname.vim @ 33713:9aa03e12b2b5 v9.0.2090
patch 9.0.2090: complete_info() skips entries with 'noselect'
Commit: https://github.com/vim/vim/commit/57f9ce1a0977da13e5923214086795ffa2d28ce1
Author: Christian Brabandt <cb@256bit.org>
Date: Sat Nov 4 09:58:14 2023 +0100
patch 9.0.2090: complete_info() skips entries with 'noselect'
Problem: complete_info() skips entries with 'noselect'
Solution: Check, if first entry is at original text state
Unfortunately, Commit daef8c74375141974d61b85199b383017644978c
introduced a regression, that when ':set completeopt+=noselect' is set
and no completion item has been selected yet, it did not fill the
complete_info['items'] list.
This happened, because the current match item did not have the
CP_ORIGINAL_TEXT flag set and then the cp->prev pointer did point to the
original flag item, which caused the following while loop to not being
run but being skipped instead.
So when the 'noselect' is set, only start with to the previous selection
item, if the initial completion item has the CP_ORIGINAL_TEXT flag set,
else use the 2nd previous item instead.
fixes: #13451
closes: #13452
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 04 Nov 2023 10:15:04 +0100 |
parents | ae10b91ac6b3 |
children | cbd54806cb2c |
line wrap: on
line source
" Test for shortpathname ':8' extension. " Only for use on Win32 systems! set encoding=utf-8 scriptencoding utf-8 source check.vim CheckMSWindows func TestIt(file, bits, expected) let res = fnamemodify(a:file, a:bits) if a:expected != '' call assert_equal(substitute(a:expected, '/', '\\', 'g'), \ substitute(res, '/', '\\', 'g'), \ "'" . a:file . "'->(" . a:bits . ")->'" . res . "'") endif endfunc func Test_ColonEight() let save_dir = getcwd() " This could change for CygWin to //cygdrive/c . let dir1 = 'c:/x.x.y' let trycount = 5 while 1 if !filereadable(dir1) && !isdirectory(dir1) break endif if trycount == 1 call assert_report("Fatal: '" . dir1 . "' exists, cannot run this test") return endif " When tests run in parallel the directory may exist, wait a bit until it " is gone. sleep 5 let trycount -= 1 endwhile let file1 = dir1 . '/zz.y.txt' let nofile1 = dir1 . '/z.y.txt' let dir2 = dir1 . '/VimIsTheGreatestSinceSlicedBread' let file2 = dir2 . '/z.txt' let nofile2 = dir2 . '/zz.txt' call mkdir(dir1, 'D') let resdir1 = substitute(fnamemodify(dir1, ':p:8'), '/$', '', '') call assert_match('\V\^c:/XX\x\x\x\x~1.Y\$', resdir1) let resfile1 = resdir1 . '/ZZY~1.TXT' let resnofile1 = resdir1 . '/z.y.txt' let resdir2 = resdir1 . '/VIMIST~1' let resfile2 = resdir2 . '/z.txt' let resnofile2 = resdir2 . '/zz.txt' call mkdir(dir2, 'D') call writefile([], file1, 'D') call writefile([], file2, 'D') call TestIt(file1, ':p:8', resfile1) call TestIt(nofile1, ':p:8', resnofile1) call TestIt(file2, ':p:8', resfile2) call TestIt(nofile2, ':p:8', resnofile2) call TestIt(nofile2, ':p:8:h', fnamemodify(resnofile2, ':h')) call chdir(dir1) call TestIt(file1, ':.:8', strpart(resfile1, strlen(resdir1)+1)) call TestIt(nofile1, ':.:8', strpart(resnofile1, strlen(resdir1)+1)) call TestIt(file2, ':.:8', strpart(resfile2, strlen(resdir1)+1)) call TestIt(nofile2, ':.:8', strpart(resnofile2, strlen(resdir1)+1)) let $HOME=dir1 call TestIt(file1, ':~:8', '~' . strpart(resfile1, strlen(resdir1))) call TestIt(nofile1, ':~:8', '~' . strpart(resnofile1, strlen(resdir1))) call TestIt(file2, ':~:8', '~' . strpart(resfile2, strlen(resdir1))) call TestIt(nofile2, ':~:8', '~' . strpart(resnofile2, strlen(resdir1))) cd c:/ call chdir(save_dir) endfunc func Test_ColonEight_MultiByte() let dir = 'Xtest' let file = dir . '/日本語のファイル.txt' call mkdir(dir, 'D') call writefile([], file, 'D') let sfile = fnamemodify(file, ':8') call assert_notequal(file, sfile) call assert_match('\~', sfile) endfunc func Test_ColonEight_notexists() let non_exists='C:\windows\newfile.txt' call assert_equal(non_exists, fnamemodify(non_exists, ':p:8')) endfunc " vim: shiftwidth=2 sts=2 expandtab