xref: /vim-8.2.3635/src/testdir/test_getcwd.vim (revision 6d91bcb4)
1*6d91bcb4SBram Moolenaar" Test for getcwd()
2*6d91bcb4SBram Moolenaar
31e115360SBram Moolenaarfunc GetCwdInfo(win, tab)
4292eff0cSBram Moolenaar  let tab_changed = 0
5292eff0cSBram Moolenaar  let mod = ":t"
6292eff0cSBram Moolenaar  if a:tab > 0 && a:tab != tabpagenr()
7292eff0cSBram Moolenaar    let tab_changed = 1
8292eff0cSBram Moolenaar    exec "tabnext " . a:tab
9292eff0cSBram Moolenaar  endif
10292eff0cSBram Moolenaar  let bufname = fnamemodify(bufname(winbufnr(a:win)), mod)
11292eff0cSBram Moolenaar  if tab_changed
12292eff0cSBram Moolenaar    tabprevious
13292eff0cSBram Moolenaar  endif
14292eff0cSBram Moolenaar  if a:win == 0 && a:tab == 0
15292eff0cSBram Moolenaar    let dirname = fnamemodify(getcwd(), mod)
16292eff0cSBram Moolenaar    let lflag = haslocaldir()
17292eff0cSBram Moolenaar  elseif a:tab == 0
18292eff0cSBram Moolenaar    let dirname = fnamemodify(getcwd(a:win), mod)
19292eff0cSBram Moolenaar    let lflag = haslocaldir(a:win)
20292eff0cSBram Moolenaar  else
21292eff0cSBram Moolenaar    let dirname = fnamemodify(getcwd(a:win, a:tab), mod)
22f9f24ce7SBram Moolenaar    let lflag = a:win->haslocaldir(a:tab)
23292eff0cSBram Moolenaar  endif
24292eff0cSBram Moolenaar  return bufname . ' ' . dirname . ' ' . lflag
251e115360SBram Moolenaarendfunc
26292eff0cSBram Moolenaar
27292eff0cSBram Moolenaar" Do all test in a separate window to avoid E211 when we recursively
28292eff0cSBram Moolenaar" delete the Xtopdir directory during cleanup
29bfe13cccSBram Moolenaarfunc SetUp()
30292eff0cSBram Moolenaar  set visualbell
31292eff0cSBram Moolenaar  set nocp viminfo+=nviminfo
32292eff0cSBram Moolenaar
33292eff0cSBram Moolenaar  " On windows a swapfile in Xtopdir prevents it from being cleaned up.
34292eff0cSBram Moolenaar  set noswapfile
35292eff0cSBram Moolenaar
36292eff0cSBram Moolenaar  " On windows a stale "Xtopdir" directory may exist, remove it so that
37292eff0cSBram Moolenaar  " we start from a clean state.
38292eff0cSBram Moolenaar  call delete("Xtopdir", "rf")
39292eff0cSBram Moolenaar  new
40a1449836SBram Moolenaar  eval 'Xtopdir'->mkdir()
41292eff0cSBram Moolenaar  cd Xtopdir
425459129aSBram Moolenaar  let g:topdir = getcwd()
43292eff0cSBram Moolenaar  call mkdir('Xdir1')
44292eff0cSBram Moolenaar  call mkdir('Xdir2')
45292eff0cSBram Moolenaar  call mkdir('Xdir3')
46292eff0cSBram Moolenaarendfunction
47292eff0cSBram Moolenaar
48292eff0cSBram Moolenaarlet g:cwd=getcwd()
49292eff0cSBram Moolenaarfunction TearDown()
50292eff0cSBram Moolenaar  q
513503d7c9SBram Moolenaar  call chdir(g:cwd)
52292eff0cSBram Moolenaar  call delete("Xtopdir", "rf")
53292eff0cSBram Moolenaarendfunction
54292eff0cSBram Moolenaar
55292eff0cSBram Moolenaarfunction Test_GetCwd()
56292eff0cSBram Moolenaar  new a
57292eff0cSBram Moolenaar  new b
58292eff0cSBram Moolenaar  new c
59292eff0cSBram Moolenaar  3wincmd w
60292eff0cSBram Moolenaar  lcd Xdir1
61292eff0cSBram Moolenaar  call assert_equal("a Xdir1 1", GetCwdInfo(0, 0))
625459129aSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
63292eff0cSBram Moolenaar  wincmd W
64292eff0cSBram Moolenaar  call assert_equal("b Xtopdir 0", GetCwdInfo(0, 0))
655459129aSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
66292eff0cSBram Moolenaar  wincmd W
67292eff0cSBram Moolenaar  lcd Xdir3
68292eff0cSBram Moolenaar  call assert_equal("c Xdir3 1", GetCwdInfo(0, 0))
69292eff0cSBram Moolenaar  call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), 0))
70292eff0cSBram Moolenaar  call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), 0))
71292eff0cSBram Moolenaar  call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), 0))
725459129aSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
73292eff0cSBram Moolenaar  wincmd W
74292eff0cSBram Moolenaar  call assert_equal("a Xdir1 1", GetCwdInfo(bufwinnr("a"), tabpagenr()))
75292eff0cSBram Moolenaar  call assert_equal("b Xtopdir 0", GetCwdInfo(bufwinnr("b"), tabpagenr()))
76292eff0cSBram Moolenaar  call assert_equal("c Xdir3 1", GetCwdInfo(bufwinnr("c"), tabpagenr()))
775459129aSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
78292eff0cSBram Moolenaar
79292eff0cSBram Moolenaar  tabnew x
80292eff0cSBram Moolenaar  new y
81292eff0cSBram Moolenaar  new z
82292eff0cSBram Moolenaar  3wincmd w
83292eff0cSBram Moolenaar  call assert_equal("x Xtopdir 0", GetCwdInfo(0, 0))
845459129aSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
85292eff0cSBram Moolenaar  wincmd W
86292eff0cSBram Moolenaar  lcd Xdir2
87292eff0cSBram Moolenaar  call assert_equal("y Xdir2 1", GetCwdInfo(0, 0))
885459129aSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
89292eff0cSBram Moolenaar  wincmd W
90292eff0cSBram Moolenaar  lcd Xdir3
91292eff0cSBram Moolenaar  call assert_equal("z Xdir3 1", GetCwdInfo(0, 0))
92292eff0cSBram Moolenaar  call assert_equal("x Xtopdir 0", GetCwdInfo(bufwinnr("x"), 0))
93292eff0cSBram Moolenaar  call assert_equal("y Xdir2 1", GetCwdInfo(bufwinnr("y"), 0))
94292eff0cSBram Moolenaar  call assert_equal("z Xdir3 1", GetCwdInfo(bufwinnr("z"), 0))
955459129aSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
96292eff0cSBram Moolenaar  let tp_nr = tabpagenr()
97292eff0cSBram Moolenaar  tabrewind
98292eff0cSBram Moolenaar  call assert_equal("x Xtopdir 0", GetCwdInfo(3, tp_nr))
99292eff0cSBram Moolenaar  call assert_equal("y Xdir2 1", GetCwdInfo(2, tp_nr))
100292eff0cSBram Moolenaar  call assert_equal("z Xdir3 1", GetCwdInfo(1, tp_nr))
1015459129aSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
10200aa069dSBram Moolenaar  " Non existing windows and tab pages
10300aa069dSBram Moolenaar  call assert_equal('', getcwd(100))
10400aa069dSBram Moolenaar  call assert_equal(0, haslocaldir(100))
10500aa069dSBram Moolenaar  call assert_equal('', getcwd(10, 1))
10600aa069dSBram Moolenaar  call assert_equal(0, haslocaldir(10, 1))
10700aa069dSBram Moolenaar  call assert_equal('', getcwd(1, 5))
10800aa069dSBram Moolenaar  call assert_equal(0, haslocaldir(1, 5))
10900aa069dSBram Moolenaar  call assert_fails('call getcwd([])', 'E745:')
11000aa069dSBram Moolenaar  call assert_fails('call getcwd(1, [])', 'E745:')
11100aa069dSBram Moolenaar  call assert_fails('call haslocaldir([])', 'E745:')
11200aa069dSBram Moolenaar  call assert_fails('call haslocaldir(1, [])', 'E745:')
113292eff0cSBram Moolenaarendfunc
114c75878c9SBram Moolenaar
115c75878c9SBram Moolenaarfunction Test_GetCwd_lcd_shellslash()
116c75878c9SBram Moolenaar  new
117c75878c9SBram Moolenaar  let root = fnamemodify('/', ':p')
118c75878c9SBram Moolenaar  exe 'lcd '.root
119c75878c9SBram Moolenaar  let cwd = getcwd()
120c75878c9SBram Moolenaar  if !exists('+shellslash') || &shellslash
121c75878c9SBram Moolenaar    call assert_equal(cwd[-1:], '/')
122c75878c9SBram Moolenaar  else
123c75878c9SBram Moolenaar    call assert_equal(cwd[-1:], '\')
124c75878c9SBram Moolenaar  endif
125c75878c9SBram Moolenaarendfunc
12600aa069dSBram Moolenaar
12700aa069dSBram Moolenaar" Test for :tcd
12800aa069dSBram Moolenaarfunction Test_Tab_Local_Cwd()
12900aa069dSBram Moolenaar  enew | only | tabonly
13000aa069dSBram Moolenaar
13100aa069dSBram Moolenaar  call mkdir('Xtabdir1')
13200aa069dSBram Moolenaar  call mkdir('Xtabdir2')
13300aa069dSBram Moolenaar  call mkdir('Xwindir1')
13400aa069dSBram Moolenaar  call mkdir('Xwindir2')
13500aa069dSBram Moolenaar  call mkdir('Xwindir3')
13600aa069dSBram Moolenaar
13700aa069dSBram Moolenaar  " Create three tabpages with three windows each
13800aa069dSBram Moolenaar  edit a
13900aa069dSBram Moolenaar  botright new b
14000aa069dSBram Moolenaar  botright new c
14100aa069dSBram Moolenaar  tabnew m
14200aa069dSBram Moolenaar  botright new n
14300aa069dSBram Moolenaar  botright new o
14400aa069dSBram Moolenaar  tabnew x
14500aa069dSBram Moolenaar  botright new y
14600aa069dSBram Moolenaar  botright new z
14700aa069dSBram Moolenaar
14800aa069dSBram Moolenaar  " Setup different directories for the tab pages and windows
14900aa069dSBram Moolenaar  tabrewind
15000aa069dSBram Moolenaar  1wincmd w
15100aa069dSBram Moolenaar  lcd Xwindir1
15200aa069dSBram Moolenaar  tabnext
15300aa069dSBram Moolenaar  tcd Xtabdir1
15400aa069dSBram Moolenaar  2wincmd w
15500aa069dSBram Moolenaar  lcd ../Xwindir2
15600aa069dSBram Moolenaar  tabnext
15700aa069dSBram Moolenaar  tcd Xtabdir2
15800aa069dSBram Moolenaar  3wincmd w
15900aa069dSBram Moolenaar  lcd ../Xwindir3
16000aa069dSBram Moolenaar
16100aa069dSBram Moolenaar  " Check the directories of various windows
16200aa069dSBram Moolenaar  call assert_equal("a Xwindir1 1", GetCwdInfo(1, 1))
16300aa069dSBram Moolenaar  call assert_equal("b Xtopdir 0", GetCwdInfo(2, 1))
16400aa069dSBram Moolenaar  call assert_equal("c Xtopdir 0", GetCwdInfo(3, 1))
16500aa069dSBram Moolenaar  call assert_equal("m Xtabdir1 2", GetCwdInfo(1, 2))
16600aa069dSBram Moolenaar  call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2))
16700aa069dSBram Moolenaar  call assert_equal("o Xtabdir1 2", GetCwdInfo(3, 2))
16800aa069dSBram Moolenaar  call assert_equal("x Xtabdir2 2", GetCwdInfo(1, 3))
16900aa069dSBram Moolenaar  call assert_equal("y Xtabdir2 2", GetCwdInfo(2, 3))
17000aa069dSBram Moolenaar  call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3))
17100aa069dSBram Moolenaar
17200aa069dSBram Moolenaar  " Check the tabpage directories
17300aa069dSBram Moolenaar  call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 1), ':t'))
17400aa069dSBram Moolenaar  call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 2), ':t'))
17500aa069dSBram Moolenaar  call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 3), ':t'))
17600aa069dSBram Moolenaar  call assert_equal('', fnamemodify(getcwd(-1, 4), ':t'))
17700aa069dSBram Moolenaar
17800aa069dSBram Moolenaar  " Jump to different windows in the tab pages and check the current directory
17900aa069dSBram Moolenaar  tabrewind | 1wincmd w
18000aa069dSBram Moolenaar  call assert_equal('Xwindir1', fnamemodify(getcwd(), ':t'))
18100aa069dSBram Moolenaar  call assert_equal('Xwindir1', fnamemodify(getcwd(0), ':t'))
18200aa069dSBram Moolenaar  call assert_equal('Xwindir1', fnamemodify(getcwd(0, 0), ':t'))
18300aa069dSBram Moolenaar  call assert_true(haslocaldir(0))
18400aa069dSBram Moolenaar  call assert_equal(0, haslocaldir(-1, 0))
18500aa069dSBram Moolenaar  call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 0), ':t'))
18600aa069dSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
18700aa069dSBram Moolenaar  2wincmd w
18800aa069dSBram Moolenaar  call assert_equal('Xtopdir', fnamemodify(getcwd(), ':t'))
18900aa069dSBram Moolenaar  call assert_equal('Xtopdir', fnamemodify(getcwd(0), ':t'))
19000aa069dSBram Moolenaar  call assert_equal('Xtopdir', fnamemodify(getcwd(0, 0), ':t'))
19100aa069dSBram Moolenaar  call assert_false(haslocaldir(0))
19200aa069dSBram Moolenaar  call assert_equal(0, haslocaldir(-1, 0))
19300aa069dSBram Moolenaar  call assert_equal('Xtopdir', fnamemodify(getcwd(-1, 0), ':t'))
19400aa069dSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
19500aa069dSBram Moolenaar  tabnext | 1wincmd w
19600aa069dSBram Moolenaar  call assert_equal('Xtabdir1', fnamemodify(getcwd(), ':t'))
19700aa069dSBram Moolenaar  call assert_equal('Xtabdir1', fnamemodify(getcwd(0), ':t'))
19800aa069dSBram Moolenaar  call assert_equal('Xtabdir1', fnamemodify(getcwd(0, 0), ':t'))
19900aa069dSBram Moolenaar  call assert_true(haslocaldir(0))
20000aa069dSBram Moolenaar  call assert_equal(2, haslocaldir(-1, 0))
20100aa069dSBram Moolenaar  call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 0), ':t'))
20200aa069dSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
20300aa069dSBram Moolenaar  2wincmd w
20400aa069dSBram Moolenaar  call assert_equal('Xwindir2', fnamemodify(getcwd(), ':t'))
20500aa069dSBram Moolenaar  call assert_equal('Xwindir2', fnamemodify(getcwd(0), ':t'))
20600aa069dSBram Moolenaar  call assert_equal('Xwindir2', fnamemodify(getcwd(0, 0), ':t'))
20700aa069dSBram Moolenaar  call assert_true(haslocaldir(0))
20800aa069dSBram Moolenaar  call assert_equal(2, haslocaldir(-1, 0))
20900aa069dSBram Moolenaar  call assert_equal('Xtabdir1', fnamemodify(getcwd(-1, 0), ':t'))
21000aa069dSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
21100aa069dSBram Moolenaar  tabnext | 1wincmd w
21200aa069dSBram Moolenaar  call assert_equal('Xtabdir2', fnamemodify(getcwd(), ':t'))
21300aa069dSBram Moolenaar  call assert_equal('Xtabdir2', fnamemodify(getcwd(0), ':t'))
21400aa069dSBram Moolenaar  call assert_equal('Xtabdir2', fnamemodify(getcwd(0, 0), ':t'))
21500aa069dSBram Moolenaar  call assert_true(haslocaldir(0))
21600aa069dSBram Moolenaar  call assert_equal(2, haslocaldir(-1, 0))
21700aa069dSBram Moolenaar  call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 0), ':t'))
21800aa069dSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
21900aa069dSBram Moolenaar  3wincmd w
22000aa069dSBram Moolenaar  call assert_equal('Xwindir3', fnamemodify(getcwd(), ':t'))
22100aa069dSBram Moolenaar  call assert_equal('Xwindir3', fnamemodify(getcwd(0), ':t'))
22200aa069dSBram Moolenaar  call assert_equal('Xwindir3', fnamemodify(getcwd(0, 0), ':t'))
22300aa069dSBram Moolenaar  call assert_true(haslocaldir(0))
22400aa069dSBram Moolenaar  call assert_equal(2, haslocaldir(-1, 0))
22500aa069dSBram Moolenaar  call assert_equal('Xtabdir2', fnamemodify(getcwd(-1, 0), ':t'))
22600aa069dSBram Moolenaar  call assert_equal(g:topdir, getcwd(-1))
22700aa069dSBram Moolenaar
22800aa069dSBram Moolenaar  " A new tab page should inherit the directory of the current tab page
22900aa069dSBram Moolenaar  tabrewind | 1wincmd w
23000aa069dSBram Moolenaar  tabnew g
23100aa069dSBram Moolenaar  call assert_equal("g Xwindir1 1", GetCwdInfo(0, 0))
23200aa069dSBram Moolenaar  tabclose | tabrewind
23300aa069dSBram Moolenaar  2wincmd w
23400aa069dSBram Moolenaar  tabnew h
23500aa069dSBram Moolenaar  call assert_equal("h Xtopdir 0", GetCwdInfo(0, 0))
23600aa069dSBram Moolenaar  tabclose
23700aa069dSBram Moolenaar  tabnext 2 | 1wincmd w
23800aa069dSBram Moolenaar  tabnew j
23900aa069dSBram Moolenaar  call assert_equal("j Xtabdir1 2", GetCwdInfo(0, 0))
24000aa069dSBram Moolenaar  tabclose
24100aa069dSBram Moolenaar
24200aa069dSBram Moolenaar  " Change the global directory for the first tab page
24300aa069dSBram Moolenaar  tabrewind | 1wincmd w
24400aa069dSBram Moolenaar  cd ../Xdir1
24500aa069dSBram Moolenaar  call assert_equal("a Xdir1 0", GetCwdInfo(1, 1))
24600aa069dSBram Moolenaar  call assert_equal("b Xdir1 0", GetCwdInfo(2, 1))
24700aa069dSBram Moolenaar  call assert_equal("m Xtabdir1 2", GetCwdInfo(1, 2))
24800aa069dSBram Moolenaar  call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2))
24900aa069dSBram Moolenaar
25000aa069dSBram Moolenaar  " Change the global directory for the second tab page
25100aa069dSBram Moolenaar  tabnext | 1wincmd w
25200aa069dSBram Moolenaar  cd ../Xdir3
25300aa069dSBram Moolenaar  call assert_equal("m Xdir3 0", GetCwdInfo(1, 2))
25400aa069dSBram Moolenaar  call assert_equal("n Xwindir2 1", GetCwdInfo(2, 2))
25500aa069dSBram Moolenaar  call assert_equal("o Xdir3 0", GetCwdInfo(3, 2))
25600aa069dSBram Moolenaar
25700aa069dSBram Moolenaar  " Change the tab-local directory for the third tab page
25800aa069dSBram Moolenaar  tabnext | 1wincmd w
25900aa069dSBram Moolenaar  cd ../Xdir1
26000aa069dSBram Moolenaar  call assert_equal("x Xdir1 0", GetCwdInfo(1, 3))
26100aa069dSBram Moolenaar  call assert_equal("y Xdir1 0", GetCwdInfo(2, 3))
26200aa069dSBram Moolenaar  call assert_equal("z Xwindir3 1", GetCwdInfo(3, 3))
26300aa069dSBram Moolenaar
26400aa069dSBram Moolenaar  enew | only | tabonly
26500aa069dSBram Moolenaar  new
26600aa069dSBram Moolenaarendfunc
267*6d91bcb4SBram Moolenaar
268*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
269