mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.0.1539: no test for the popup menu positioning
Problem: No test for the popup menu positioning. Solution: Add a screendump test for the popup menu.
This commit is contained in:
parent
bb008dd323
commit
6bb2cdfe60
@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 8.0. Last change: 2018 Feb 18
|
||||
*eval.txt* For Vim version 8.0. Last change: 2018 Feb 24
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@ -1246,8 +1246,8 @@ The arguments are optional. Example: >
|
||||
*closure*
|
||||
Lambda expressions can access outer scope variables and arguments. This is
|
||||
often called a closure. Example where "i" and "a:arg" are used in a lambda
|
||||
while they exist in the function scope. They remain valid even after the
|
||||
function returns: >
|
||||
while they already exist in the function scope. They remain valid even after
|
||||
the function returns: >
|
||||
:function Foo(arg)
|
||||
: let i = 3
|
||||
: return {x -> x + i - a:arg}
|
||||
@ -1256,7 +1256,10 @@ function returns: >
|
||||
:echo Bar(6)
|
||||
< 5
|
||||
|
||||
See also |:func-closure|. Lambda and closure support can be checked with: >
|
||||
Note that the variables must exist in the outer scope before the lamba is
|
||||
defined for this to work. See also |:func-closure|.
|
||||
|
||||
Lambda and closure support can be checked with: >
|
||||
if has('lambda')
|
||||
|
||||
Examples for using a lambda expression with |sort()|, |map()| and |filter()|: >
|
||||
@ -2416,7 +2419,7 @@ term_dumpdiff({filename}, {filename} [, {options}])
|
||||
Number display difference between two dumps
|
||||
term_dumpload({filename} [, {options}])
|
||||
Number displaying a screen dump
|
||||
term_dumpwrite({buf}, {filename} [, {max-height} [, {max-width}]])
|
||||
term_dumpwrite({buf}, {filename} [, {options}])
|
||||
none dump terminal window contents
|
||||
term_getaltscreen({buf}) Number get the alternate screen flag
|
||||
term_getattr({attr}, {what}) Number get the value of attribute {what}
|
||||
@ -6586,7 +6589,7 @@ remote_expr({server}, {string} [, {idvar} [, {timeout}]])
|
||||
between (not at the end), like with join(expr, "\n").
|
||||
If {idvar} is present and not empty, it is taken as the name
|
||||
of a variable and a {serverid} for later use with
|
||||
remote_read() is stored there.
|
||||
|remote_read()| is stored there.
|
||||
If {timeout} is given the read times out after this many
|
||||
seconds. Otherwise a timeout of 600 seconds is used.
|
||||
See also |clientserver| |RemoteReply|.
|
||||
@ -8190,13 +8193,17 @@ term_dumpload({filename} [, {options}])
|
||||
{options} are not implemented yet.
|
||||
|
||||
*term_dumpwrite()*
|
||||
term_dumpwrite({buf}, {filename} [, {max-height} [, {max-width}]])
|
||||
term_dumpwrite({buf}, {filename} [, {options}])
|
||||
Dump the contents of the terminal screen of {buf} in the file
|
||||
{filename}. This uses a format that can be used with
|
||||
|term_dumpread()| and |term_dumpdiff()|.
|
||||
If {filename} already exists an error is given. *E953*
|
||||
Also see |terminal-diff|.
|
||||
|
||||
{options} is a dictionary with these optional entries:
|
||||
"rows" maximum number of rows to dump
|
||||
"columns" maximum number of columns to dump
|
||||
|
||||
term_getaltscreen({buf}) *term_getaltscreen()*
|
||||
Returns 1 if the terminal of {buf} is using the alternate
|
||||
screen.
|
||||
@ -9166,6 +9173,8 @@ ttyout output is a terminal (tty)
|
||||
unix Unix version of Vim. *+unix*
|
||||
unnamedplus Compiled with support for "unnamedplus" in 'clipboard'
|
||||
user_commands User-defined commands.
|
||||
vcon Win32: Virtual console support is working, can use 256
|
||||
and 24 bit colors.
|
||||
vertsplit Compiled with vertically split windows |:vsplit|.
|
||||
vim_starting True while initial source'ing takes place. |startup|
|
||||
*vim_starting*
|
||||
|
@ -1829,7 +1829,7 @@ color2index(VTermColor *color, int fg, int *boldp)
|
||||
switch (color->ansi_index)
|
||||
{
|
||||
case 0: return 0;
|
||||
case 1: return lookup_color( 0, fg, boldp) + 1;
|
||||
case 1: return lookup_color( 0, fg, boldp) + 1; /* black */
|
||||
case 2: return lookup_color( 4, fg, boldp) + 1; /* dark red */
|
||||
case 3: return lookup_color( 2, fg, boldp) + 1; /* dark green */
|
||||
case 4: return lookup_color( 6, fg, boldp) + 1; /* brown */
|
||||
@ -2872,7 +2872,7 @@ dump_term_color(FILE *fd, VTermColor *color)
|
||||
}
|
||||
|
||||
/*
|
||||
* "term_dumpwrite(buf, filename, max-height, max-width)" function
|
||||
* "term_dumpwrite(buf, filename, options)" function
|
||||
*
|
||||
* Each screen cell in full is:
|
||||
* |{characters}+{attributes}#{fg-color}{color-idx}#{bg-color}{color-idx}
|
||||
@ -2899,8 +2899,8 @@ f_term_dumpwrite(typval_T *argvars, typval_T *rettv UNUSED)
|
||||
buf_T *buf = term_get_buf(argvars);
|
||||
term_T *term;
|
||||
char_u *fname;
|
||||
int max_height = 99999;
|
||||
int max_width = 99999;
|
||||
int max_height = 0;
|
||||
int max_width = 0;
|
||||
stat_T st;
|
||||
FILE *fd;
|
||||
VTermPos pos;
|
||||
@ -2913,6 +2913,23 @@ f_term_dumpwrite(typval_T *argvars, typval_T *rettv UNUSED)
|
||||
return;
|
||||
term = buf->b_term;
|
||||
|
||||
if (argvars[2].v_type != VAR_UNKNOWN)
|
||||
{
|
||||
dict_T *d;
|
||||
|
||||
if (argvars[2].v_type != VAR_DICT)
|
||||
{
|
||||
EMSG(_(e_dictreq));
|
||||
return;
|
||||
}
|
||||
d = argvars[2].vval.v_dict;
|
||||
if (d != NULL)
|
||||
{
|
||||
max_height = get_dict_number(d, (char_u *)"rows");
|
||||
max_width = get_dict_number(d, (char_u *)"columns");
|
||||
}
|
||||
}
|
||||
|
||||
fname = get_tv_string_chk(&argvars[1]);
|
||||
if (fname == NULL)
|
||||
return;
|
||||
@ -2922,13 +2939,6 @@ f_term_dumpwrite(typval_T *argvars, typval_T *rettv UNUSED)
|
||||
return;
|
||||
}
|
||||
|
||||
if (argvars[2].v_type != VAR_UNKNOWN)
|
||||
{
|
||||
max_height = get_tv_number(&argvars[2]);
|
||||
if (argvars[3].v_type != VAR_UNKNOWN)
|
||||
max_width = get_tv_number(&argvars[3]);
|
||||
}
|
||||
|
||||
if (*fname == NUL || (fd = mch_fopen((char *)fname, WRITEBIN)) == NULL)
|
||||
{
|
||||
EMSG2(_(e_notcreate), *fname == NUL ? (char_u *)_("<empty>") : fname);
|
||||
@ -2938,13 +2948,13 @@ f_term_dumpwrite(typval_T *argvars, typval_T *rettv UNUSED)
|
||||
vim_memset(&prev_cell, 0, sizeof(prev_cell));
|
||||
|
||||
screen = vterm_obtain_screen(term->tl_vterm);
|
||||
for (pos.row = 0; pos.row < max_height && pos.row < term->tl_rows;
|
||||
++pos.row)
|
||||
for (pos.row = 0; (max_height == 0 || pos.row < max_height)
|
||||
&& pos.row < term->tl_rows; ++pos.row)
|
||||
{
|
||||
int repeat = 0;
|
||||
|
||||
for (pos.col = 0; pos.col < max_width && pos.col < term->tl_cols;
|
||||
++pos.col)
|
||||
for (pos.col = 0; (max_width == 0 || pos.col < max_width)
|
||||
&& pos.col < term->tl_cols; ++pos.col)
|
||||
{
|
||||
VTermScreenCell cell;
|
||||
int same_attr;
|
||||
|
8
src/testdir/dumps/Test_popup_position_01.dump
Normal file
8
src/testdir/dumps/Test_popup_position_01.dump
Normal file
@ -0,0 +1,8 @@
|
||||
|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @5||+1&&|1+0&&|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @5
|
||||
|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @5||+1&&|1+0&&|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @5
|
||||
@12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5||+1&&| +0&&@11|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5
|
||||
|6|7|8|9|_|a| @30||+1&&|6+0&&|7|8|9|_|a| @30
|
||||
|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| | +0#4040ff13#ffffff0@30
|
||||
|~| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| | +0#4040ff13#ffffff0@30
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
8
src/testdir/dumps/Test_popup_position_02.dump
Normal file
8
src/testdir/dumps/Test_popup_position_02.dump
Normal file
@ -0,0 +1,8 @@
|
||||
|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @5||+1&&|1+0&&|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @5
|
||||
|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @5||+1&&|1+0&&|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @5
|
||||
@12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5||+1&&| +0&&@11|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5
|
||||
|6|7|8|9|_|a| @30||+1&&|6+0&&|7|8|9|_|a| @30
|
||||
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @9| +0#0000001#e0e0e08|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5
|
||||
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @9| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5
|
||||
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
8
src/testdir/dumps/Test_popup_position_03.dump
Normal file
8
src/testdir/dumps/Test_popup_position_03.dump
Normal file
@ -0,0 +1,8 @@
|
||||
|1+0&#ffffff0|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @5||+1&&|1+0&&|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|a| @5
|
||||
|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @5||+1&&|1+0&&|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|b| @5
|
||||
@12|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5||+1&&| +0&&@11|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5
|
||||
|6|7|8|9|_|a| @30||+1&&|6+0&&|7|8|9|_|a| @30
|
||||
|~+0#4040ff13&| @35||+1#0000000&|~+0#4040ff13&| @4| +0#0000001#e0e0e08|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_
|
||||
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @4| +0#0000001#ffd7ff255|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_|1|2|3|4|5|6|7|8|9|_
|
||||
|~+0#4040ff13#ffffff0| @35||+1#0000000&|~+0#4040ff13&| @35
|
||||
|~| @35||+1#0000000&|~+0#4040ff13&| @35
|
@ -1,10 +1,23 @@
|
||||
" Functions shared by tests making screen dumps.
|
||||
|
||||
" Only load this script once.
|
||||
if exists('*RunVimInTerminal')
|
||||
if exists('*CanRunVimInTerminal')
|
||||
finish
|
||||
endif
|
||||
|
||||
" Need to be able to run terminal Vim with 256 colors. On MS-Windows the
|
||||
" console only has 16 colors and the GUI can't run in a terminal.
|
||||
if !has('terminal') || has('win32')
|
||||
func CanRunVimInTerminal()
|
||||
return 0
|
||||
endfunc
|
||||
finish
|
||||
endif
|
||||
|
||||
func CanRunVimInTerminal()
|
||||
return 1
|
||||
endfunc
|
||||
|
||||
source shared.vim
|
||||
|
||||
" Run Vim with "arguments" in a new terminal window.
|
||||
@ -41,16 +54,17 @@ func StopVimInTerminal(buf)
|
||||
endfunc
|
||||
|
||||
" Verify that Vim running in terminal buffer "buf" matches the screen dump.
|
||||
" "options" is passed to term_dumpwrite().
|
||||
" The file name used is "dumps/{filename}.dump".
|
||||
" Will wait for up to a second for the screen dump to match.
|
||||
func VerifyScreenDump(buf, filename)
|
||||
func VerifyScreenDump(buf, filename, options)
|
||||
let reference = 'dumps/' . a:filename . '.dump'
|
||||
let testfile = a:filename . '.dump.failed'
|
||||
|
||||
let i = 0
|
||||
while 1
|
||||
call delete(testfile)
|
||||
call term_dumpwrite(a:buf, testfile)
|
||||
call term_dumpwrite(a:buf, testfile, a:options)
|
||||
if readfile(reference) == readfile(testfile)
|
||||
call delete(testfile)
|
||||
break
|
||||
|
@ -1,6 +1,7 @@
|
||||
" Test for completion menu
|
||||
|
||||
source shared.vim
|
||||
source screendump.vim
|
||||
|
||||
let g:months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
|
||||
let g:setting = ''
|
||||
@ -743,4 +744,37 @@ func Test_balloon_split()
|
||||
\ 'struct = 0x234 {long = 2343 "\\"some long string that will be wrapped in two\\"", next = 123}'))
|
||||
endfunc
|
||||
|
||||
func Test_popup_position()
|
||||
if !CanRunVimInTerminal()
|
||||
return
|
||||
endif
|
||||
call writefile([
|
||||
\ '123456789_123456789_123456789_a',
|
||||
\ '123456789_123456789_123456789_b',
|
||||
\ ' 123',
|
||||
\ ], 'Xtest')
|
||||
let buf = RunVimInTerminal('Xtest', {})
|
||||
call term_sendkeys(buf, ":vsplit\<CR>")
|
||||
|
||||
" default pumwidth in left window: overlap in right window
|
||||
call term_sendkeys(buf, "GA\<C-N>")
|
||||
call VerifyScreenDump(buf, 'Test_popup_position_01', {'rows': 8})
|
||||
call term_sendkeys(buf, "\<Esc>u")
|
||||
|
||||
" default pumwidth: fill until right of window
|
||||
call term_sendkeys(buf, "\<C-W>l")
|
||||
call term_sendkeys(buf, "GA\<C-N>")
|
||||
call VerifyScreenDump(buf, 'Test_popup_position_02', {'rows': 8})
|
||||
|
||||
" larger pumwidth: used as minimum width
|
||||
call term_sendkeys(buf, "\<Esc>u")
|
||||
call term_sendkeys(buf, ":set pumwidth=30\<CR>")
|
||||
call term_sendkeys(buf, "GA\<C-N>")
|
||||
call VerifyScreenDump(buf, 'Test_popup_position_03', {'rows': 8})
|
||||
|
||||
call term_sendkeys(buf, "\<Esc>u")
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('Xtest')
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
@ -5,9 +5,7 @@ if !has("syntax")
|
||||
endif
|
||||
|
||||
source view_util.vim
|
||||
if has('terminal')
|
||||
source screendump.vim
|
||||
endif
|
||||
source screendump.vim
|
||||
|
||||
func GetSyntaxItem(pat)
|
||||
let c = ''
|
||||
@ -528,10 +526,7 @@ endfunc
|
||||
|
||||
" Check highlighting for a small piece of C code with a screen dump.
|
||||
func Test_syntax_c()
|
||||
" Need to be able to run terminal Vim with 256 colors.
|
||||
" On MS-Windows the console only has 16 colors and the GUI can't run in a
|
||||
" terminal.
|
||||
if !has('terminal') || has('win32')
|
||||
if !CanRunVimInTerminal()
|
||||
return
|
||||
endif
|
||||
call writefile([
|
||||
@ -561,7 +556,7 @@ func Test_syntax_c()
|
||||
let $COLORFGBG = '15;0'
|
||||
|
||||
let buf = RunVimInTerminal('Xtest.c', {})
|
||||
call VerifyScreenDump(buf, 'Test_syntax_c_01')
|
||||
call VerifyScreenDump(buf, 'Test_syntax_c_01', {})
|
||||
call StopVimInTerminal(buf)
|
||||
|
||||
let $COLORFGBG = ''
|
||||
|
@ -778,6 +778,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1539,
|
||||
/**/
|
||||
1538,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user