]> granicus.if.org Git - vim/commitdiff
patch 8.0.1539: no test for the popup menu positioning v8.0.1539
authorBram Moolenaar <Bram@vim.org>
Sat, 24 Feb 2018 18:53:53 +0000 (19:53 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 24 Feb 2018 18:53:53 +0000 (19:53 +0100)
Problem:    No test for the popup menu positioning.
Solution:   Add a screendump test for the popup menu.

runtime/doc/eval.txt
src/terminal.c
src/testdir/dumps/Test_popup_position_01.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_position_02.dump [new file with mode: 0644]
src/testdir/dumps/Test_popup_position_03.dump [new file with mode: 0644]
src/testdir/screendump.vim
src/testdir/test_popup.vim
src/testdir/test_syntax.vim
src/version.c

index d10d4ece4327792475b0752d2244b6bf184a90c0..0461f9c24b5b3e0ca6aa56d8a7e5d443d1d595fd 100644 (file)
@@ -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*
index 73554a1066b5eb47f957914f89b45e049efd7dab..b6448b1b9ffaffacda70f6eb5252bc9d027fd411 100644 (file)
@@ -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;
diff --git a/src/testdir/dumps/Test_popup_position_01.dump b/src/testdir/dumps/Test_popup_position_01.dump
new file mode 100644 (file)
index 0000000..ed341e5
--- /dev/null
@@ -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
diff --git a/src/testdir/dumps/Test_popup_position_02.dump b/src/testdir/dumps/Test_popup_position_02.dump
new file mode 100644 (file)
index 0000000..85ae8e8
--- /dev/null
@@ -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
diff --git a/src/testdir/dumps/Test_popup_position_03.dump b/src/testdir/dumps/Test_popup_position_03.dump
new file mode 100644 (file)
index 0000000..d4f394b
--- /dev/null
@@ -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
index a28cb8cb890afd11745f5bdea65500a60016b100..584f9ac71491c0eebc2f92d7ddb3a7b8dfb744ab 100644 (file)
@@ -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
index d121affc7d71124ec88a2f937635fa1ce2877d4c..b0024e67bf9fe8aa93d77e022ba55b7bb5efaab7 100644 (file)
@@ -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
index ca87ccf66db4ff30bf71dd56690a2a29194e17de..e49c8ed895a48249fb01dd4600ae60864f9b2755 100644 (file)
@@ -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 = ''
index d434ea1ebcad79ab5c5edff09497fe07e4a19f37..c75d29033d993fe206615cddbebd18b81f60281d 100644 (file)
@@ -778,6 +778,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1539,
 /**/
     1538,
 /**/