1*6d91bcb4SBram Moolenaar" Test for getcwd() 2*6d91bcb4SBram Moolenaar 31e115360SBram Moolenaarfunc GetCwdInfo(win, tab) 4292eff0cSBram Moolenaar let tab_changed = 0 5292eff0cSBram Moolenaar let mod = ":t" 6292eff0cSBram Moolenaar if a:tab > 0 && a:tab != tabpagenr() 7292eff0cSBram Moolenaar let tab_changed = 1 8292eff0cSBram Moolenaar exec "tabnext " . a:tab 9292eff0cSBram Moolenaar endif 10292eff0cSBram Moolenaar let bufname = fnamemodify(bufname(winbufnr(a:win)), mod) 11292eff0cSBram Moolenaar if tab_changed 12292eff0cSBram Moolenaar tabprevious 13292eff0cSBram Moolenaar endif 14292eff0cSBram Moolenaar if a:win == 0 && a:tab == 0 15292eff0cSBram Moolenaar let dirname = fnamemodify(getcwd(), mod) 16292eff0cSBram Moolenaar let lflag = haslocaldir() 17292eff0cSBram Moolenaar elseif a:tab == 0 18292eff0cSBram Moolenaar let dirname = fnamemodify(getcwd(a:win), mod) 19292eff0cSBram Moolenaar let lflag = haslocaldir(a:win) 20292eff0cSBram Moolenaar else 21292eff0cSBram Moolenaar let dirname = fnamemodify(getcwd(a:win, a:tab), mod) 22f9f24ce7SBram Moolenaar let lflag = a:win->haslocaldir(a:tab) 23292eff0cSBram Moolenaar endif 24292eff0cSBram Moolenaar return bufname . ' ' . dirname . ' ' . lflag 251e115360SBram Moolenaarendfunc 26292eff0cSBram Moolenaar 27292eff0cSBram Moolenaar" Do all test in a separate window to avoid E211 when we recursively 28292eff0cSBram Moolenaar" delete the Xtopdir directory during cleanup 29bfe13cccSBram Moolenaarfunc SetUp() 30292eff0cSBram Moolenaar set visualbell 31292eff0cSBram Moolenaar set nocp viminfo+=nviminfo 32292eff0cSBram Moolenaar 33292eff0cSBram Moolenaar " On windows a swapfile in Xtopdir prevents it from being cleaned up. 34292eff0cSBram Moolenaar set noswapfile 35292eff0cSBram Moolenaar 36292eff0cSBram Moolenaar " On windows a stale "Xtopdir" directory may exist, remove it so that 37292eff0cSBram Moolenaar " we start from a clean state. 38292eff0cSBram Moolenaar call delete("Xtopdir", "rf") 39292eff0cSBram Moolenaar new 40a1449836SBram Moolenaar eval 'Xtopdir'->mkdir() 41292eff0cSBram Moolenaar cd Xtopdir 425459129aSBram Moolenaar let g:topdir = getcwd() 43292eff0cSBram Moolenaar call mkdir('Xdir1') 44292eff0cSBram Moolenaar call mkdir('Xdir2') 45292eff0cSBram Moolenaar call mkdir('Xdir3') 46292eff0cSBram Moolenaarendfunction 47292eff0cSBram Moolenaar 48292eff0cSBram Moolenaarlet g:cwd=getcwd() 49292eff0cSBram Moolenaarfunction TearDown() 50292eff0cSBram Moolenaar q 513503d7c9SBram Moolenaar call chdir(g:cwd) 52292eff0cSBram Moolenaar call delete("Xtopdir", "rf") 53292eff0cSBram Moolenaarendfunction 54292eff0cSBram Moolenaar 55292eff0cSBram Moolenaarfunction Test_GetCwd() 56292eff0cSBram Moolenaar new a 57292eff0cSBram Moolenaar new b 58292eff0cSBram Moolenaar new c 59292eff0cSBram Moolenaar 3wincmd w 60292eff0cSBram Moolenaar lcd Xdir1 61292eff0cSBram Moolenaar call assert_equal("a Xdir1 1", GetCwdInfo(0, 0)) 625459129aSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 63292eff0cSBram Moolenaar wincmd W 64292eff0cSBram Moolenaar call assert_equal("b Xtopdir 0", GetCwdInfo(0, 0)) 655459129aSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 66292eff0cSBram Moolenaar wincmd W 67292eff0cSBram Moolenaar lcd Xdir3 68292eff0cSBram Moolenaar call assert_equal("c Xdir3 1", GetCwdInfo(0, 0)) 69292eff0cSBram Moolenaar call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), 0)) 70292eff0cSBram Moolenaar call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), 0)) 71292eff0cSBram Moolenaar call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), 0)) 725459129aSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 73292eff0cSBram Moolenaar wincmd W 74292eff0cSBram Moolenaar call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), tabpagenr())) 75292eff0cSBram Moolenaar call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), tabpagenr())) 76292eff0cSBram Moolenaar call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), tabpagenr())) 775459129aSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 78292eff0cSBram Moolenaar 79292eff0cSBram Moolenaar tabnew x 80292eff0cSBram Moolenaar new y 81292eff0cSBram Moolenaar new z 82292eff0cSBram Moolenaar 3wincmd w 83292eff0cSBram Moolenaar call assert_equal("x Xtopdir 0", GetCwdInfo(0, 0)) 845459129aSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 85292eff0cSBram Moolenaar wincmd W 86292eff0cSBram Moolenaar lcd Xdir2 87292eff0cSBram Moolenaar call assert_equal("y Xdir2 1", GetCwdInfo(0, 0)) 885459129aSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 89292eff0cSBram Moolenaar wincmd W 90292eff0cSBram Moolenaar lcd Xdir3 91292eff0cSBram Moolenaar call assert_equal("z Xdir3 1", GetCwdInfo(0, 0)) 92292eff0cSBram Moolenaar call assert_equal("x Xtopdir 0", GetCwdInfo(bufwinnr("x"), 0)) 93292eff0cSBram Moolenaar call assert_equal("y Xdir2 1", GetCwdInfo(bufwinnr("y"), 0)) 94292eff0cSBram Moolenaar call assert_equal("z Xdir3 1", GetCwdInfo(bufwinnr("z"), 0)) 955459129aSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 96292eff0cSBram Moolenaar let tp_nr = tabpagenr() 97292eff0cSBram Moolenaar tabrewind 98292eff0cSBram Moolenaar call assert_equal("x Xtopdir 0", GetCwdInfo(3, tp_nr)) 99292eff0cSBram Moolenaar call assert_equal("y Xdir2 1", GetCwdInfo(2, tp_nr)) 100292eff0cSBram Moolenaar call assert_equal("z Xdir3 1", GetCwdInfo(1, tp_nr)) 1015459129aSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 10200aa069dSBram Moolenaar " Non existing windows and tab pages 10300aa069dSBram Moolenaar call assert_equal('', getcwd(100)) 10400aa069dSBram Moolenaar call assert_equal(0, haslocaldir(100)) 10500aa069dSBram Moolenaar call assert_equal('', getcwd(10, 1)) 10600aa069dSBram Moolenaar call assert_equal(0, haslocaldir(10, 1)) 10700aa069dSBram Moolenaar call assert_equal('', getcwd(1, 5)) 10800aa069dSBram Moolenaar call assert_equal(0, haslocaldir(1, 5)) 10900aa069dSBram Moolenaar call assert_fails('call getcwd([])', 'E745:') 11000aa069dSBram Moolenaar call assert_fails('call getcwd(1, [])', 'E745:') 11100aa069dSBram Moolenaar call assert_fails('call haslocaldir([])', 'E745:') 11200aa069dSBram Moolenaar call assert_fails('call haslocaldir(1, [])', 'E745:') 113292eff0cSBram Moolenaarendfunc 114c75878c9SBram Moolenaar 115c75878c9SBram Moolenaarfunction Test_GetCwd_lcd_shellslash() 116c75878c9SBram Moolenaar new 117c75878c9SBram Moolenaar let root = fnamemodify('/', ':p') 118c75878c9SBram Moolenaar exe 'lcd '.root 119c75878c9SBram Moolenaar let cwd = getcwd() 120c75878c9SBram Moolenaar if !exists('+shellslash') || &shellslash 121c75878c9SBram Moolenaar call assert_equal(cwd[-1:], '/') 122c75878c9SBram Moolenaar else 123c75878c9SBram Moolenaar call assert_equal(cwd[-1:], '\') 124c75878c9SBram Moolenaar endif 125c75878c9SBram Moolenaarendfunc 12600aa069dSBram Moolenaar 12700aa069dSBram Moolenaar" Test for :tcd 12800aa069dSBram Moolenaarfunction Test_Tab_Local_Cwd() 12900aa069dSBram Moolenaar enew | only | tabonly 13000aa069dSBram Moolenaar 13100aa069dSBram Moolenaar call mkdir('Xtabdir1') 13200aa069dSBram Moolenaar call mkdir('Xtabdir2') 13300aa069dSBram Moolenaar call mkdir('Xwindir1') 13400aa069dSBram Moolenaar call mkdir('Xwindir2') 13500aa069dSBram Moolenaar call mkdir('Xwindir3') 13600aa069dSBram Moolenaar 13700aa069dSBram Moolenaar " Create three tabpages with three windows each 13800aa069dSBram Moolenaar edit a 13900aa069dSBram Moolenaar botright new b 14000aa069dSBram Moolenaar botright new c 14100aa069dSBram Moolenaar tabnew m 14200aa069dSBram Moolenaar botright new n 14300aa069dSBram Moolenaar botright new o 14400aa069dSBram Moolenaar tabnew x 14500aa069dSBram Moolenaar botright new y 14600aa069dSBram Moolenaar botright new z 14700aa069dSBram Moolenaar 14800aa069dSBram Moolenaar " Setup different directories for the tab pages and windows 14900aa069dSBram Moolenaar tabrewind 15000aa069dSBram Moolenaar 1wincmd w 15100aa069dSBram Moolenaar lcd Xwindir1 15200aa069dSBram Moolenaar tabnext 15300aa069dSBram Moolenaar tcd Xtabdir1 15400aa069dSBram Moolenaar 2wincmd w 15500aa069dSBram Moolenaar lcd ../Xwindir2 15600aa069dSBram Moolenaar tabnext 15700aa069dSBram Moolenaar tcd Xtabdir2 15800aa069dSBram Moolenaar 3wincmd w 15900aa069dSBram Moolenaar lcd ../Xwindir3 16000aa069dSBram Moolenaar 16100aa069dSBram Moolenaar " Check the directories of various windows 16200aa069dSBram Moolenaar call assert_equal("a Xwindir1 1", GetCwdInfo(1, 1)) 16300aa069dSBram Moolenaar call assert_equal("b Xtopdir 0", GetCwdInfo(2, 1)) 16400aa069dSBram Moolenaar call assert_equal("c Xtopdir 0", GetCwdInfo(3, 1)) 16500aa069dSBram Moolenaar call assert_equal("m Xtabdir1 2", GetCwdInfo(1, 2)) 16600aa069dSBram Moolenaar call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2)) 16700aa069dSBram Moolenaar call assert_equal("o Xtabdir1 2", GetCwdInfo(3, 2)) 16800aa069dSBram Moolenaar call assert_equal("x Xtabdir2 2", GetCwdInfo(1, 3)) 16900aa069dSBram Moolenaar call assert_equal("y Xtabdir2 2", GetCwdInfo(2, 3)) 17000aa069dSBram Moolenaar call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3)) 17100aa069dSBram Moolenaar 17200aa069dSBram Moolenaar " Check the tabpage directories 17300aa069dSBram Moolenaar call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 1), ':t')) 17400aa069dSBram Moolenaar call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 2), ':t')) 17500aa069dSBram Moolenaar call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 3), ':t')) 17600aa069dSBram Moolenaar call assert_equal('', fnamemodify(getcwd(-1, 4), ':t')) 17700aa069dSBram Moolenaar 17800aa069dSBram Moolenaar " Jump to different windows in the tab pages and check the current directory 17900aa069dSBram Moolenaar tabrewind | 1wincmd w 18000aa069dSBram Moolenaar call assert_equal('Xwindir1', fnamemodify(getcwd(), ':t')) 18100aa069dSBram Moolenaar call assert_equal('Xwindir1', fnamemodify(getcwd(0), ':t')) 18200aa069dSBram Moolenaar call assert_equal('Xwindir1', fnamemodify(getcwd(0, 0), ':t')) 18300aa069dSBram Moolenaar call assert_true(haslocaldir(0)) 18400aa069dSBram Moolenaar call assert_equal(0, haslocaldir(-1, 0)) 18500aa069dSBram Moolenaar call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 0), ':t')) 18600aa069dSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 18700aa069dSBram Moolenaar 2wincmd w 18800aa069dSBram Moolenaar call assert_equal('Xtopdir', fnamemodify(getcwd(), ':t')) 18900aa069dSBram Moolenaar call assert_equal('Xtopdir', fnamemodify(getcwd(0), ':t')) 19000aa069dSBram Moolenaar call assert_equal('Xtopdir', fnamemodify(getcwd(0, 0), ':t')) 19100aa069dSBram Moolenaar call assert_false(haslocaldir(0)) 19200aa069dSBram Moolenaar call assert_equal(0, haslocaldir(-1, 0)) 19300aa069dSBram Moolenaar call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 0), ':t')) 19400aa069dSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 19500aa069dSBram Moolenaar tabnext | 1wincmd w 19600aa069dSBram Moolenaar call assert_equal('Xtabdir1', fnamemodify(getcwd(), ':t')) 19700aa069dSBram Moolenaar call assert_equal('Xtabdir1', fnamemodify(getcwd(0), ':t')) 19800aa069dSBram Moolenaar call assert_equal('Xtabdir1', fnamemodify(getcwd(0, 0), ':t')) 19900aa069dSBram Moolenaar call assert_true(haslocaldir(0)) 20000aa069dSBram Moolenaar call assert_equal(2, haslocaldir(-1, 0)) 20100aa069dSBram Moolenaar call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 0), ':t')) 20200aa069dSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 20300aa069dSBram Moolenaar 2wincmd w 20400aa069dSBram Moolenaar call assert_equal('Xwindir2', fnamemodify(getcwd(), ':t')) 20500aa069dSBram Moolenaar call assert_equal('Xwindir2', fnamemodify(getcwd(0), ':t')) 20600aa069dSBram Moolenaar call assert_equal('Xwindir2', fnamemodify(getcwd(0, 0), ':t')) 20700aa069dSBram Moolenaar call assert_true(haslocaldir(0)) 20800aa069dSBram Moolenaar call assert_equal(2, haslocaldir(-1, 0)) 20900aa069dSBram Moolenaar call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 0), ':t')) 21000aa069dSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 21100aa069dSBram Moolenaar tabnext | 1wincmd w 21200aa069dSBram Moolenaar call assert_equal('Xtabdir2', fnamemodify(getcwd(), ':t')) 21300aa069dSBram Moolenaar call assert_equal('Xtabdir2', fnamemodify(getcwd(0), ':t')) 21400aa069dSBram Moolenaar call assert_equal('Xtabdir2', fnamemodify(getcwd(0, 0), ':t')) 21500aa069dSBram Moolenaar call assert_true(haslocaldir(0)) 21600aa069dSBram Moolenaar call assert_equal(2, haslocaldir(-1, 0)) 21700aa069dSBram Moolenaar call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 0), ':t')) 21800aa069dSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 21900aa069dSBram Moolenaar 3wincmd w 22000aa069dSBram Moolenaar call assert_equal('Xwindir3', fnamemodify(getcwd(), ':t')) 22100aa069dSBram Moolenaar call assert_equal('Xwindir3', fnamemodify(getcwd(0), ':t')) 22200aa069dSBram Moolenaar call assert_equal('Xwindir3', fnamemodify(getcwd(0, 0), ':t')) 22300aa069dSBram Moolenaar call assert_true(haslocaldir(0)) 22400aa069dSBram Moolenaar call assert_equal(2, haslocaldir(-1, 0)) 22500aa069dSBram Moolenaar call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 0), ':t')) 22600aa069dSBram Moolenaar call assert_equal(g:topdir, getcwd(-1)) 22700aa069dSBram Moolenaar 22800aa069dSBram Moolenaar " A new tab page should inherit the directory of the current tab page 22900aa069dSBram Moolenaar tabrewind | 1wincmd w 23000aa069dSBram Moolenaar tabnew g 23100aa069dSBram Moolenaar call assert_equal("g Xwindir1 1", GetCwdInfo(0, 0)) 23200aa069dSBram Moolenaar tabclose | tabrewind 23300aa069dSBram Moolenaar 2wincmd w 23400aa069dSBram Moolenaar tabnew h 23500aa069dSBram Moolenaar call assert_equal("h Xtopdir 0", GetCwdInfo(0, 0)) 23600aa069dSBram Moolenaar tabclose 23700aa069dSBram Moolenaar tabnext 2 | 1wincmd w 23800aa069dSBram Moolenaar tabnew j 23900aa069dSBram Moolenaar call assert_equal("j Xtabdir1 2", GetCwdInfo(0, 0)) 24000aa069dSBram Moolenaar tabclose 24100aa069dSBram Moolenaar 24200aa069dSBram Moolenaar " Change the global directory for the first tab page 24300aa069dSBram Moolenaar tabrewind | 1wincmd w 24400aa069dSBram Moolenaar cd ../Xdir1 24500aa069dSBram Moolenaar call assert_equal("a Xdir1 0", GetCwdInfo(1, 1)) 24600aa069dSBram Moolenaar call assert_equal("b Xdir1 0", GetCwdInfo(2, 1)) 24700aa069dSBram Moolenaar call assert_equal("m Xtabdir1 2", GetCwdInfo(1, 2)) 24800aa069dSBram Moolenaar call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2)) 24900aa069dSBram Moolenaar 25000aa069dSBram Moolenaar " Change the global directory for the second tab page 25100aa069dSBram Moolenaar tabnext | 1wincmd w 25200aa069dSBram Moolenaar cd ../Xdir3 25300aa069dSBram Moolenaar call assert_equal("m Xdir3 0", GetCwdInfo(1, 2)) 25400aa069dSBram Moolenaar call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2)) 25500aa069dSBram Moolenaar call assert_equal("o Xdir3 0", GetCwdInfo(3, 2)) 25600aa069dSBram Moolenaar 25700aa069dSBram Moolenaar " Change the tab-local directory for the third tab page 25800aa069dSBram Moolenaar tabnext | 1wincmd w 25900aa069dSBram Moolenaar cd ../Xdir1 26000aa069dSBram Moolenaar call assert_equal("x Xdir1 0", GetCwdInfo(1, 3)) 26100aa069dSBram Moolenaar call assert_equal("y Xdir1 0", GetCwdInfo(2, 3)) 26200aa069dSBram Moolenaar call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3)) 26300aa069dSBram Moolenaar 26400aa069dSBram Moolenaar enew | only | tabonly 26500aa069dSBram Moolenaar new 26600aa069dSBram Moolenaarendfunc 267*6d91bcb4SBram Moolenaar 268*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 269