1func GetCwdInfo(win, tab) 2 let tab_changed = 0 3 let mod = ":t" 4 if a:tab > 0 && a:tab != tabpagenr() 5 let tab_changed = 1 6 exec "tabnext " . a:tab 7 endif 8 let bufname = fnamemodify(bufname(winbufnr(a:win)), mod) 9 if tab_changed 10 tabprevious 11 endif 12 if a:win == 0 && a:tab == 0 13 let dirname = fnamemodify(getcwd(), mod) 14 let lflag = haslocaldir() 15 elseif a:tab == 0 16 let dirname = fnamemodify(getcwd(a:win), mod) 17 let lflag = haslocaldir(a:win) 18 else 19 let dirname = fnamemodify(getcwd(a:win, a:tab), mod) 20 let lflag = haslocaldir(a:win, a:tab) 21 endif 22 return bufname . ' ' . dirname . ' ' . lflag 23endfunc 24 25" Do all test in a separate window to avoid E211 when we recursively 26" delete the Xtopdir directory during cleanup 27function SetUp() 28 set visualbell 29 set nocp viminfo+=nviminfo 30 31 " On windows a swapfile in Xtopdir prevents it from being cleaned up. 32 set noswapfile 33 34 " On windows a stale "Xtopdir" directory may exist, remove it so that 35 " we start from a clean state. 36 call delete("Xtopdir", "rf") 37 new 38 call mkdir('Xtopdir') 39 cd Xtopdir 40 let g:topdir = getcwd() 41 call mkdir('Xdir1') 42 call mkdir('Xdir2') 43 call mkdir('Xdir3') 44endfunction 45 46let g:cwd=getcwd() 47function TearDown() 48 q 49 exec "cd " . g:cwd 50 call delete("Xtopdir", "rf") 51endfunction 52 53function Test_GetCwd() 54 new a 55 new b 56 new c 57 3wincmd w 58 lcd Xdir1 59 call assert_equal("a Xdir1 1", GetCwdInfo(0, 0)) 60 call assert_equal(g:topdir, getcwd(-1)) 61 wincmd W 62 call assert_equal("b Xtopdir 0", GetCwdInfo(0, 0)) 63 call assert_equal(g:topdir, getcwd(-1)) 64 wincmd W 65 lcd Xdir3 66 call assert_equal("c Xdir3 1", GetCwdInfo(0, 0)) 67 call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), 0)) 68 call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), 0)) 69 call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), 0)) 70 call assert_equal(g:topdir, getcwd(-1)) 71 wincmd W 72 call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), tabpagenr())) 73 call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), tabpagenr())) 74 call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), tabpagenr())) 75 call assert_equal(g:topdir, getcwd(-1)) 76 77 tabnew x 78 new y 79 new z 80 3wincmd w 81 call assert_equal("x Xtopdir 0", GetCwdInfo(0, 0)) 82 call assert_equal(g:topdir, getcwd(-1)) 83 wincmd W 84 lcd Xdir2 85 call assert_equal("y Xdir2 1", GetCwdInfo(0, 0)) 86 call assert_equal(g:topdir, getcwd(-1)) 87 wincmd W 88 lcd Xdir3 89 call assert_equal("z Xdir3 1", GetCwdInfo(0, 0)) 90 call assert_equal("x Xtopdir 0", GetCwdInfo(bufwinnr("x"), 0)) 91 call assert_equal("y Xdir2 1", GetCwdInfo(bufwinnr("y"), 0)) 92 call assert_equal("z Xdir3 1", GetCwdInfo(bufwinnr("z"), 0)) 93 call assert_equal(g:topdir, getcwd(-1)) 94 let tp_nr = tabpagenr() 95 tabrewind 96 call assert_equal("x Xtopdir 0", GetCwdInfo(3, tp_nr)) 97 call assert_equal("y Xdir2 1", GetCwdInfo(2, tp_nr)) 98 call assert_equal("z Xdir3 1", GetCwdInfo(1, tp_nr)) 99 call assert_equal(g:topdir, getcwd(-1)) 100endfunc 101 102function Test_GetCwd_lcd_shellslash() 103 new 104 let root = fnamemodify('/', ':p') 105 exe 'lcd '.root 106 let cwd = getcwd() 107 if !exists('+shellslash') || &shellslash 108 call assert_equal(cwd[-1:], '/') 109 else 110 call assert_equal(cwd[-1:], '\') 111 endif 112endfunc 113