Mercurial > vim
view src/testdir/test_cd.vim @ 32062:8c9f63a518f5 v9.0.1362
patch 9.0.1362: ml_get error when going to another tab
Commit: https://github.com/vim/vim/commit/99ad3a8bb95c6f860545a050472b6181e33bac1a
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Feb 27 17:18:01 2023 +0000
patch 9.0.1362: ml_get error when going to another tab
Problem: ml_get error when going to another tab. (Daniel J. Perry)
Solution: Do not call update_topline() if "curwin" is invalid.
(closes #11907)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 27 Feb 2023 18:30:04 +0100 |
parents | f7a2de8a4ddc |
children | a0f822031bfc |
line wrap: on
line source
" Test for :cd and chdir() source shared.vim source check.vim func Test_cd_large_path() " This used to crash with a heap write overflow. call assert_fails('cd ' . repeat('x', 5000), 'E344:') endfunc func Test_cd_up_and_down() let path = getcwd() cd .. call assert_notequal(path, getcwd()) exe 'cd ' .. fnameescape(path) call assert_equal(path, getcwd()) endfunc func Test_cd_no_arg() if has('unix') " Test that cd without argument goes to $HOME directory on Unix systems. let path = getcwd() cd call assert_equal($HOME, getcwd()) call assert_notequal(path, getcwd()) exe 'cd ' .. fnameescape(path) call assert_equal(path, getcwd()) else " Test that cd without argument echoes cwd on non-Unix systems. call assert_match(getcwd(), execute('cd')) endif endfunc func Test_cd_minus() " Test the :cd - goes back to the previous directory. let path = getcwd() cd .. let path_dotdot = getcwd() call assert_notequal(path, path_dotdot) cd - call assert_equal(path, getcwd()) cd - call assert_equal(path_dotdot, getcwd()) cd - call assert_equal(path, getcwd()) " Test for :cd - after a failed :cd call assert_fails('cd /nonexistent', 'E344:') call assert_equal(path, getcwd()) cd - call assert_equal(path_dotdot, getcwd()) cd - " Test for :cd - without a previous directory let lines =<< trim [SCRIPT] call assert_fails('cd -', 'E186:') call assert_fails('call chdir("-")', 'E186:') call writefile(v:errors, 'Xresult') qall! [SCRIPT] call writefile(lines, 'Xscript', 'D') if RunVim([], [], '--clean -S Xscript') call assert_equal([], readfile('Xresult')) endif call delete('Xresult') endfunc " Test for chdir() func Test_chdir_func() let topdir = getcwd() call mkdir('Xchdir/y/z', 'pR') " Create a few tabpages and windows with different directories new cd Xchdir tabnew tcd y below new below new lcd z tabfirst call assert_match('^\[global\] .*/Xchdir$', trim(execute('verbose pwd'))) call chdir('..') call assert_equal('y', fnamemodify(getcwd(1, 2), ':t')) call assert_equal('z', fnamemodify(3->getcwd(2), ':t')) tabnext | wincmd t call assert_match('^\[tabpage\] .*/y$', trim(execute('verbose pwd'))) eval '..'->chdir() call assert_equal('Xchdir', fnamemodify(getcwd(1, 2), ':t')) call assert_equal('Xchdir', fnamemodify(getcwd(2, 2), ':t')) call assert_equal('z', fnamemodify(getcwd(3, 2), ':t')) call assert_equal('testdir', fnamemodify(getcwd(1, 1), ':t')) 3wincmd w call assert_match('^\[window\] .*/z$', trim(execute('verbose pwd'))) call chdir('..') call assert_equal('Xchdir', fnamemodify(getcwd(1, 2), ':t')) call assert_equal('Xchdir', fnamemodify(getcwd(2, 2), ':t')) call assert_equal('y', fnamemodify(getcwd(3, 2), ':t')) call assert_equal('testdir', fnamemodify(getcwd(1, 1), ':t')) " Error case call assert_fails("call chdir('dir-abcd')", 'E344:') silent! let d = chdir("dir_abcd") call assert_equal("", d) " Should not crash call chdir(d) call assert_equal('', chdir([])) only | tabonly call chdir(topdir) endfunc " Test for changing to the previous directory '-' func Test_prev_dir() let topdir = getcwd() call mkdir('Xprevdir/a/b/c', 'pR') " Create a few tabpages and windows with different directories new | only tabnew | new tabnew tabfirst cd Xprevdir tabnext | wincmd t tcd a wincmd w lcd b tabnext tcd a/b/c " Change to the previous directory twice in all the windows. tabfirst cd - | cd - tabnext | wincmd t tcd - | tcd - wincmd w lcd - | lcd - tabnext tcd - | tcd - " Check the directory of all the windows tabfirst call assert_equal('Xprevdir', fnamemodify(getcwd(), ':t')) tabnext | wincmd t call assert_equal('a', fnamemodify(getcwd(), ':t')) wincmd w call assert_equal('b', fnamemodify(getcwd(), ':t')) tabnext call assert_equal('c', fnamemodify(getcwd(), ':t')) " Change to the previous directory using chdir() tabfirst call chdir("-") | call chdir("-") tabnext | wincmd t call chdir("-") | call chdir("-") wincmd w call chdir("-") | call chdir("-") tabnext call chdir("-") | call chdir("-") " Check the directory of all the windows tabfirst call assert_equal('Xprevdir', fnamemodify(getcwd(), ':t')) tabnext | wincmd t call assert_equal('a', fnamemodify(getcwd(), ':t')) wincmd w call assert_equal('b', fnamemodify(getcwd(), ':t')) tabnext call assert_equal('c', fnamemodify(getcwd(), ':t')) only | tabonly call chdir(topdir) endfunc func Test_lcd_split() let curdir = getcwd() lcd .. split lcd - call assert_equal(curdir, getcwd()) quit! endfunc func Test_cd_from_non_existing_dir() CheckNotMSWindows let saveddir = getcwd() call mkdir('Xdeleted_dir') cd Xdeleted_dir call delete(saveddir .. '/Xdeleted_dir', 'd') " Expect E187 as the current directory was deleted. call assert_fails('pwd', 'E187:') call assert_equal('', getcwd()) cd - call assert_equal(saveddir, getcwd()) endfunc func Test_cd_completion() call mkdir('XComplDir1', 'D') call mkdir('XComplDir2', 'D') call writefile([], 'XComplFile', 'D') 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 endfunc func Test_cd_unknown_dir() call mkdir('Xa', 'R') cd Xa call writefile(['text'], 'Xb.txt') edit Xa/Xb.txt let first_buf = bufnr() cd .. edit call assert_equal(first_buf, bufnr()) edit Xa/Xb.txt call assert_notequal(first_buf, bufnr()) bwipe! exe "bwipe! " .. first_buf endfunc func Test_getcwd_actual_dir() CheckOption autochdir let startdir = getcwd() call mkdir('Xactual', 'R') call test_autochdir() set autochdir edit Xactual/file.txt call assert_match('testdir.Xactual$', getcwd()) lcd .. call assert_match('testdir$', getcwd()) edit call assert_match('testdir.Xactual$', getcwd()) call assert_match('testdir$', getcwd(win_getid())) set noautochdir bwipe! call chdir(startdir) endfunc " vim: shiftwidth=2 sts=2 expandtab