xref: /vim-8.2.3635/src/testdir/test_getcwd.vim (revision 577fadfc)
1func 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)
20    let lflag = haslocaldir(a:win, a:tab)
21  endif
22  return bufname . ' ' . dirname . ' ' . lflag
23endfunc
24
25" Do all test in a separate window to avoid E211 when we recursively
26" delete the Xtopdir directory during cleanup
27function SetUp()
28  set visualbell
29  set nocp viminfo+=nviminfo
30
31  " On windows a swapfile in Xtopdir prevents it from being cleaned up.
32  set noswapfile
33
34  " 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
38  call mkdir('Xtopdir')
39  cd Xtopdir
40  let g:topdir = getcwd()
41  call mkdir('Xdir1')
42  call mkdir('Xdir2')
43  call mkdir('Xdir3')
44endfunction
45
46let g:cwd=getcwd()
47function TearDown()
48  q
49  exec "cd " . g:cwd
50  call delete("Xtopdir", "rf")
51endfunction
52
53function Test_GetCwd()
54  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))
76
77  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))
100endfunc
101
102function Test_GetCwd_lcd_shellslash()
103  new
104  let root = fnamemodify('/', ':p')
105  exe 'lcd '.root
106  let cwd = getcwd()
107  if !exists('+shellslash') || &shellslash
108    call assert_equal(cwd[-1:], '/')
109  else
110    call assert_equal(cwd[-1:], '\')
111  endif
112endfunc
113