xref: /vim-8.2.3635/src/testdir/test_getcwd.vim (revision 6d91bcb4)
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