blob: b1470d76b74614589b73179ae5ca4982a01a554a [file] [log] [blame]
Bram Moolenaar1e115362019-01-09 23:01:02 +01001func 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)
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +020020 let lflag = a:win->haslocaldir(a:tab)
Bram Moolenaar1e115362019-01-09 23:01:02 +010021 endif
22 return bufname . ' ' . dirname . ' ' . lflag
23endfunc
Bram Moolenaar292eff02017-07-11 21:46:28 +020024
25" Do all test in a separate window to avoid E211 when we recursively
26" delete the Xtopdir directory during cleanup
27function SetUp()
Bram Moolenaar1e115362019-01-09 23:01:02 +010028 set visualbell
29 set nocp viminfo+=nviminfo
Bram Moolenaar292eff02017-07-11 21:46:28 +020030
Bram Moolenaar1e115362019-01-09 23:01:02 +010031 " On windows a swapfile in Xtopdir prevents it from being cleaned up.
32 set noswapfile
Bram Moolenaar292eff02017-07-11 21:46:28 +020033
Bram Moolenaar1e115362019-01-09 23:01:02 +010034 " 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
Bram Moolenaara1449832019-09-01 20:16:52 +020038 eval 'Xtopdir'->mkdir()
Bram Moolenaar1e115362019-01-09 23:01:02 +010039 cd Xtopdir
40 let g:topdir = getcwd()
41 call mkdir('Xdir1')
42 call mkdir('Xdir2')
43 call mkdir('Xdir3')
Bram Moolenaar292eff02017-07-11 21:46:28 +020044endfunction
45
46let g:cwd=getcwd()
47function TearDown()
Bram Moolenaar1e115362019-01-09 23:01:02 +010048 q
49 exec "cd " . g:cwd
50 call delete("Xtopdir", "rf")
Bram Moolenaar292eff02017-07-11 21:46:28 +020051endfunction
52
53function Test_GetCwd()
Bram Moolenaar1e115362019-01-09 23:01:02 +010054 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))
Bram Moolenaar292eff02017-07-11 21:46:28 +020076
Bram Moolenaar1e115362019-01-09 23:01:02 +010077 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))
Bram Moolenaar00aa0692019-04-27 20:37:57 +0200100 " Non existing windows and tab pages
101 call assert_equal('', getcwd(100))
102 call assert_equal(0, haslocaldir(100))
103 call assert_equal('', getcwd(10, 1))
104 call assert_equal(0, haslocaldir(10, 1))
105 call assert_equal('', getcwd(1, 5))
106 call assert_equal(0, haslocaldir(1, 5))
107 call assert_fails('call getcwd([])', 'E745:')
108 call assert_fails('call getcwd(1, [])', 'E745:')
109 call assert_fails('call haslocaldir([])', 'E745:')
110 call assert_fails('call haslocaldir(1, [])', 'E745:')
Bram Moolenaar292eff02017-07-11 21:46:28 +0200111endfunc
Bram Moolenaarc75878c2018-09-23 19:36:15 +0200112
113function Test_GetCwd_lcd_shellslash()
Bram Moolenaar1e115362019-01-09 23:01:02 +0100114 new
115 let root = fnamemodify('/', ':p')
116 exe 'lcd '.root
117 let cwd = getcwd()
118 if !exists('+shellslash') || &shellslash
119 call assert_equal(cwd[-1:], '/')
120 else
121 call assert_equal(cwd[-1:], '\')
122 endif
Bram Moolenaarc75878c2018-09-23 19:36:15 +0200123endfunc
Bram Moolenaar00aa0692019-04-27 20:37:57 +0200124
125" Test for :tcd
126function Test_Tab_Local_Cwd()
127 enew | only | tabonly
128
129 call mkdir('Xtabdir1')
130 call mkdir('Xtabdir2')
131 call mkdir('Xwindir1')
132 call mkdir('Xwindir2')
133 call mkdir('Xwindir3')
134
135 " Create three tabpages with three windows each
136 edit a
137 botright new b
138 botright new c
139 tabnew m
140 botright new n
141 botright new o
142 tabnew x
143 botright new y
144 botright new z
145
146 " Setup different directories for the tab pages and windows
147 tabrewind
148 1wincmd w
149 lcd Xwindir1
150 tabnext
151 tcd Xtabdir1
152 2wincmd w
153 lcd ../Xwindir2
154 tabnext
155 tcd Xtabdir2
156 3wincmd w
157 lcd ../Xwindir3
158
159 " Check the directories of various windows
160 call assert_equal("a Xwindir1 1", GetCwdInfo(1, 1))
161 call assert_equal("b Xtopdir 0", GetCwdInfo(2, 1))
162 call assert_equal("c Xtopdir 0", GetCwdInfo(3, 1))
163 call assert_equal("m Xtabdir1 2", GetCwdInfo(1, 2))
164 call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2))
165 call assert_equal("o Xtabdir1 2", GetCwdInfo(3, 2))
166 call assert_equal("x Xtabdir2 2", GetCwdInfo(1, 3))
167 call assert_equal("y Xtabdir2 2", GetCwdInfo(2, 3))
168 call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3))
169
170 " Check the tabpage directories
171 call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 1), ':t'))
172 call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 2), ':t'))
173 call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 3), ':t'))
174 call assert_equal('', fnamemodify(getcwd(-1, 4), ':t'))
175
176 " Jump to different windows in the tab pages and check the current directory
177 tabrewind | 1wincmd w
178 call assert_equal('Xwindir1', fnamemodify(getcwd(), ':t'))
179 call assert_equal('Xwindir1', fnamemodify(getcwd(0), ':t'))
180 call assert_equal('Xwindir1', fnamemodify(getcwd(0, 0), ':t'))
181 call assert_true(haslocaldir(0))
182 call assert_equal(0, haslocaldir(-1, 0))
183 call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 0), ':t'))
184 call assert_equal(g:topdir, getcwd(-1))
185 2wincmd w
186 call assert_equal('Xtopdir', fnamemodify(getcwd(), ':t'))
187 call assert_equal('Xtopdir', fnamemodify(getcwd(0), ':t'))
188 call assert_equal('Xtopdir', fnamemodify(getcwd(0, 0), ':t'))
189 call assert_false(haslocaldir(0))
190 call assert_equal(0, haslocaldir(-1, 0))
191 call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 0), ':t'))
192 call assert_equal(g:topdir, getcwd(-1))
193 tabnext | 1wincmd w
194 call assert_equal('Xtabdir1', fnamemodify(getcwd(), ':t'))
195 call assert_equal('Xtabdir1', fnamemodify(getcwd(0), ':t'))
196 call assert_equal('Xtabdir1', fnamemodify(getcwd(0, 0), ':t'))
197 call assert_true(haslocaldir(0))
198 call assert_equal(2, haslocaldir(-1, 0))
199 call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 0), ':t'))
200 call assert_equal(g:topdir, getcwd(-1))
201 2wincmd w
202 call assert_equal('Xwindir2', fnamemodify(getcwd(), ':t'))
203 call assert_equal('Xwindir2', fnamemodify(getcwd(0), ':t'))
204 call assert_equal('Xwindir2', fnamemodify(getcwd(0, 0), ':t'))
205 call assert_true(haslocaldir(0))
206 call assert_equal(2, haslocaldir(-1, 0))
207 call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 0), ':t'))
208 call assert_equal(g:topdir, getcwd(-1))
209 tabnext | 1wincmd w
210 call assert_equal('Xtabdir2', fnamemodify(getcwd(), ':t'))
211 call assert_equal('Xtabdir2', fnamemodify(getcwd(0), ':t'))
212 call assert_equal('Xtabdir2', fnamemodify(getcwd(0, 0), ':t'))
213 call assert_true(haslocaldir(0))
214 call assert_equal(2, haslocaldir(-1, 0))
215 call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 0), ':t'))
216 call assert_equal(g:topdir, getcwd(-1))
217 3wincmd w
218 call assert_equal('Xwindir3', fnamemodify(getcwd(), ':t'))
219 call assert_equal('Xwindir3', fnamemodify(getcwd(0), ':t'))
220 call assert_equal('Xwindir3', fnamemodify(getcwd(0, 0), ':t'))
221 call assert_true(haslocaldir(0))
222 call assert_equal(2, haslocaldir(-1, 0))
223 call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 0), ':t'))
224 call assert_equal(g:topdir, getcwd(-1))
225
226 " A new tab page should inherit the directory of the current tab page
227 tabrewind | 1wincmd w
228 tabnew g
229 call assert_equal("g Xwindir1 1", GetCwdInfo(0, 0))
230 tabclose | tabrewind
231 2wincmd w
232 tabnew h
233 call assert_equal("h Xtopdir 0", GetCwdInfo(0, 0))
234 tabclose
235 tabnext 2 | 1wincmd w
236 tabnew j
237 call assert_equal("j Xtabdir1 2", GetCwdInfo(0, 0))
238 tabclose
239
240 " Change the global directory for the first tab page
241 tabrewind | 1wincmd w
242 cd ../Xdir1
243 call assert_equal("a Xdir1 0", GetCwdInfo(1, 1))
244 call assert_equal("b Xdir1 0", GetCwdInfo(2, 1))
245 call assert_equal("m Xtabdir1 2", GetCwdInfo(1, 2))
246 call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2))
247
248 " Change the global directory for the second tab page
249 tabnext | 1wincmd w
250 cd ../Xdir3
251 call assert_equal("m Xdir3 0", GetCwdInfo(1, 2))
252 call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2))
253 call assert_equal("o Xdir3 0", GetCwdInfo(3, 2))
254
255 " Change the tab-local directory for the third tab page
256 tabnext | 1wincmd w
257 cd ../Xdir1
258 call assert_equal("x Xdir1 0", GetCwdInfo(1, 3))
259 call assert_equal("y Xdir1 0", GetCwdInfo(2, 3))
260 call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3))
261
262 enew | only | tabonly
263 new
264endfunc