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