1" Test for getcwd() 2 3func GetCwdInfo(win, tab) 4 let tab_changed = 0 5 let mod = ":t" 6 if a:tab > 0 && a:tab != tabpagenr() 7 let tab_changed = 1 8 exec "tabnext " . a:tab 9 endif 10 let bufname = fnamemodify(bufname(winbufnr(a:win)), mod) 11 if tab_changed 12 tabprevious 13 endif 14 if a:win == 0 && a:tab == 0 15 let dirname = fnamemodify(getcwd(), mod) 16 let lflag = haslocaldir() 17 elseif a:tab == 0 18 let dirname = fnamemodify(getcwd(a:win), mod) 19 let lflag = haslocaldir(a:win) 20 else 21 let dirname = fnamemodify(getcwd(a:win, a:tab), mod) 22 let lflag = a:win->haslocaldir(a:tab) 23 endif 24 return bufname . ' ' . dirname . ' ' . lflag 25endfunc 26 27" Do all test in a separate window to avoid E211 when we recursively 28" delete the Xtopdir directory during cleanup 29func SetUp() 30 set visualbell 31 set nocp viminfo+=nviminfo 32 33 " On windows a swapfile in Xtopdir prevents it from being cleaned up. 34 set noswapfile 35 36 " On windows a stale "Xtopdir" directory may exist, remove it so that 37 " we start from a clean state. 38 call delete("Xtopdir", "rf") 39 new 40 eval 'Xtopdir'->mkdir() 41 cd Xtopdir 42 let g:topdir = getcwd() 43 call mkdir('Xdir1') 44 call mkdir('Xdir2') 45 call mkdir('Xdir3') 46endfunction 47 48let g:cwd=getcwd() 49function TearDown() 50 q 51 call chdir(g:cwd) 52 call delete("Xtopdir", "rf") 53endfunction 54 55function Test_GetCwd() 56 new a 57 new b 58 new c 59 3wincmd w 60 lcd Xdir1 61 call assert_equal("a Xdir1 1", GetCwdInfo(0, 0)) 62 call assert_equal(g:topdir, getcwd(-1)) 63 wincmd W 64 call assert_equal("b Xtopdir 0", GetCwdInfo(0, 0)) 65 call assert_equal(g:topdir, getcwd(-1)) 66 wincmd W 67 lcd Xdir3 68 call assert_equal("c Xdir3 1", GetCwdInfo(0, 0)) 69 call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), 0)) 70 call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), 0)) 71 call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), 0)) 72 call assert_equal(g:topdir, getcwd(-1)) 73 wincmd W 74 call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), tabpagenr())) 75 call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), tabpagenr())) 76 call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), tabpagenr())) 77 call assert_equal(g:topdir, getcwd(-1)) 78 79 tabnew x 80 new y 81 new z 82 3wincmd w 83 call assert_equal("x Xtopdir 0", GetCwdInfo(0, 0)) 84 call assert_equal(g:topdir, getcwd(-1)) 85 wincmd W 86 lcd Xdir2 87 call assert_equal("y Xdir2 1", GetCwdInfo(0, 0)) 88 call assert_equal(g:topdir, getcwd(-1)) 89 wincmd W 90 lcd Xdir3 91 call assert_equal("z Xdir3 1", GetCwdInfo(0, 0)) 92 call assert_equal("x Xtopdir 0", GetCwdInfo(bufwinnr("x"), 0)) 93 call assert_equal("y Xdir2 1", GetCwdInfo(bufwinnr("y"), 0)) 94 call assert_equal("z Xdir3 1", GetCwdInfo(bufwinnr("z"), 0)) 95 call assert_equal(g:topdir, getcwd(-1)) 96 let tp_nr = tabpagenr() 97 tabrewind 98 call assert_equal("x Xtopdir 0", GetCwdInfo(3, tp_nr)) 99 call assert_equal("y Xdir2 1", GetCwdInfo(2, tp_nr)) 100 call assert_equal("z Xdir3 1", GetCwdInfo(1, tp_nr)) 101 call assert_equal(g:topdir, getcwd(-1)) 102 " Non existing windows and tab pages 103 call assert_equal('', getcwd(100)) 104 call assert_equal(0, haslocaldir(100)) 105 call assert_equal('', getcwd(10, 1)) 106 call assert_equal(0, haslocaldir(10, 1)) 107 call assert_equal('', getcwd(1, 5)) 108 call assert_equal(0, haslocaldir(1, 5)) 109 call assert_fails('call getcwd([])', 'E745:') 110 call assert_fails('call getcwd(1, [])', 'E745:') 111 call assert_fails('call haslocaldir([])', 'E745:') 112 call assert_fails('call haslocaldir(1, [])', 'E745:') 113endfunc 114 115function Test_GetCwd_lcd_shellslash() 116 new 117 let root = fnamemodify('/', ':p') 118 exe 'lcd '.root 119 let cwd = getcwd() 120 if !exists('+shellslash') || &shellslash 121 call assert_equal(cwd[-1:], '/') 122 else 123 call assert_equal(cwd[-1:], '\') 124 endif 125endfunc 126 127" Test for :tcd 128function Test_Tab_Local_Cwd() 129 enew | only | tabonly 130 131 call mkdir('Xtabdir1') 132 call mkdir('Xtabdir2') 133 call mkdir('Xwindir1') 134 call mkdir('Xwindir2') 135 call mkdir('Xwindir3') 136 137 " Create three tabpages with three windows each 138 edit a 139 botright new b 140 botright new c 141 tabnew m 142 botright new n 143 botright new o 144 tabnew x 145 botright new y 146 botright new z 147 148 " Setup different directories for the tab pages and windows 149 tabrewind 150 1wincmd w 151 lcd Xwindir1 152 tabnext 153 tcd Xtabdir1 154 2wincmd w 155 lcd ../Xwindir2 156 tabnext 157 tcd Xtabdir2 158 3wincmd w 159 lcd ../Xwindir3 160 161 " Check the directories of various windows 162 call assert_equal("a Xwindir1 1", GetCwdInfo(1, 1)) 163 call assert_equal("b Xtopdir 0", GetCwdInfo(2, 1)) 164 call assert_equal("c Xtopdir 0", GetCwdInfo(3, 1)) 165 call assert_equal("m Xtabdir1 2", GetCwdInfo(1, 2)) 166 call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2)) 167 call assert_equal("o Xtabdir1 2", GetCwdInfo(3, 2)) 168 call assert_equal("x Xtabdir2 2", GetCwdInfo(1, 3)) 169 call assert_equal("y Xtabdir2 2", GetCwdInfo(2, 3)) 170 call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3)) 171 172 " Check the tabpage directories 173 call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 1), ':t')) 174 call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 2), ':t')) 175 call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 3), ':t')) 176 call assert_equal('', fnamemodify(getcwd(-1, 4), ':t')) 177 178 " Jump to different windows in the tab pages and check the current directory 179 tabrewind | 1wincmd w 180 call assert_equal('Xwindir1', fnamemodify(getcwd(), ':t')) 181 call assert_equal('Xwindir1', fnamemodify(getcwd(0), ':t')) 182 call assert_equal('Xwindir1', fnamemodify(getcwd(0, 0), ':t')) 183 call assert_true(haslocaldir(0)) 184 call assert_equal(0, haslocaldir(-1, 0)) 185 call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 0), ':t')) 186 call assert_equal(g:topdir, getcwd(-1)) 187 2wincmd w 188 call assert_equal('Xtopdir', fnamemodify(getcwd(), ':t')) 189 call assert_equal('Xtopdir', fnamemodify(getcwd(0), ':t')) 190 call assert_equal('Xtopdir', fnamemodify(getcwd(0, 0), ':t')) 191 call assert_false(haslocaldir(0)) 192 call assert_equal(0, haslocaldir(-1, 0)) 193 call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 0), ':t')) 194 call assert_equal(g:topdir, getcwd(-1)) 195 tabnext | 1wincmd w 196 call assert_equal('Xtabdir1', fnamemodify(getcwd(), ':t')) 197 call assert_equal('Xtabdir1', fnamemodify(getcwd(0), ':t')) 198 call assert_equal('Xtabdir1', fnamemodify(getcwd(0, 0), ':t')) 199 call assert_true(haslocaldir(0)) 200 call assert_equal(2, haslocaldir(-1, 0)) 201 call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 0), ':t')) 202 call assert_equal(g:topdir, getcwd(-1)) 203 2wincmd w 204 call assert_equal('Xwindir2', fnamemodify(getcwd(), ':t')) 205 call assert_equal('Xwindir2', fnamemodify(getcwd(0), ':t')) 206 call assert_equal('Xwindir2', fnamemodify(getcwd(0, 0), ':t')) 207 call assert_true(haslocaldir(0)) 208 call assert_equal(2, haslocaldir(-1, 0)) 209 call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 0), ':t')) 210 call assert_equal(g:topdir, getcwd(-1)) 211 tabnext | 1wincmd w 212 call assert_equal('Xtabdir2', fnamemodify(getcwd(), ':t')) 213 call assert_equal('Xtabdir2', fnamemodify(getcwd(0), ':t')) 214 call assert_equal('Xtabdir2', fnamemodify(getcwd(0, 0), ':t')) 215 call assert_true(haslocaldir(0)) 216 call assert_equal(2, haslocaldir(-1, 0)) 217 call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 0), ':t')) 218 call assert_equal(g:topdir, getcwd(-1)) 219 3wincmd w 220 call assert_equal('Xwindir3', fnamemodify(getcwd(), ':t')) 221 call assert_equal('Xwindir3', fnamemodify(getcwd(0), ':t')) 222 call assert_equal('Xwindir3', fnamemodify(getcwd(0, 0), ':t')) 223 call assert_true(haslocaldir(0)) 224 call assert_equal(2, haslocaldir(-1, 0)) 225 call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 0), ':t')) 226 call assert_equal(g:topdir, getcwd(-1)) 227 228 " A new tab page should inherit the directory of the current tab page 229 tabrewind | 1wincmd w 230 tabnew g 231 call assert_equal("g Xwindir1 1", GetCwdInfo(0, 0)) 232 tabclose | tabrewind 233 2wincmd w 234 tabnew h 235 call assert_equal("h Xtopdir 0", GetCwdInfo(0, 0)) 236 tabclose 237 tabnext 2 | 1wincmd w 238 tabnew j 239 call assert_equal("j Xtabdir1 2", GetCwdInfo(0, 0)) 240 tabclose 241 242 " Change the global directory for the first tab page 243 tabrewind | 1wincmd w 244 cd ../Xdir1 245 call assert_equal("a Xdir1 0", GetCwdInfo(1, 1)) 246 call assert_equal("b Xdir1 0", GetCwdInfo(2, 1)) 247 call assert_equal("m Xtabdir1 2", GetCwdInfo(1, 2)) 248 call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2)) 249 250 " Change the global directory for the second tab page 251 tabnext | 1wincmd w 252 cd ../Xdir3 253 call assert_equal("m Xdir3 0", GetCwdInfo(1, 2)) 254 call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2)) 255 call assert_equal("o Xdir3 0", GetCwdInfo(3, 2)) 256 257 " Change the tab-local directory for the third tab page 258 tabnext | 1wincmd w 259 cd ../Xdir1 260 call assert_equal("x Xdir1 0", GetCwdInfo(1, 3)) 261 call assert_equal("y Xdir1 0", GetCwdInfo(2, 3)) 262 call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3)) 263 264 enew | only | tabonly 265 new 266endfunc 267 268" vim: shiftwidth=2 sts=2 expandtab 269