11063f3d2SBram Moolenaar" Test for :cd and chdir() 215618fa6SBram Moolenaar 39f6277bdSBram Moolenaarsource shared.vim 4fe3418abSDominique Pellesource check.vim 59f6277bdSBram Moolenaar 615618fa6SBram Moolenaarfunc Test_cd_large_path() 715618fa6SBram Moolenaar " This used to crash with a heap write overflow. 89b7bf9e9SBram Moolenaar call assert_fails('cd ' . repeat('x', 5000), 'E344:') 915618fa6SBram Moolenaarendfunc 1015618fa6SBram Moolenaar 1115618fa6SBram Moolenaarfunc Test_cd_up_and_down() 1215618fa6SBram Moolenaar let path = getcwd() 1315618fa6SBram Moolenaar cd .. 14b2e0c94aSBram Moolenaar call assert_notequal(path, getcwd()) 153503d7c9SBram Moolenaar exe 'cd ' .. fnameescape(path) 1615618fa6SBram Moolenaar call assert_equal(path, getcwd()) 1715618fa6SBram Moolenaarendfunc 18b2e0c94aSBram Moolenaar 19b2e0c94aSBram Moolenaarfunc Test_cd_no_arg() 20b2e0c94aSBram Moolenaar if has('unix') 21b2e0c94aSBram Moolenaar " Test that cd without argument goes to $HOME directory on Unix systems. 22b2e0c94aSBram Moolenaar let path = getcwd() 23b2e0c94aSBram Moolenaar cd 24b2e0c94aSBram Moolenaar call assert_equal($HOME, getcwd()) 25b2e0c94aSBram Moolenaar call assert_notequal(path, getcwd()) 263503d7c9SBram Moolenaar exe 'cd ' .. fnameescape(path) 27b2e0c94aSBram Moolenaar call assert_equal(path, getcwd()) 28b2e0c94aSBram Moolenaar else 29b2e0c94aSBram Moolenaar " Test that cd without argument echoes cwd on non-Unix systems. 30b2e0c94aSBram Moolenaar call assert_match(getcwd(), execute('cd')) 31b2e0c94aSBram Moolenaar endif 32b2e0c94aSBram Moolenaarendfunc 33b2e0c94aSBram Moolenaar 34b2e0c94aSBram Moolenaarfunc Test_cd_minus() 35b2e0c94aSBram Moolenaar " Test the :cd - goes back to the previous directory. 36b2e0c94aSBram Moolenaar let path = getcwd() 37b2e0c94aSBram Moolenaar cd .. 38b2e0c94aSBram Moolenaar let path_dotdot = getcwd() 39b2e0c94aSBram Moolenaar call assert_notequal(path, path_dotdot) 40b2e0c94aSBram Moolenaar cd - 41b2e0c94aSBram Moolenaar call assert_equal(path, getcwd()) 42b2e0c94aSBram Moolenaar cd - 43b2e0c94aSBram Moolenaar call assert_equal(path_dotdot, getcwd()) 44b2e0c94aSBram Moolenaar cd - 45b2e0c94aSBram Moolenaar call assert_equal(path, getcwd()) 469f6277bdSBram Moolenaar 479f6277bdSBram Moolenaar " Test for :cd - without a previous directory 489f6277bdSBram Moolenaar let lines =<< trim [SCRIPT] 499f6277bdSBram Moolenaar call assert_fails('cd -', 'E186:') 509f6277bdSBram Moolenaar call assert_fails('call chdir("-")', 'E186:') 519f6277bdSBram Moolenaar call writefile(v:errors, 'Xresult') 529f6277bdSBram Moolenaar qall! 539f6277bdSBram Moolenaar [SCRIPT] 549f6277bdSBram Moolenaar call writefile(lines, 'Xscript') 559f6277bdSBram Moolenaar if RunVim([], [], '--clean -S Xscript') 569f6277bdSBram Moolenaar call assert_equal([], readfile('Xresult')) 579f6277bdSBram Moolenaar endif 589f6277bdSBram Moolenaar call delete('Xscript') 599f6277bdSBram Moolenaar call delete('Xresult') 60b2e0c94aSBram Moolenaarendfunc 61b2e0c94aSBram Moolenaar 621063f3d2SBram Moolenaar" Test for chdir() 631063f3d2SBram Moolenaarfunc Test_chdir_func() 641063f3d2SBram Moolenaar let topdir = getcwd() 651063f3d2SBram Moolenaar call mkdir('Xdir/y/z', 'p') 661063f3d2SBram Moolenaar 671063f3d2SBram Moolenaar " Create a few tabpages and windows with different directories 681063f3d2SBram Moolenaar new 691063f3d2SBram Moolenaar cd Xdir 701063f3d2SBram Moolenaar tabnew 711063f3d2SBram Moolenaar tcd y 721063f3d2SBram Moolenaar below new 731063f3d2SBram Moolenaar below new 741063f3d2SBram Moolenaar lcd z 751063f3d2SBram Moolenaar 761063f3d2SBram Moolenaar tabfirst 7795058724SBram Moolenaar call assert_match('^\[global\] .*/Xdir$', trim(execute('verbose pwd'))) 781063f3d2SBram Moolenaar call chdir('..') 791063f3d2SBram Moolenaar call assert_equal('y', fnamemodify(getcwd(1, 2), ':t')) 804c313b13SBram Moolenaar call assert_equal('z', fnamemodify(3->getcwd(2), ':t')) 811063f3d2SBram Moolenaar tabnext | wincmd t 8295058724SBram Moolenaar call assert_match('^\[tabpage\] .*/y$', trim(execute('verbose pwd'))) 831a3a8916SBram Moolenaar eval '..'->chdir() 841063f3d2SBram Moolenaar call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t')) 851063f3d2SBram Moolenaar call assert_equal('Xdir', fnamemodify(getcwd(2, 2), ':t')) 861063f3d2SBram Moolenaar call assert_equal('z', fnamemodify(getcwd(3, 2), ':t')) 871063f3d2SBram Moolenaar call assert_equal('testdir', fnamemodify(getcwd(1, 1), ':t')) 881063f3d2SBram Moolenaar 3wincmd w 8995058724SBram Moolenaar call assert_match('^\[window\] .*/z$', trim(execute('verbose pwd'))) 901063f3d2SBram Moolenaar call chdir('..') 911063f3d2SBram Moolenaar call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t')) 921063f3d2SBram Moolenaar call assert_equal('Xdir', fnamemodify(getcwd(2, 2), ':t')) 931063f3d2SBram Moolenaar call assert_equal('y', fnamemodify(getcwd(3, 2), ':t')) 941063f3d2SBram Moolenaar call assert_equal('testdir', fnamemodify(getcwd(1, 1), ':t')) 951063f3d2SBram Moolenaar 961063f3d2SBram Moolenaar " Error case 979b7bf9e9SBram Moolenaar call assert_fails("call chdir('dir-abcd')", 'E344:') 981063f3d2SBram Moolenaar silent! let d = chdir("dir_abcd") 991063f3d2SBram Moolenaar call assert_equal("", d) 1007cc96923SBram Moolenaar " Should not crash 1017cc96923SBram Moolenaar call chdir(d) 10292b83ccfSBram Moolenaar call assert_equal('', chdir([])) 1031063f3d2SBram Moolenaar 1041063f3d2SBram Moolenaar only | tabonly 1053503d7c9SBram Moolenaar call chdir(topdir) 1061063f3d2SBram Moolenaar call delete('Xdir', 'rf') 1071063f3d2SBram Moolenaarendfunc 108297610baSBram Moolenaar 109002bc799SBram Moolenaar" Test for changing to the previous directory '-' 110002bc799SBram Moolenaarfunc Test_prev_dir() 111002bc799SBram Moolenaar let topdir = getcwd() 112002bc799SBram Moolenaar call mkdir('Xdir/a/b/c', 'p') 113002bc799SBram Moolenaar 114002bc799SBram Moolenaar " Create a few tabpages and windows with different directories 115002bc799SBram Moolenaar new | only 116002bc799SBram Moolenaar tabnew | new 117002bc799SBram Moolenaar tabnew 118002bc799SBram Moolenaar tabfirst 119002bc799SBram Moolenaar cd Xdir 120002bc799SBram Moolenaar tabnext | wincmd t 121002bc799SBram Moolenaar tcd a 122002bc799SBram Moolenaar wincmd w 123002bc799SBram Moolenaar lcd b 124002bc799SBram Moolenaar tabnext 125002bc799SBram Moolenaar tcd a/b/c 126002bc799SBram Moolenaar 127002bc799SBram Moolenaar " Change to the previous directory twice in all the windows. 128002bc799SBram Moolenaar tabfirst 129002bc799SBram Moolenaar cd - | cd - 130002bc799SBram Moolenaar tabnext | wincmd t 131002bc799SBram Moolenaar tcd - | tcd - 132002bc799SBram Moolenaar wincmd w 133002bc799SBram Moolenaar lcd - | lcd - 134002bc799SBram Moolenaar tabnext 135002bc799SBram Moolenaar tcd - | tcd - 136002bc799SBram Moolenaar 137002bc799SBram Moolenaar " Check the directory of all the windows 138002bc799SBram Moolenaar tabfirst 139002bc799SBram Moolenaar call assert_equal('Xdir', fnamemodify(getcwd(), ':t')) 140002bc799SBram Moolenaar tabnext | wincmd t 141002bc799SBram Moolenaar call assert_equal('a', fnamemodify(getcwd(), ':t')) 142002bc799SBram Moolenaar wincmd w 143002bc799SBram Moolenaar call assert_equal('b', fnamemodify(getcwd(), ':t')) 144002bc799SBram Moolenaar tabnext 145002bc799SBram Moolenaar call assert_equal('c', fnamemodify(getcwd(), ':t')) 146002bc799SBram Moolenaar 147002bc799SBram Moolenaar " Change to the previous directory using chdir() 148002bc799SBram Moolenaar tabfirst 149002bc799SBram Moolenaar call chdir("-") | call chdir("-") 150002bc799SBram Moolenaar tabnext | wincmd t 151002bc799SBram Moolenaar call chdir("-") | call chdir("-") 152002bc799SBram Moolenaar wincmd w 153002bc799SBram Moolenaar call chdir("-") | call chdir("-") 154002bc799SBram Moolenaar tabnext 155002bc799SBram Moolenaar call chdir("-") | call chdir("-") 156002bc799SBram Moolenaar 157002bc799SBram Moolenaar " Check the directory of all the windows 158002bc799SBram Moolenaar tabfirst 159002bc799SBram Moolenaar call assert_equal('Xdir', fnamemodify(getcwd(), ':t')) 160002bc799SBram Moolenaar tabnext | wincmd t 161002bc799SBram Moolenaar call assert_equal('a', fnamemodify(getcwd(), ':t')) 162002bc799SBram Moolenaar wincmd w 163002bc799SBram Moolenaar call assert_equal('b', fnamemodify(getcwd(), ':t')) 164002bc799SBram Moolenaar tabnext 165002bc799SBram Moolenaar call assert_equal('c', fnamemodify(getcwd(), ':t')) 166002bc799SBram Moolenaar 167002bc799SBram Moolenaar only | tabonly 168002bc799SBram Moolenaar call chdir(topdir) 169002bc799SBram Moolenaar call delete('Xdir', 'rf') 170002bc799SBram Moolenaarendfunc 171002bc799SBram Moolenaar 172a9a47d15SBram Moolenaarfunc Test_lcd_split() 173a9a47d15SBram Moolenaar let curdir = getcwd() 174a9a47d15SBram Moolenaar lcd .. 175a9a47d15SBram Moolenaar split 176a9a47d15SBram Moolenaar lcd - 177a9a47d15SBram Moolenaar call assert_equal(curdir, getcwd()) 178a9a47d15SBram Moolenaar quit! 179a9a47d15SBram Moolenaarendfunc 180a9a47d15SBram Moolenaar 181fe3418abSDominique Pellefunc Test_cd_from_non_existing_dir() 182fe3418abSDominique Pelle CheckNotMSWindows 183fe3418abSDominique Pelle 184fe3418abSDominique Pelle let saveddir = getcwd() 185fe3418abSDominique Pelle call mkdir('Xdeleted_dir') 186fe3418abSDominique Pelle cd Xdeleted_dir 187fe3418abSDominique Pelle call delete(saveddir .. '/Xdeleted_dir', 'd') 188fe3418abSDominique Pelle 189fe3418abSDominique Pelle " Expect E187 as the current directory was deleted. 190fe3418abSDominique Pelle call assert_fails('pwd', 'E187:') 191fe3418abSDominique Pelle call assert_equal('', getcwd()) 192fe3418abSDominique Pelle cd - 193fe3418abSDominique Pelle call assert_equal(saveddir, getcwd()) 194fe3418abSDominique Pelleendfunc 195fe3418abSDominique Pelle 196297610baSBram Moolenaarfunc Test_cd_completion() 197297610baSBram Moolenaar call mkdir('XComplDir1', 'p') 198297610baSBram Moolenaar call mkdir('XComplDir2', 'p') 199297610baSBram Moolenaar call writefile([], 'XComplFile') 200297610baSBram Moolenaar 201297610baSBram Moolenaar for cmd in ['cd', 'chdir', 'lcd', 'lchdir', 'tcd', 'tchdir'] 202297610baSBram Moolenaar call feedkeys(':' .. cmd .. " XCompl\<C-A>\<C-B>\"\<CR>", 'tx') 203297610baSBram Moolenaar call assert_equal('"' .. cmd .. ' XComplDir1/ XComplDir2/', @:) 204297610baSBram Moolenaar endfor 205297610baSBram Moolenaar 206297610baSBram Moolenaar call delete('XComplDir1', 'd') 207297610baSBram Moolenaar call delete('XComplDir2', 'd') 208297610baSBram Moolenaar call delete('XComplFile') 209297610baSBram Moolenaarendfunc 2106d91bcb4SBram Moolenaar 211c6376c79SBram Moolenaarfunc Test_cd_unknown_dir() 212c6376c79SBram Moolenaar call mkdir('Xa') 213c6376c79SBram Moolenaar cd Xa 214c6376c79SBram Moolenaar call writefile(['text'], 'Xb.txt') 215c6376c79SBram Moolenaar edit Xa/Xb.txt 216c6376c79SBram Moolenaar let first_buf = bufnr() 217c6376c79SBram Moolenaar cd .. 218c6376c79SBram Moolenaar edit 219c6376c79SBram Moolenaar call assert_equal(first_buf, bufnr()) 220c6376c79SBram Moolenaar edit Xa/Xb.txt 221c6376c79SBram Moolenaar call assert_notequal(first_buf, bufnr()) 222c6376c79SBram Moolenaar 223c6376c79SBram Moolenaar bwipe! 224c6376c79SBram Moolenaar exe "bwipe! " .. first_buf 225c6376c79SBram Moolenaar call delete('Xa', 'rf') 226c6376c79SBram Moolenaarendfunc 227c6376c79SBram Moolenaar 228*851c7a69SBram Moolenaarfunc Test_getcwd_actual_dir() 229*851c7a69SBram Moolenaar let startdir = getcwd() 230*851c7a69SBram Moolenaar call mkdir('Xactual') 231*851c7a69SBram Moolenaar call test_autochdir() 232*851c7a69SBram Moolenaar set autochdir 233*851c7a69SBram Moolenaar edit Xactual/file.txt 234*851c7a69SBram Moolenaar call assert_match('testdir.Xactual$', getcwd()) 235*851c7a69SBram Moolenaar lcd .. 236*851c7a69SBram Moolenaar call assert_match('testdir$', getcwd()) 237*851c7a69SBram Moolenaar edit 238*851c7a69SBram Moolenaar call assert_match('testdir.Xactual$', getcwd()) 239*851c7a69SBram Moolenaar call assert_match('testdir$', getcwd(win_getid())) 240*851c7a69SBram Moolenaar 241*851c7a69SBram Moolenaar set noautochdir 242*851c7a69SBram Moolenaar bwipe! 243*851c7a69SBram Moolenaar call chdir(startdir) 244*851c7a69SBram Moolenaar call delete('Xactual', 'rf') 245*851c7a69SBram Moolenaarendfunc 246*851c7a69SBram Moolenaar 2476d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 248