neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 6c3502d85ab4d8fa26378b532290a2bac06d4fd2
parent 3e57c5216fadc3dfe5ab1d04388e2b4de1b0e8c6
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Sun,  4 Jan 2026 18:50:50 +0800

vim-patch:9.1.2050: tests: Test_cd_completion may fail

Problem:  tests: Test_cd_completion() may fail depending on the contents
          of the root directory of the current drive on Windows.
          readdir() may return a directory that cannot "cd" to, causing
          this test to fail. An example of such a directory is
          "System Volume Information" which only admin can "cd" to.
Solution: When determining the directory to use for testing, use the
          directory that we actually "cd" to successfully.
          In addition, directories with '$' in their names are also
          excluded, as they are considered environment variables during
          completion and do not work as expected.
          Example: "$RECYCLE.BIN" (Muraoka Taro).

closes: vim/vim#19078

https://github.com/vim/vim/commit/6625ba359e33f8223d146f3ae87a880c446b5470

Co-authored-by: Muraoka Taro <koron.kaoriya@gmail.com>

Diffstat:
Mtest/old/testdir/test_cd.vim | 35+++++++++++++++++++++++++++++++----
1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/test/old/testdir/test_cd.vim b/test/old/testdir/test_cd.vim @@ -227,15 +227,42 @@ func Test_cd_completion() if has('win32') " Test Windows absolute path completion + let saved_cwd = getcwd() + " Retrieve a suitable dir in the current drive - let dir = readdir('/', 'isdirectory("/" .. v:val) && len(v:val) > 2')[-1] + for d in readdir('/', 'isdirectory("/" .. v:val) && len(v:val) > 2') + " Paths containing '$' such as "$RECYCLE.BIN" are skipped because + " they are considered environment variables and completion does not + " work. + if d =~ '\V$' + continue + endif + " Skip directories that we don't have permission to "cd" into by + " actually "cd"ing into them and making sure they don't fail. + " Directory "System Volume Information" is an example of this. + try + call chdir('/' .. d) + let dir = d + " Yay! We found a suitable dir! + break + catch /:E472:/ + " Just skip directories where "cd" fails + continue + finally + call chdir(saved_cwd) + endtry + endfor + if !exists('dir') + throw 'Skipped: no testable directories found in the current drive root' + endif + " Get partial path let partial = dir[0:-2] - " Get the current drive letter - let old = chdir('/' . dir) + " Get the current drive letter and full path of the target dir + call chdir('/' .. dir) let full = getcwd() let drive = full[0] - call chdir(old) + call chdir(saved_cwd) for cmd in ['cd', 'chdir', 'lcd', 'lchdir', 'tcd', 'tchdir'] for sep in [ '/', '\']