xref: /vim-8.2.3635/src/testdir/test_cd.vim (revision 851c7a69)
11063f3d2SBram Moolenaar" Test for :cd and chdir()
215618fa6SBram Moolenaar
39f6277bdSBram Moolenaarsource shared.vim
4fe3418abSDominique Pellesource check.vim
59f6277bdSBram Moolenaar
615618fa6SBram Moolenaarfunc Test_cd_large_path()
715618fa6SBram Moolenaar  " This used to crash with a heap write overflow.
89b7bf9e9SBram Moolenaar  call assert_fails('cd ' . repeat('x', 5000), 'E344:')
915618fa6SBram Moolenaarendfunc
1015618fa6SBram Moolenaar
1115618fa6SBram Moolenaarfunc Test_cd_up_and_down()
1215618fa6SBram Moolenaar  let path = getcwd()
1315618fa6SBram Moolenaar  cd ..
14b2e0c94aSBram Moolenaar  call assert_notequal(path, getcwd())
153503d7c9SBram Moolenaar  exe 'cd ' .. fnameescape(path)
1615618fa6SBram Moolenaar  call assert_equal(path, getcwd())
1715618fa6SBram Moolenaarendfunc
18b2e0c94aSBram Moolenaar
19b2e0c94aSBram Moolenaarfunc Test_cd_no_arg()
20b2e0c94aSBram Moolenaar  if has('unix')
21b2e0c94aSBram Moolenaar    " Test that cd without argument goes to $HOME directory on Unix systems.
22b2e0c94aSBram Moolenaar    let path = getcwd()
23b2e0c94aSBram Moolenaar    cd
24b2e0c94aSBram Moolenaar    call assert_equal($HOME, getcwd())
25b2e0c94aSBram Moolenaar    call assert_notequal(path, getcwd())
263503d7c9SBram Moolenaar    exe 'cd ' .. fnameescape(path)
27b2e0c94aSBram Moolenaar    call assert_equal(path, getcwd())
28b2e0c94aSBram Moolenaar  else
29b2e0c94aSBram Moolenaar    " Test that cd without argument echoes cwd on non-Unix systems.
30b2e0c94aSBram Moolenaar    call assert_match(getcwd(), execute('cd'))
31b2e0c94aSBram Moolenaar  endif
32b2e0c94aSBram Moolenaarendfunc
33b2e0c94aSBram Moolenaar
34b2e0c94aSBram Moolenaarfunc Test_cd_minus()
35b2e0c94aSBram Moolenaar  " Test the  :cd -  goes back to the previous directory.
36b2e0c94aSBram Moolenaar  let path = getcwd()
37b2e0c94aSBram Moolenaar  cd ..
38b2e0c94aSBram Moolenaar  let path_dotdot = getcwd()
39b2e0c94aSBram Moolenaar  call assert_notequal(path, path_dotdot)
40b2e0c94aSBram Moolenaar  cd -
41b2e0c94aSBram Moolenaar  call assert_equal(path, getcwd())
42b2e0c94aSBram Moolenaar  cd -
43b2e0c94aSBram Moolenaar  call assert_equal(path_dotdot, getcwd())
44b2e0c94aSBram Moolenaar  cd -
45b2e0c94aSBram Moolenaar  call assert_equal(path, getcwd())
469f6277bdSBram Moolenaar
479f6277bdSBram Moolenaar  " Test for :cd - without a previous directory
489f6277bdSBram Moolenaar  let lines =<< trim [SCRIPT]
499f6277bdSBram Moolenaar    call assert_fails('cd -', 'E186:')
509f6277bdSBram Moolenaar    call assert_fails('call chdir("-")', 'E186:')
519f6277bdSBram Moolenaar    call writefile(v:errors, 'Xresult')
529f6277bdSBram Moolenaar    qall!
539f6277bdSBram Moolenaar  [SCRIPT]
549f6277bdSBram Moolenaar  call writefile(lines, 'Xscript')
559f6277bdSBram Moolenaar  if RunVim([], [], '--clean -S Xscript')
569f6277bdSBram Moolenaar    call assert_equal([], readfile('Xresult'))
579f6277bdSBram Moolenaar  endif
589f6277bdSBram Moolenaar  call delete('Xscript')
599f6277bdSBram Moolenaar  call delete('Xresult')
60b2e0c94aSBram Moolenaarendfunc
61b2e0c94aSBram Moolenaar
621063f3d2SBram Moolenaar" Test for chdir()
631063f3d2SBram Moolenaarfunc Test_chdir_func()
641063f3d2SBram Moolenaar  let topdir = getcwd()
651063f3d2SBram Moolenaar  call mkdir('Xdir/y/z', 'p')
661063f3d2SBram Moolenaar
671063f3d2SBram Moolenaar  " Create a few tabpages and windows with different directories
681063f3d2SBram Moolenaar  new
691063f3d2SBram Moolenaar  cd Xdir
701063f3d2SBram Moolenaar  tabnew
711063f3d2SBram Moolenaar  tcd y
721063f3d2SBram Moolenaar  below new
731063f3d2SBram Moolenaar  below new
741063f3d2SBram Moolenaar  lcd z
751063f3d2SBram Moolenaar
761063f3d2SBram Moolenaar  tabfirst
7795058724SBram Moolenaar  call assert_match('^\[global\] .*/Xdir$', trim(execute('verbose pwd')))
781063f3d2SBram Moolenaar  call chdir('..')
791063f3d2SBram Moolenaar  call assert_equal('y', fnamemodify(getcwd(1, 2), ':t'))
804c313b13SBram Moolenaar  call assert_equal('z', fnamemodify(3->getcwd(2), ':t'))
811063f3d2SBram Moolenaar  tabnext | wincmd t
8295058724SBram Moolenaar  call assert_match('^\[tabpage\] .*/y$', trim(execute('verbose pwd')))
831a3a8916SBram Moolenaar  eval '..'->chdir()
841063f3d2SBram Moolenaar  call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t'))
851063f3d2SBram Moolenaar  call assert_equal('Xdir', fnamemodify(getcwd(2, 2), ':t'))
861063f3d2SBram Moolenaar  call assert_equal('z', fnamemodify(getcwd(3, 2), ':t'))
871063f3d2SBram Moolenaar  call assert_equal('testdir', fnamemodify(getcwd(1, 1), ':t'))
881063f3d2SBram Moolenaar  3wincmd w
8995058724SBram Moolenaar  call assert_match('^\[window\] .*/z$', trim(execute('verbose pwd')))
901063f3d2SBram Moolenaar  call chdir('..')
911063f3d2SBram Moolenaar  call assert_equal('Xdir', fnamemodify(getcwd(1, 2), ':t'))
921063f3d2SBram Moolenaar  call assert_equal('Xdir', fnamemodify(getcwd(2, 2), ':t'))
931063f3d2SBram Moolenaar  call assert_equal('y', fnamemodify(getcwd(3, 2), ':t'))
941063f3d2SBram Moolenaar  call assert_equal('testdir', fnamemodify(getcwd(1, 1), ':t'))
951063f3d2SBram Moolenaar
961063f3d2SBram Moolenaar  " Error case
979b7bf9e9SBram Moolenaar  call assert_fails("call chdir('dir-abcd')", 'E344:')
981063f3d2SBram Moolenaar  silent! let d = chdir("dir_abcd")
991063f3d2SBram Moolenaar  call assert_equal("", d)
1007cc96923SBram Moolenaar  " Should not crash
1017cc96923SBram Moolenaar  call chdir(d)
10292b83ccfSBram Moolenaar  call assert_equal('', chdir([]))
1031063f3d2SBram Moolenaar
1041063f3d2SBram Moolenaar  only | tabonly
1053503d7c9SBram Moolenaar  call chdir(topdir)
1061063f3d2SBram Moolenaar  call delete('Xdir', 'rf')
1071063f3d2SBram Moolenaarendfunc
108297610baSBram Moolenaar
109002bc799SBram Moolenaar" Test for changing to the previous directory '-'
110002bc799SBram Moolenaarfunc Test_prev_dir()
111002bc799SBram Moolenaar  let topdir = getcwd()
112002bc799SBram Moolenaar  call mkdir('Xdir/a/b/c', 'p')
113002bc799SBram Moolenaar
114002bc799SBram Moolenaar  " Create a few tabpages and windows with different directories
115002bc799SBram Moolenaar  new | only
116002bc799SBram Moolenaar  tabnew | new
117002bc799SBram Moolenaar  tabnew
118002bc799SBram Moolenaar  tabfirst
119002bc799SBram Moolenaar  cd Xdir
120002bc799SBram Moolenaar  tabnext | wincmd t
121002bc799SBram Moolenaar  tcd a
122002bc799SBram Moolenaar  wincmd w
123002bc799SBram Moolenaar  lcd b
124002bc799SBram Moolenaar  tabnext
125002bc799SBram Moolenaar  tcd a/b/c
126002bc799SBram Moolenaar
127002bc799SBram Moolenaar  " Change to the previous directory twice in all the windows.
128002bc799SBram Moolenaar  tabfirst
129002bc799SBram Moolenaar  cd - | cd -
130002bc799SBram Moolenaar  tabnext | wincmd t
131002bc799SBram Moolenaar  tcd - | tcd -
132002bc799SBram Moolenaar  wincmd w
133002bc799SBram Moolenaar  lcd - | lcd -
134002bc799SBram Moolenaar  tabnext
135002bc799SBram Moolenaar  tcd - | tcd -
136002bc799SBram Moolenaar
137002bc799SBram Moolenaar  " Check the directory of all the windows
138002bc799SBram Moolenaar  tabfirst
139002bc799SBram Moolenaar  call assert_equal('Xdir', fnamemodify(getcwd(), ':t'))
140002bc799SBram Moolenaar  tabnext | wincmd t
141002bc799SBram Moolenaar  call assert_equal('a', fnamemodify(getcwd(), ':t'))
142002bc799SBram Moolenaar  wincmd w
143002bc799SBram Moolenaar  call assert_equal('b', fnamemodify(getcwd(), ':t'))
144002bc799SBram Moolenaar  tabnext
145002bc799SBram Moolenaar  call assert_equal('c', fnamemodify(getcwd(), ':t'))
146002bc799SBram Moolenaar
147002bc799SBram Moolenaar  " Change to the previous directory using chdir()
148002bc799SBram Moolenaar  tabfirst
149002bc799SBram Moolenaar  call chdir("-") | call chdir("-")
150002bc799SBram Moolenaar  tabnext | wincmd t
151002bc799SBram Moolenaar  call chdir("-") | call chdir("-")
152002bc799SBram Moolenaar  wincmd w
153002bc799SBram Moolenaar  call chdir("-") | call chdir("-")
154002bc799SBram Moolenaar  tabnext
155002bc799SBram Moolenaar  call chdir("-") | call chdir("-")
156002bc799SBram Moolenaar
157002bc799SBram Moolenaar  " Check the directory of all the windows
158002bc799SBram Moolenaar  tabfirst
159002bc799SBram Moolenaar  call assert_equal('Xdir', fnamemodify(getcwd(), ':t'))
160002bc799SBram Moolenaar  tabnext | wincmd t
161002bc799SBram Moolenaar  call assert_equal('a', fnamemodify(getcwd(), ':t'))
162002bc799SBram Moolenaar  wincmd w
163002bc799SBram Moolenaar  call assert_equal('b', fnamemodify(getcwd(), ':t'))
164002bc799SBram Moolenaar  tabnext
165002bc799SBram Moolenaar  call assert_equal('c', fnamemodify(getcwd(), ':t'))
166002bc799SBram Moolenaar
167002bc799SBram Moolenaar  only | tabonly
168002bc799SBram Moolenaar  call chdir(topdir)
169002bc799SBram Moolenaar  call delete('Xdir', 'rf')
170002bc799SBram Moolenaarendfunc
171002bc799SBram Moolenaar
172a9a47d15SBram Moolenaarfunc Test_lcd_split()
173a9a47d15SBram Moolenaar  let curdir = getcwd()
174a9a47d15SBram Moolenaar  lcd ..
175a9a47d15SBram Moolenaar  split
176a9a47d15SBram Moolenaar  lcd -
177a9a47d15SBram Moolenaar  call assert_equal(curdir, getcwd())
178a9a47d15SBram Moolenaar  quit!
179a9a47d15SBram Moolenaarendfunc
180a9a47d15SBram Moolenaar
181fe3418abSDominique Pellefunc Test_cd_from_non_existing_dir()
182fe3418abSDominique Pelle  CheckNotMSWindows
183fe3418abSDominique Pelle
184fe3418abSDominique Pelle  let saveddir = getcwd()
185fe3418abSDominique Pelle  call mkdir('Xdeleted_dir')
186fe3418abSDominique Pelle  cd Xdeleted_dir
187fe3418abSDominique Pelle  call delete(saveddir .. '/Xdeleted_dir', 'd')
188fe3418abSDominique Pelle
189fe3418abSDominique Pelle  " Expect E187 as the current directory was deleted.
190fe3418abSDominique Pelle  call assert_fails('pwd', 'E187:')
191fe3418abSDominique Pelle  call assert_equal('', getcwd())
192fe3418abSDominique Pelle  cd -
193fe3418abSDominique Pelle  call assert_equal(saveddir, getcwd())
194fe3418abSDominique Pelleendfunc
195fe3418abSDominique Pelle
196297610baSBram Moolenaarfunc Test_cd_completion()
197297610baSBram Moolenaar  call mkdir('XComplDir1', 'p')
198297610baSBram Moolenaar  call mkdir('XComplDir2', 'p')
199297610baSBram Moolenaar  call writefile([], 'XComplFile')
200297610baSBram Moolenaar
201297610baSBram Moolenaar  for cmd in ['cd', 'chdir', 'lcd', 'lchdir', 'tcd', 'tchdir']
202297610baSBram Moolenaar    call feedkeys(':' .. cmd .. " XCompl\<C-A>\<C-B>\"\<CR>", 'tx')
203297610baSBram Moolenaar    call assert_equal('"' .. cmd .. ' XComplDir1/ XComplDir2/', @:)
204297610baSBram Moolenaar  endfor
205297610baSBram Moolenaar
206297610baSBram Moolenaar  call delete('XComplDir1', 'd')
207297610baSBram Moolenaar  call delete('XComplDir2', 'd')
208297610baSBram Moolenaar  call delete('XComplFile')
209297610baSBram Moolenaarendfunc
2106d91bcb4SBram Moolenaar
211c6376c79SBram Moolenaarfunc Test_cd_unknown_dir()
212c6376c79SBram Moolenaar  call mkdir('Xa')
213c6376c79SBram Moolenaar  cd Xa
214c6376c79SBram Moolenaar  call writefile(['text'], 'Xb.txt')
215c6376c79SBram Moolenaar  edit Xa/Xb.txt
216c6376c79SBram Moolenaar  let first_buf = bufnr()
217c6376c79SBram Moolenaar  cd ..
218c6376c79SBram Moolenaar  edit
219c6376c79SBram Moolenaar  call assert_equal(first_buf, bufnr())
220c6376c79SBram Moolenaar  edit Xa/Xb.txt
221c6376c79SBram Moolenaar  call assert_notequal(first_buf, bufnr())
222c6376c79SBram Moolenaar
223c6376c79SBram Moolenaar  bwipe!
224c6376c79SBram Moolenaar  exe "bwipe! " .. first_buf
225c6376c79SBram Moolenaar  call delete('Xa', 'rf')
226c6376c79SBram Moolenaarendfunc
227c6376c79SBram Moolenaar
228*851c7a69SBram Moolenaarfunc Test_getcwd_actual_dir()
229*851c7a69SBram Moolenaar  let startdir = getcwd()
230*851c7a69SBram Moolenaar  call mkdir('Xactual')
231*851c7a69SBram Moolenaar  call test_autochdir()
232*851c7a69SBram Moolenaar  set autochdir
233*851c7a69SBram Moolenaar  edit Xactual/file.txt
234*851c7a69SBram Moolenaar  call assert_match('testdir.Xactual$', getcwd())
235*851c7a69SBram Moolenaar  lcd ..
236*851c7a69SBram Moolenaar  call assert_match('testdir$', getcwd())
237*851c7a69SBram Moolenaar  edit
238*851c7a69SBram Moolenaar  call assert_match('testdir.Xactual$', getcwd())
239*851c7a69SBram Moolenaar  call assert_match('testdir$', getcwd(win_getid()))
240*851c7a69SBram Moolenaar
241*851c7a69SBram Moolenaar  set noautochdir
242*851c7a69SBram Moolenaar  bwipe!
243*851c7a69SBram Moolenaar  call chdir(startdir)
244*851c7a69SBram Moolenaar  call delete('Xactual', 'rf')
245*851c7a69SBram Moolenaarendfunc
246*851c7a69SBram Moolenaar
2476d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
248