blob: b67dadb735e0dc108eee266482112db02e2b56d7 [file] [log] [blame]
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +02001" Test for getcwd()
2
Bram Moolenaar1e115362019-01-09 23:01:02 +01003func 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)
Bram Moolenaarf9f24ce2019-08-31 21:17:39 +020022 let lflag = a:win->haslocaldir(a:tab)
Bram Moolenaar1e115362019-01-09 23:01:02 +010023 endif
24 return bufname . ' ' . dirname . ' ' . lflag
25endfunc
Bram Moolenaar292eff02017-07-11 21:46:28 +020026
27" Do all test in a separate window to avoid E211 when we recursively
28" delete the Xtopdir directory during cleanup
Bram Moolenaarbfe13cc2020-04-12 17:53:12 +020029func SetUp()
Bram Moolenaar1e115362019-01-09 23:01:02 +010030 set visualbell
31 set nocp viminfo+=nviminfo
Bram Moolenaar292eff02017-07-11 21:46:28 +020032
Bram Moolenaar1e115362019-01-09 23:01:02 +010033 " On windows a swapfile in Xtopdir prevents it from being cleaned up.
34 set noswapfile
Bram Moolenaar292eff02017-07-11 21:46:28 +020035
Bram Moolenaar1e115362019-01-09 23:01:02 +010036 " 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
Bram Moolenaara1449832019-09-01 20:16:52 +020040 eval 'Xtopdir'->mkdir()
Bram Moolenaar1e115362019-01-09 23:01:02 +010041 cd Xtopdir
42 let g:topdir = getcwd()
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010043 call mkdir('Xcwdir1')
44 call mkdir('Xcwdir2')
45 call mkdir('Xcwdir3')
Bram Moolenaar292eff02017-07-11 21:46:28 +020046endfunction
47
48let g:cwd=getcwd()
49function TearDown()
Bram Moolenaar1e115362019-01-09 23:01:02 +010050 q
Bram Moolenaar3503d7c2019-11-09 20:10:17 +010051 call chdir(g:cwd)
Bram Moolenaar1e115362019-01-09 23:01:02 +010052 call delete("Xtopdir", "rf")
Bram Moolenaar292eff02017-07-11 21:46:28 +020053endfunction
54
55function Test_GetCwd()
Bram Moolenaar1e115362019-01-09 23:01:02 +010056 new a
57 new b
58 new c
59 3wincmd w
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010060 lcd Xcwdir1
61 call assert_equal("a Xcwdir1 1", GetCwdInfo(0, 0))
Bram Moolenaar1e115362019-01-09 23:01:02 +010062 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
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010067 lcd Xcwdir3
68 call assert_equal("c Xcwdir3 1", GetCwdInfo(0, 0))
69 call assert_equal("a Xcwdir1 1", GetCwdInfo(bufwinnr("a"), 0))
Bram Moolenaar1e115362019-01-09 23:01:02 +010070 call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), 0))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010071 call assert_equal("c Xcwdir3 1", GetCwdInfo(bufwinnr("c"), 0))
Bram Moolenaar1e115362019-01-09 23:01:02 +010072 call assert_equal(g:topdir, getcwd(-1))
73 wincmd W
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010074 call assert_equal("a Xcwdir1 1", GetCwdInfo(bufwinnr("a"), tabpagenr()))
Bram Moolenaar1e115362019-01-09 23:01:02 +010075 call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), tabpagenr()))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010076 call assert_equal("c Xcwdir3 1", GetCwdInfo(bufwinnr("c"), tabpagenr()))
Bram Moolenaar1e115362019-01-09 23:01:02 +010077 call assert_equal(g:topdir, getcwd(-1))
Bram Moolenaar292eff02017-07-11 21:46:28 +020078
Bram Moolenaar1e115362019-01-09 23:01:02 +010079 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
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010086 lcd Xcwdir2
87 call assert_equal("y Xcwdir2 1", GetCwdInfo(0, 0))
Bram Moolenaar1e115362019-01-09 23:01:02 +010088 call assert_equal(g:topdir, getcwd(-1))
89 wincmd W
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010090 lcd Xcwdir3
91 call assert_equal("z Xcwdir3 1", GetCwdInfo(0, 0))
Bram Moolenaar1e115362019-01-09 23:01:02 +010092 call assert_equal("x Xtopdir 0", GetCwdInfo(bufwinnr("x"), 0))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010093 call assert_equal("y Xcwdir2 1", GetCwdInfo(bufwinnr("y"), 0))
94 call assert_equal("z Xcwdir3 1", GetCwdInfo(bufwinnr("z"), 0))
Bram Moolenaar1e115362019-01-09 23:01:02 +010095 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))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +010099 call assert_equal("y Xcwdir2 1", GetCwdInfo(2, tp_nr))
100 call assert_equal("z Xcwdir3 1", GetCwdInfo(1, tp_nr))
Bram Moolenaar1e115362019-01-09 23:01:02 +0100101 call assert_equal(g:topdir, getcwd(-1))
Bram Moolenaar00aa0692019-04-27 20:37:57 +0200102 " 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:')
Bram Moolenaar292eff02017-07-11 21:46:28 +0200113endfunc
Bram Moolenaarc75878c2018-09-23 19:36:15 +0200114
115function Test_GetCwd_lcd_shellslash()
Bram Moolenaar1e115362019-01-09 23:01:02 +0100116 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
Bram Moolenaarc75878c2018-09-23 19:36:15 +0200125endfunc
Bram Moolenaar00aa0692019-04-27 20:37:57 +0200126
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
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100244 cd ../Xcwdir1
245 call assert_equal("a Xcwdir1 0", GetCwdInfo(1, 1))
246 call assert_equal("b Xcwdir1 0", GetCwdInfo(2, 1))
Bram Moolenaar00aa0692019-04-27 20:37:57 +0200247 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
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100252 cd ../Xcwdir3
253 call assert_equal("m Xcwdir3 0", GetCwdInfo(1, 2))
Bram Moolenaar00aa0692019-04-27 20:37:57 +0200254 call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2))
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100255 call assert_equal("o Xcwdir3 0", GetCwdInfo(3, 2))
Bram Moolenaar00aa0692019-04-27 20:37:57 +0200256
257 " Change the tab-local directory for the third tab page
258 tabnext | 1wincmd w
Bram Moolenaar3b0d70f2022-08-29 22:31:20 +0100259 cd ../Xcwdir1
260 call assert_equal("x Xcwdir1 0", GetCwdInfo(1, 3))
261 call assert_equal("y Xcwdir1 0", GetCwdInfo(2, 3))
Bram Moolenaar00aa0692019-04-27 20:37:57 +0200262 call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3))
263
264 enew | only | tabonly
265 new
266endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +0200267
268" vim: shiftwidth=2 sts=2 expandtab