call StopVimInTerminal(buf)
endfunc
+" When shrinking a window and the only other window has 'winfixheight'
+" with 'winminheight'=0, freed rows must go to the wfh window.
+func Test_winfixheight_resize_wmh_zero()
+ set winminheight=0 laststatus=0
+
+ let id1 = win_getid()
+ copen
+ let id2 = win_getid()
+ wincmd w
+ wincmd _
+ let wi1 = getwininfo(id1)[0]
+ let wi2 = getwininfo(id2)[0]
+ let exp = &lines - wi1.status_height - wi2.height - wi2.status_height - &ch
+ call assert_equal([exp, 1], [wi1.height, wi1.status_height])
+ call assert_equal([0, 0], [wi2.height, wi2.status_height])
+
+ wincmd w " enter qf (height 0 -> 1)
+ let wi1 = getwininfo(id1)[0]
+ let wi2 = getwininfo(id2)[0]
+ let exp = &lines - wi1.status_height - wi2.height - wi2.status_height - &ch
+ call assert_equal(exp, wi1.height)
+ call assert_equal(1, wi2.height)
+
+ wincmd w
+ " Freed rows must go to qf (wfh, only other window).
+ " Before the fix, the rows were lost (fr_height sum < topframe fr_height),
+ " resulting in wrong window heights in subsequent operations.
+ 1wincmd _
+ let wi1 = getwininfo(id1)[0]
+ let wi2 = getwininfo(id2)[0]
+ call assert_equal(1, wi1.height)
+ let exp = &lines - wi1.height - wi1.status_height - &ch
+ call assert_equal(exp, wi2.height)
+
+ wincmd w
+ 99wincmd +
+ let wi1 = getwininfo(id1)[0]
+ let wi2 = getwininfo(id2)[0]
+ call assert_equal(0, wi1.height)
+ let exp = &lines - wi1.height - wi1.status_height - &ch
+ call assert_equal(exp, wi2.height)
+
+ 99wincmd -
+ let wi1 = getwininfo(id1)[0]
+ let wi2 = getwininfo(id2)[0]
+ let exp = &lines - wi1.status_height - wi2.height - &ch
+ call assert_equal(exp, wi1.height)
+ call assert_equal(1, wi2.height)
+
+ " The original bug caused a crash here, but could not be reproduced in the
+ " test. Kept as-is, though it has no particular significance.
+ wincmd w
+ call feedkeys("999i\<CR>\<Esc>", 'tx')
+ call feedkeys("ggMi" .. repeat("\<CR>", 99) .. "\<Esc>", 'tx')
+ let wi1 = getwininfo(id1)[0]
+ let wi2 = getwininfo(id2)[0]
+ let exp = &lines - wi1.status_height - wi2.height - &ch
+ call assert_equal(exp, wi1.height)
+ call assert_equal(1, wi2.height)
+
+ cclose
+ set winminheight& laststatus&
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab