0
0
mirror of https://github.com/vim/vim.git synced 2025-07-26 11:04:33 -04:00

patch 8.1.1626: no test for closing a popup window with a modified buffer

Problem:    No test for closing a popup window with a modified buffer.
Solution:   Add a test.  Add "popups" to getbufinfo().
This commit is contained in:
Bram Moolenaar 2019-07-04 15:39:28 +02:00
parent bc2cfe4672
commit 5ca1ac373a
4 changed files with 56 additions and 4 deletions

View File

@ -3140,7 +3140,11 @@ bufadd({name}) *bufadd()*
number. Otherwise return the buffer number of the newly
created buffer. When {name} is an empty string then a new
buffer is always created.
The buffer will not have' 'buflisted' set.
The buffer will not have' 'buflisted' set and not be loaded
yet. To add some text to the buffer use this: >
let bufnr = bufadd('someName')
call bufload(bufnr)
call setbufline(bufnr, 1, ['some', 'text'])
bufexists({expr}) *bufexists()*
The result is a Number, which is |TRUE| if a buffer called
@ -4744,6 +4748,8 @@ getbufinfo([{dict}])
buffer-local variables.
windows list of |window-ID|s that display this
buffer
popups list of popup |window-ID|s that
display this buffer
Examples: >
for buf in getbufinfo()

View File

@ -4509,10 +4509,10 @@ get_buffer_info(buf_T *buf)
dict_add_number(dict, "hidden",
buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0);
/* Get a reference to buffer variables */
// Get a reference to buffer variables
dict_add_dict(dict, "variables", buf->b_vars);
/* List of windows displaying this buffer */
// List of windows displaying this buffer
windows = list_alloc();
if (windows != NULL)
{
@ -4522,6 +4522,23 @@ get_buffer_info(buf_T *buf)
dict_add_list(dict, "windows", windows);
}
#ifdef FEAT_TEXT_PROP
// List of popup windows displaying this buffer
windows = list_alloc();
if (windows != NULL)
{
for (wp = first_popupwin; wp != NULL; wp = wp->w_next)
if (wp->w_buffer == buf)
list_append_number(windows, (varnumber_T)wp->w_id);
FOR_ALL_TABPAGES(tp)
for (wp = tp->tp_first_popupwin; wp != NULL; wp = wp->w_next)
if (wp->w_buffer == buf)
list_append_number(windows, (varnumber_T)wp->w_id);
dict_add_list(dict, "popups", windows);
}
#endif
#ifdef FEAT_SIGNS
if (buf->b_signlist != NULL)
{
@ -5685,7 +5702,7 @@ get_tabpage_info(tabpage_T *tp, int tp_idx)
if (l != NULL)
{
for (wp = (tp == curtab) ? firstwin : tp->tp_firstwin;
wp; wp = wp->w_next)
wp != NULL; wp = wp->w_next)
list_append_number(l, (varnumber_T)wp->w_id);
dict_add_list(dict, "windows", l);
}

View File

@ -1710,3 +1710,30 @@ func Test_popupwin_width()
endfor
call popup_clear()
endfunc
func Test_popupwin_buf_close()
let buf = bufadd('Xtestbuf')
call bufload(buf)
call setbufline(buf, 1, ['just', 'some', 'lines'])
let winid = popup_create(buf, {})
redraw
call assert_equal(3, popup_getpos(winid).height)
let bufinfo = getbufinfo(buf)[0]
call assert_equal(1, bufinfo.changed)
call assert_equal(0, bufinfo.hidden)
call assert_equal(0, bufinfo.listed)
call assert_equal(1, bufinfo.loaded)
call assert_equal([], bufinfo.windows)
call assert_equal([winid], bufinfo.popups)
call popup_close(winid)
call assert_equal({}, popup_getpos(winid))
let bufinfo = getbufinfo(buf)[0]
call assert_equal(1, bufinfo.changed)
call assert_equal(1, bufinfo.hidden)
call assert_equal(0, bufinfo.listed)
call assert_equal(1, bufinfo.loaded)
call assert_equal([], bufinfo.windows)
call assert_equal([], bufinfo.popups)
exe 'bwipe! ' .. buf
endfunc

View File

@ -777,6 +777,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1626,
/**/
1625,
/**/