1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231
|
" 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
|