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