14a6fcf80SBram Moolenaar" Test for commands that close windows and/or buffers:
24a6fcf80SBram Moolenaar" :quit
34a6fcf80SBram Moolenaar" :close
44a6fcf80SBram Moolenaar" :hide
54a6fcf80SBram Moolenaar" :only
64a6fcf80SBram Moolenaar" :sall
74a6fcf80SBram Moolenaar" :all
84a6fcf80SBram Moolenaar" :ball
94a6fcf80SBram Moolenaar" :buf
104a6fcf80SBram Moolenaar" :edit
114a6fcf80SBram Moolenaar"
124a6fcf80SBram Moolenaarfunc Test_winbuf_close()
134a6fcf80SBram Moolenaar  enew | only
144a6fcf80SBram Moolenaar
154a6fcf80SBram Moolenaar  call writefile(['testtext 1'], 'Xtest1')
164a6fcf80SBram Moolenaar  call writefile(['testtext 2'], 'Xtest2')
174a6fcf80SBram Moolenaar  call writefile(['testtext 3'], 'Xtest3')
184a6fcf80SBram Moolenaar
194a6fcf80SBram Moolenaar  next! Xtest1 Xtest2
204a6fcf80SBram Moolenaar  call setline(1, 'testtext 1 1')
214a6fcf80SBram Moolenaar
224a6fcf80SBram Moolenaar  " test for working :n when hidden set
234a6fcf80SBram Moolenaar  set hidden
244a6fcf80SBram Moolenaar  next
254a6fcf80SBram Moolenaar  call assert_equal('Xtest2', bufname('%'))
264a6fcf80SBram Moolenaar
274a6fcf80SBram Moolenaar  " test for failing :rew when hidden not set
284a6fcf80SBram Moolenaar  set nohidden
294a6fcf80SBram Moolenaar  call setline(1, 'testtext 2 2')
30e2e4075fSBram Moolenaar  call assert_fails('rewind', 'E37:')
314a6fcf80SBram Moolenaar  call assert_equal('Xtest2', bufname('%'))
324a6fcf80SBram Moolenaar  call assert_equal('testtext 2 2', getline(1))
334a6fcf80SBram Moolenaar
344a6fcf80SBram Moolenaar  " test for working :rew when hidden set
354a6fcf80SBram Moolenaar  set hidden
364a6fcf80SBram Moolenaar  rewind
374a6fcf80SBram Moolenaar  call assert_equal('Xtest1', bufname('%'))
384a6fcf80SBram Moolenaar  call assert_equal('testtext 1 1', getline(1))
394a6fcf80SBram Moolenaar
404a6fcf80SBram Moolenaar  " test for :all keeping a buffer when it's modified
414a6fcf80SBram Moolenaar  set nohidden
424a6fcf80SBram Moolenaar  call setline(1, 'testtext 1 1 1')
434a6fcf80SBram Moolenaar  split
444a6fcf80SBram Moolenaar  next Xtest2 Xtest3
454a6fcf80SBram Moolenaar  all
464a6fcf80SBram Moolenaar  1wincmd w
474a6fcf80SBram Moolenaar  call assert_equal('Xtest1', bufname('%'))
484a6fcf80SBram Moolenaar  call assert_equal('testtext 1 1 1', getline(1))
494a6fcf80SBram Moolenaar
504a6fcf80SBram Moolenaar  " test abandoning changed buffer, should be unloaded even when 'hidden' set
514a6fcf80SBram Moolenaar  set hidden
524a6fcf80SBram Moolenaar  call setline(1, 'testtext 1 1 1 1')
534a6fcf80SBram Moolenaar  quit!
544a6fcf80SBram Moolenaar  call assert_equal('Xtest2', bufname('%'))
554a6fcf80SBram Moolenaar  call assert_equal('testtext 2 2', getline(1))
564a6fcf80SBram Moolenaar  unhide
574a6fcf80SBram Moolenaar  call assert_equal('Xtest2', bufname('%'))
584a6fcf80SBram Moolenaar  call assert_equal('testtext 2 2', getline(1))
594a6fcf80SBram Moolenaar
604a6fcf80SBram Moolenaar  " test ":hide" hides anyway when 'hidden' not set
614a6fcf80SBram Moolenaar  set nohidden
624a6fcf80SBram Moolenaar  call setline(1, 'testtext 2 2 2')
634a6fcf80SBram Moolenaar  hide
644a6fcf80SBram Moolenaar  call assert_equal('Xtest3', bufname('%'))
654a6fcf80SBram Moolenaar  call assert_equal('testtext 3', getline(1))
664a6fcf80SBram Moolenaar
674a6fcf80SBram Moolenaar  " test ":edit" failing in modified buffer when 'hidden' not set
684a6fcf80SBram Moolenaar  call setline(1, 'testtext 3 3')
69e2e4075fSBram Moolenaar  call assert_fails('edit Xtest1', 'E37:')
704a6fcf80SBram Moolenaar  call assert_equal('Xtest3', bufname('%'))
714a6fcf80SBram Moolenaar  call assert_equal('testtext 3 3', getline(1))
724a6fcf80SBram Moolenaar
734a6fcf80SBram Moolenaar  " test ":edit" working in modified buffer when 'hidden' set
744a6fcf80SBram Moolenaar  set hidden
754a6fcf80SBram Moolenaar  edit Xtest1
764a6fcf80SBram Moolenaar  call assert_equal('Xtest1', bufname('%'))
774a6fcf80SBram Moolenaar  call assert_equal('testtext 1', getline(1))
784a6fcf80SBram Moolenaar
794a6fcf80SBram Moolenaar  " test ":close" not hiding when 'hidden' not set in modified buffer
804a6fcf80SBram Moolenaar  split Xtest3
814a6fcf80SBram Moolenaar  set nohidden
824a6fcf80SBram Moolenaar  call setline(1, 'testtext 3 3 3')
83e2e4075fSBram Moolenaar  call assert_fails('close', 'E37:')
844a6fcf80SBram Moolenaar  call assert_equal('Xtest3', bufname('%'))
854a6fcf80SBram Moolenaar  call assert_equal('testtext 3 3 3', getline(1))
864a6fcf80SBram Moolenaar
874a6fcf80SBram Moolenaar  " test ":close!" does hide when 'hidden' not set in modified buffer;
884a6fcf80SBram Moolenaar  call setline(1, 'testtext 3 3 3 3')
894a6fcf80SBram Moolenaar  close!
904a6fcf80SBram Moolenaar  call assert_equal('Xtest1', bufname('%'))
914a6fcf80SBram Moolenaar  call assert_equal('testtext 1', getline(1))
924a6fcf80SBram Moolenaar
934a6fcf80SBram Moolenaar  set nohidden
944a6fcf80SBram Moolenaar
954a6fcf80SBram Moolenaar  " test ":all!" hides changed buffer
964a6fcf80SBram Moolenaar  split Xtest4
974a6fcf80SBram Moolenaar  call setline(1, 'testtext 4')
984a6fcf80SBram Moolenaar  all!
994a6fcf80SBram Moolenaar  1wincmd w
1004a6fcf80SBram Moolenaar  call assert_equal('Xtest2', bufname('%'))
1014a6fcf80SBram Moolenaar  call assert_equal('testtext 2 2 2', getline(1))
1024a6fcf80SBram Moolenaar
1034a6fcf80SBram Moolenaar  " test ":q!" and hidden buffer.
1044a6fcf80SBram Moolenaar  bwipe! Xtest1 Xtest2 Xtest3 Xtest4
1054a6fcf80SBram Moolenaar  split Xtest1
1064a6fcf80SBram Moolenaar  wincmd w
1074a6fcf80SBram Moolenaar  bwipe!
1084a6fcf80SBram Moolenaar  set modified
1094a6fcf80SBram Moolenaar  bot split Xtest2
1104a6fcf80SBram Moolenaar  set modified
1114a6fcf80SBram Moolenaar  bot split Xtest3
1124a6fcf80SBram Moolenaar  set modified
1134a6fcf80SBram Moolenaar  wincmd t
1144a6fcf80SBram Moolenaar  hide
1154a6fcf80SBram Moolenaar  call assert_equal('Xtest2', bufname('%'))
1164a6fcf80SBram Moolenaar  quit!
1174a6fcf80SBram Moolenaar  call assert_equal('Xtest3', bufname('%'))
118e2e4075fSBram Moolenaar  call assert_fails('silent! quit!', 'E37:')
1194a6fcf80SBram Moolenaar  call assert_equal('Xtest1', bufname('%'))
1204a6fcf80SBram Moolenaar
1214a6fcf80SBram Moolenaar  call delete('Xtest1')
1224a6fcf80SBram Moolenaar  call delete('Xtest2')
1234a6fcf80SBram Moolenaar  call delete('Xtest3')
1244a6fcf80SBram Moolenaarendfunc
125c136af29SBram Moolenaar
126c136af29SBram Moolenaar" Test that ":close" will respect 'winfixheight' when possible.
127c136af29SBram Moolenaarfunc Test_winfixheight_on_close()
128c136af29SBram Moolenaar  set nosplitbelow nosplitright
129c136af29SBram Moolenaar
130c136af29SBram Moolenaar  split | split | vsplit
131c136af29SBram Moolenaar
132c136af29SBram Moolenaar  $wincmd w
133c136af29SBram Moolenaar  setlocal winfixheight
134c136af29SBram Moolenaar  let l:height = winheight(0)
135c136af29SBram Moolenaar
136c136af29SBram Moolenaar  3close
137c136af29SBram Moolenaar
138c136af29SBram Moolenaar  call assert_equal(l:height, winheight(0))
139c136af29SBram Moolenaar
140c136af29SBram Moolenaar  %bwipeout!
141c136af29SBram Moolenaar  setlocal nowinfixheight splitbelow& splitright&
142c136af29SBram Moolenaarendfunc
143c136af29SBram Moolenaar
144c136af29SBram Moolenaar" Test that ":close" will respect 'winfixwidth' when possible.
145c136af29SBram Moolenaarfunc Test_winfixwidth_on_close()
146c136af29SBram Moolenaar  set nosplitbelow nosplitright
147c136af29SBram Moolenaar
148c136af29SBram Moolenaar  vsplit | vsplit | split
149c136af29SBram Moolenaar
150c136af29SBram Moolenaar  $wincmd w
151c136af29SBram Moolenaar  setlocal winfixwidth
152c136af29SBram Moolenaar  let l:width = winwidth(0)
153c136af29SBram Moolenaar
154c136af29SBram Moolenaar  3close
155c136af29SBram Moolenaar
156c136af29SBram Moolenaar  call assert_equal(l:width, winwidth(0))
157c136af29SBram Moolenaar
158c136af29SBram Moolenaar  %bwipeout!
159c136af29SBram Moolenaar  setlocal nowinfixwidth splitbelow& splitright&
160c136af29SBram Moolenaarendfunction
1619e1e358dSBram Moolenaar
1629e1e358dSBram Moolenaar" Test that 'winfixheight' will be respected even there is non-leaf frame
163a44b3eeaSBram Moolenaarfunc Test_winfixheight_non_leaf_frame()
1649e1e358dSBram Moolenaar  vsplit
1659e1e358dSBram Moolenaar  botright 11new
1669e1e358dSBram Moolenaar  let l:wid = win_getid()
1679e1e358dSBram Moolenaar  setlocal winfixheight
1689e1e358dSBram Moolenaar  call assert_equal(11, winheight(l:wid))
1699e1e358dSBram Moolenaar  botright new
1709e1e358dSBram Moolenaar  bwipe!
1719e1e358dSBram Moolenaar  call assert_equal(11, winheight(l:wid))
1729e1e358dSBram Moolenaar  %bwipe!
1739e1e358dSBram Moolenaarendf
1749e1e358dSBram Moolenaar
1759e1e358dSBram Moolenaar" Test that 'winfixwidth' will be respected even there is non-leaf frame
176a44b3eeaSBram Moolenaarfunc Test_winfixwidth_non_leaf_frame()
1779e1e358dSBram Moolenaar  split
1789e1e358dSBram Moolenaar  topleft 11vnew
1799e1e358dSBram Moolenaar  let l:wid = win_getid()
1809e1e358dSBram Moolenaar  setlocal winfixwidth
1819e1e358dSBram Moolenaar  call assert_equal(11, winwidth(l:wid))
1829e1e358dSBram Moolenaar  topleft new
1839e1e358dSBram Moolenaar  bwipe!
1849e1e358dSBram Moolenaar  call assert_equal(11, winwidth(l:wid))
1859e1e358dSBram Moolenaar  %bwipe!
1869e1e358dSBram Moolenaarendf
187a44b3eeaSBram Moolenaar
188a44b3eeaSBram Moolenaarfunc Test_tabwin_close()
189a44b3eeaSBram Moolenaar  enew
190a44b3eeaSBram Moolenaar  let l:wid = win_getid()
191a44b3eeaSBram Moolenaar  tabedit
192a44b3eeaSBram Moolenaar  call win_execute(l:wid, 'close')
193a44b3eeaSBram Moolenaar  " Should not crash.
194a44b3eeaSBram Moolenaar  call assert_true(v:true)
195*f3c51bbfSBram Moolenaar
196*f3c51bbfSBram Moolenaar  " This tests closing a window in another tab, while leaving the tab open
197*f3c51bbfSBram Moolenaar  " i.e. two windows in another tab.
198*f3c51bbfSBram Moolenaar  tabedit
199*f3c51bbfSBram Moolenaar  let w:this_win = 42
200*f3c51bbfSBram Moolenaar  new
201*f3c51bbfSBram Moolenaar  let othertab_wid = win_getid()
202*f3c51bbfSBram Moolenaar  tabprevious
203*f3c51bbfSBram Moolenaar  call win_execute(othertab_wid, 'q')
204*f3c51bbfSBram Moolenaar  " drawing the tabline helps check that the other tab's windows and buffers
205*f3c51bbfSBram Moolenaar  " are still valid
206*f3c51bbfSBram Moolenaar  redrawtabline
207*f3c51bbfSBram Moolenaar  " but to be certain, ensure we can focus the other tab too
208*f3c51bbfSBram Moolenaar  tabnext
209*f3c51bbfSBram Moolenaar  call assert_equal(42, w:this_win)
210*f3c51bbfSBram Moolenaar
211*f3c51bbfSBram Moolenaar  bwipe!
212a44b3eeaSBram Moolenaarendfunc
213edd327ccSBram Moolenaar
214edd327ccSBram Moolenaar" Test when closing a split window (above/below) restores space to the window
215edd327ccSBram Moolenaar" below when 'noequalalways' and 'splitright' are set.
216edd327ccSBram Moolenaarfunc Test_window_close_splitright_noequalalways()
217edd327ccSBram Moolenaar  set noequalalways
218edd327ccSBram Moolenaar  set splitright
219edd327ccSBram Moolenaar  new
220edd327ccSBram Moolenaar  let w1 = win_getid()
221edd327ccSBram Moolenaar  new
222edd327ccSBram Moolenaar  let w2 = win_getid()
223edd327ccSBram Moolenaar  execute "normal \<c-w>b"
224edd327ccSBram Moolenaar  let h = winheight(0)
225edd327ccSBram Moolenaar  let w = win_getid()
226edd327ccSBram Moolenaar  new
227edd327ccSBram Moolenaar  q
228edd327ccSBram Moolenaar  call assert_equal(h, winheight(0), "Window height does not match eight before opening and closing another window")
229edd327ccSBram Moolenaar  call assert_equal(w, win_getid(), "Did not return to original window after opening and closing a window")
230edd327ccSBram Moolenaarendfunc
231edd327ccSBram Moolenaar
2326d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
233