123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- " Test for commands that close windows and/or buffers:
- " :quit
- " :close
- " :hide
- " :only
- " :sall
- " :all
- " :ball
- " :buf
- " :edit
- "
- func Test_winbuf_close()
- enew | only
- call writefile(['testtext 1'], 'Xtest1')
- call writefile(['testtext 2'], 'Xtest2')
- call writefile(['testtext 3'], 'Xtest3')
- next! Xtest1 Xtest2
- call setline(1, 'testtext 1 1')
- " test for working :n when hidden set
- set hidden
- next
- call assert_equal('Xtest2', bufname('%'))
- " test for failing :rew when hidden not set
- set nohidden
- call setline(1, 'testtext 2 2')
- call assert_fails('rewind', 'E37')
- call assert_equal('Xtest2', bufname('%'))
- call assert_equal('testtext 2 2', getline(1))
- " test for working :rew when hidden set
- set hidden
- rewind
- call assert_equal('Xtest1', bufname('%'))
- call assert_equal('testtext 1 1', getline(1))
- " test for :all keeping a buffer when it's modified
- set nohidden
- call setline(1, 'testtext 1 1 1')
- split
- next Xtest2 Xtest3
- all
- 1wincmd w
- call assert_equal('Xtest1', bufname('%'))
- call assert_equal('testtext 1 1 1', getline(1))
- " test abandoning changed buffer, should be unloaded even when 'hidden' set
- set hidden
- call setline(1, 'testtext 1 1 1 1')
- quit!
- call assert_equal('Xtest2', bufname('%'))
- call assert_equal('testtext 2 2', getline(1))
- unhide
- call assert_equal('Xtest2', bufname('%'))
- call assert_equal('testtext 2 2', getline(1))
- " test ":hide" hides anyway when 'hidden' not set
- set nohidden
- call setline(1, 'testtext 2 2 2')
- hide
- call assert_equal('Xtest3', bufname('%'))
- call assert_equal('testtext 3', getline(1))
- " test ":edit" failing in modified buffer when 'hidden' not set
- call setline(1, 'testtext 3 3')
- call assert_fails('edit Xtest1', 'E37')
- call assert_equal('Xtest3', bufname('%'))
- call assert_equal('testtext 3 3', getline(1))
- " test ":edit" working in modified buffer when 'hidden' set
- set hidden
- edit Xtest1
- call assert_equal('Xtest1', bufname('%'))
- call assert_equal('testtext 1', getline(1))
- " test ":close" not hiding when 'hidden' not set in modified buffer
- split Xtest3
- set nohidden
- call setline(1, 'testtext 3 3 3')
- call assert_fails('close', 'E37')
- call assert_equal('Xtest3', bufname('%'))
- call assert_equal('testtext 3 3 3', getline(1))
- " test ":close!" does hide when 'hidden' not set in modified buffer;
- call setline(1, 'testtext 3 3 3 3')
- close!
- call assert_equal('Xtest1', bufname('%'))
- call assert_equal('testtext 1', getline(1))
- set nohidden
- " test ":all!" hides changed buffer
- split Xtest4
- call setline(1, 'testtext 4')
- all!
- 1wincmd w
- call assert_equal('Xtest2', bufname('%'))
- call assert_equal('testtext 2 2 2', getline(1))
- " test ":q!" and hidden buffer.
- bwipe! Xtest1 Xtest2 Xtest3 Xtest4
- split Xtest1
- wincmd w
- bwipe!
- set modified
- bot split Xtest2
- set modified
- bot split Xtest3
- set modified
- wincmd t
- hide
- call assert_equal('Xtest2', bufname('%'))
- quit!
- call assert_equal('Xtest3', bufname('%'))
- call assert_fails('silent! quit!', 'E37')
- call assert_equal('Xtest1', bufname('%'))
- call delete('Xtest1')
- call delete('Xtest2')
- call delete('Xtest3')
- endfunc
- " Test that ":close" will respect 'winfixheight' when possible.
- func Test_winfixheight_on_close()
- set nosplitbelow nosplitright
- split | split | vsplit
- $wincmd w
- setlocal winfixheight
- let l:height = winheight(0)
- 3close
- call assert_equal(l:height, winheight(0))
- %bwipeout!
- setlocal nowinfixheight splitbelow& splitright&
- endfunc
- " Test that ":close" will respect 'winfixwidth' when possible.
- func Test_winfixwidth_on_close()
- set nosplitbelow nosplitright
- vsplit | vsplit | split
- $wincmd w
- setlocal winfixwidth
- let l:width = winwidth(0)
- 3close
- call assert_equal(l:width, winwidth(0))
- %bwipeout!
- setlocal nowinfixwidth splitbelow& splitright&
- endfunction
- " Test that 'winfixheight' will be respected even there is non-leaf frame
- func Test_winfixheight_non_leaf_frame()
- vsplit
- botright 11new
- let l:wid = win_getid()
- setlocal winfixheight
- call assert_equal(11, winheight(l:wid))
- botright new
- bwipe!
- call assert_equal(11, winheight(l:wid))
- %bwipe!
- endf
- " Test that 'winfixwidth' will be respected even there is non-leaf frame
- func Test_winfixwidth_non_leaf_frame()
- split
- topleft 11vnew
- let l:wid = win_getid()
- setlocal winfixwidth
- call assert_equal(11, winwidth(l:wid))
- topleft new
- bwipe!
- call assert_equal(11, winwidth(l:wid))
- %bwipe!
- endf
- func Test_tabwin_close()
- enew
- let l:wid = win_getid()
- tabedit
- call win_execute(l:wid, 'close')
- " Should not crash.
- call assert_true(v:true)
- " This tests closing a window in another tab, while leaving the tab open
- " i.e. two windows in another tab.
- tabedit
- let w:this_win = 42
- new
- let othertab_wid = win_getid()
- tabprevious
- call win_execute(othertab_wid, 'q')
- " drawing the tabline helps check that the other tab's windows and buffers
- " are still valid
- redrawtabline
- " but to be certain, ensure we can focus the other tab too
- tabnext
- call assert_equal(42, w:this_win)
- bwipe!
- endfunc
- " Test when closing a split window (above/below) restores space to the window
- " below when 'noequalalways' and 'splitright' are set.
- func Test_window_close_splitright_noequalalways()
- set noequalalways
- set splitright
- new
- let w1 = win_getid()
- new
- let w2 = win_getid()
- execute "normal \<c-w>b"
- let h = winheight(0)
- let w = win_getid()
- new
- q
- call assert_equal(h, winheight(0), "Window height does not match eight before opening and closing another window")
- call assert_equal(w, win_getid(), "Did not return to original window after opening and closing a window")
- endfunc
|