Merge pull request #14223 from janlazo/vim-8.2.2659

vim-patch:8.2.{1666,2045,2659,2662}
This commit is contained in:
Jan Edmund Lazo 2021-03-27 10:10:11 -04:00 committed by GitHub
commit 75a9db5b7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 201 additions and 90 deletions

View File

@ -379,8 +379,8 @@ void set_init_1(bool clean_arg)
# else
static char *(names[3]) = {"TMPDIR", "TEMP", "TMP"};
# endif
int len;
garray_T ga;
opt_idx = findoption("backupskip");
ga_init(&ga, 1, 100);
for (size_t n = 0; n < ARRAY_SIZE(names); n++) {
@ -401,15 +401,23 @@ void set_init_1(bool clean_arg)
}
if (p != NULL && *p != NUL) {
// First time count the NUL, otherwise count the ','.
len = (int)strlen(p) + 3;
ga_grow(&ga, len);
if (!GA_EMPTY(&ga)) {
STRCAT(ga.ga_data, ",");
const size_t len = strlen(p) + 3;
char *item = xmalloc(len);
xstrlcpy(item, p, len);
add_pathsep(item);
xstrlcat(item, "*", len);
if (find_dup_item(ga.ga_data, (char_u *)item, options[opt_idx].flags)
== NULL) {
ga_grow(&ga, (int)len);
if (!GA_EMPTY(&ga)) {
STRCAT(ga.ga_data, ",");
}
STRCAT(ga.ga_data, p);
add_pathsep(ga.ga_data);
STRCAT(ga.ga_data, "*");
ga.ga_len += (int)len;
}
STRCAT(ga.ga_data, p);
add_pathsep(ga.ga_data);
STRCAT(ga.ga_data, "*");
ga.ga_len += len;
xfree(item);
}
if(mustfree) {
xfree(p);
@ -713,6 +721,38 @@ static void set_string_default(const char *name, char *val, bool allocated)
}
}
// For an option value that contains comma separated items, find "newval" in
// "origval". Return NULL if not found.
static char_u *find_dup_item(char_u *origval, const char_u *newval,
uint32_t flags)
FUNC_ATTR_NONNULL_ARG(2)
{
int bs = 0;
if (origval == NULL) {
return NULL;
}
const size_t newlen = STRLEN(newval);
for (char_u *s = origval; *s != NUL; s++) {
if ((!(flags & P_COMMA) || s == origval || (s[-1] == ',' && !(bs & 1)))
&& STRNCMP(s, newval, newlen) == 0
&& (!(flags & P_COMMA) || s[newlen] == ',' || s[newlen] == NUL)) {
return s;
}
// Count backslashes. Only a comma with an even number of backslashes
// or a single backslash preceded by a comma before it is recognized as
// a separator.
if ((s > origval + 1 && s[-1] == '\\' && s[-2] != ',')
|| (s == origval + 1 && s[-1] == '\\')) {
bs++;
} else {
bs = 0;
}
}
return NULL;
}
/// Set the Vi-default value of a number option.
/// Used for 'lines' and 'columns'.
void set_number_default(char *name, long val)
@ -1285,9 +1325,7 @@ int do_set(
char *saved_newval = NULL;
unsigned newlen;
int comma;
int bs;
int new_value_alloced; /* new string option
was allocated */
bool new_value_alloced = false; // new string option was allocated
/* When using ":set opt=val" for a global option
* with a local value the local value will be
@ -1486,34 +1524,20 @@ int do_set(
i = 0; // init for GCC
if (removing || (flags & P_NODUP)) {
i = (int)STRLEN(newval);
bs = 0;
for (s = origval; *s; s++) {
if ((!(flags & P_COMMA)
|| s == origval
|| (s[-1] == ',' && !(bs & 1)))
&& STRNCMP(s, newval, i) == 0
&& (!(flags & P_COMMA)
|| s[i] == ','
|| s[i] == NUL)) {
break;
}
// Count backslashes. Only a comma with an even number of
// backslashes or a single backslash preceded by a comma
// before it is recognized as a separator
if ((s > origval + 1 && s[-1] == '\\' && s[-2] != ',')
|| (s == origval + 1 && s[-1] == '\\')) {
bs++;
} else {
bs = 0;
}
}
s = find_dup_item(origval, newval, flags);
// do not add if already there
if ((adding || prepending) && *s) {
if ((adding || prepending) && s != NULL) {
prepending = false;
adding = false;
STRCPY(newval, origval);
}
// if no duplicate, move pointer to end of
// original value
if (s == NULL) {
s = origval + (int)STRLEN(origval);
}
}
/* concatenate the two strings; add a ',' if
@ -2310,7 +2334,7 @@ static char_u *
did_set_string_option(
int opt_idx, // index in options[] table
char_u **varp, // pointer to the option variable
int new_value_alloced, // new value was allocated
bool new_value_alloced, // new value was allocated
char_u *oldval, // previous value of the option
char_u *errbuf, // buffer for errors, or NULL
size_t errbuflen, // length of errors buffer

View File

@ -2322,7 +2322,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow,
getvcol(curwin, &pos, (colnr_T *)&tocol, NULL, NULL);
}
// do at least one character; happens when past end of line
if (fromcol == tocol) {
if (fromcol == tocol && search_match_endcol) {
tocol = fromcol + 1;
}
area_highlighting = true;

View File

@ -36,15 +36,9 @@ NEW_TESTS_IN_ALOT := $(shell sed -n '/^source/ s/^source //; s/\.vim$$//p' $(add
NEW_TESTS_IN_ALOT_LATIN := $(shell sed -n '/^source/ s/^source //; s/\.vim$$//p' test_alot_latin.vim)
# Ignored tests.
# test_alot_latin: Nvim does not allow setting encoding.
# test_autochdir: ported to Lua, but kept for easier merging.
# test_eval_func: used as include in old-style test (test_eval.in).
# test_listlbr: Nvim does not allow setting encoding.
# test_largefile: uses too much resources to run on CI.
NEW_TESTS_IGNORE := \
test_alot_latin $(NEW_TESTS_IN_ALOT_LATIN) \
test_autochdir \
test_eval_func \
test_listlbr \
test_largefile \
NEW_TESTS := $(sort $(basename $(notdir $(wildcard test_*.vim))))

View File

@ -1,10 +1,10 @@
" Test 'autochdir' behavior
if !exists("+autochdir")
throw 'Skipped: autochdir feature missing'
endif
source check.vim
CheckOption autochdir
func Test_set_filename()
CheckFunction test_autochdir
let cwd = getcwd()
call test_autochdir()
set acd
@ -17,3 +17,5 @@ func Test_set_filename()
exe 'cd ' . cwd
call delete('samples/Xtest')
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -76,7 +76,7 @@ if has('timers')
endfunc
func Test_OptionSet_modeline()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
call test_override('starting', 1)
au! OptionSet
augroup set_tabstop
@ -507,7 +507,7 @@ func s:AutoCommandOptionSet(match)
endfunc
func Test_OptionSet()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !has("eval") || !exists("+autochdir")
return
endif
@ -648,7 +648,7 @@ func Test_OptionSet()
endfunc
func Test_OptionSet_diffmode()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
call test_override('starting', 1)
" 18: Changing an option when entering diff mode
new
@ -682,7 +682,7 @@ func Test_OptionSet_diffmode()
endfunc
func Test_OptionSet_diffmode_close()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
call test_override('starting', 1)
" 19: Try to close the current window when entering diff mode
" should not segfault
@ -1285,9 +1285,9 @@ func Test_autocommand_all_events()
endfunc
" Test TextChangedI and TextChangedP
" See test/functional/viml/completion_spec.lua'
func Test_ChangedP()
" Nvim does not support test_override().
throw 'skipped: see test/functional/viml/completion_spec.lua'
CheckFunction test_override
new
call setline(1, ['foo', 'bar', 'foobar'])
call test_override("char_avail", 1)
@ -1350,7 +1350,7 @@ func SetLineOne()
endfunc
func Test_TextChangedI_with_setline()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
new
call test_override('char_avail', 1)
autocmd TextChangedI <buffer> call SetLineOne()

View File

@ -24,7 +24,7 @@ endfunc
func Test_for_invalid()
call assert_fails("for x in 99", 'E714:')
call assert_fails("for x in 'asdf'", 'E714:')
call assert_fails("for x in function('winnr')", 'E714:')
call assert_fails("for x in {'a': 9}", 'E714:')
if 0

View File

@ -1,9 +1,5 @@
" Test for linebreak and list option (non-utf8)
" Nvim does not allow setting 'encoding', so skip this test.
finish
set encoding=latin1
scriptencoding latin1
if !exists("+linebreak") || !has("conceal")
@ -46,6 +42,7 @@ func Test_set_linebreak()
endfunc
func Test_linebreak_with_list()
throw 'skipped: Nvim does not support enc=latin1'
call s:test_windows('setl ts=4 sbr=+ list listchars=')
call setline(1, "\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP ")
let lines = s:screen_lines([1, 4], winwidth(0))
@ -217,6 +214,7 @@ func Test_norm_after_block_visual()
endfunc
func Test_block_replace_after_wrapping()
throw 'skipped: Nvim does not support enc=latin1'
call s:test_windows()
call setline(1, repeat("a", 150))
exe "norm! 0yypk147|\<C-V>jr0"

View File

@ -1,5 +1,6 @@
" Tests for :messages, :echomsg, :echoerr
source check.vim
source shared.vim
func Test_messages()
@ -77,7 +78,7 @@ func Test_echomsg()
endfunc
func Test_echoerr()
throw 'skipped: Nvim does not support test_ignore_error()'
CheckFunction test_ignore_error
call test_ignore_error('IgNoRe')
call assert_equal("\nIgNoRe hello", execute(':echoerr "IgNoRe hello"'))
call assert_equal("\n12345 IgNoRe", execute(':echoerr 12345 "IgNoRe"'))

View File

@ -448,6 +448,36 @@ func Test_backupskip()
endif
endfor
" Duplicates from environment variables should be filtered out (option has
" P_NODUP). Run this in a separate instance and write v:errors in a file,
" so that we see what happens on startup.
let after =<< trim [CODE]
let bsklist = split(&backupskip, ',')
call assert_equal(uniq(copy(bsklist)), bsklist)
call writefile(['errors:'] + v:errors, 'Xtestout')
qall
[CODE]
call writefile(after, 'Xafter')
" let cmd = GetVimProg() . ' --not-a-term -S Xafter --cmd "set enc=utf8"'
let cmd = GetVimProg() . ' -S Xafter --cmd "set enc=utf8"'
let saveenv = {}
for var in ['TMPDIR', 'TMP', 'TEMP']
let saveenv[var] = getenv(var)
call setenv(var, '/duplicate/path')
endfor
exe 'silent !' . cmd
call assert_equal(['errors:'], readfile('Xtestout'))
" restore environment variables
for var in ['TMPDIR', 'TMP', 'TEMP']
call setenv(var, saveenv[var])
endfor
call delete('Xtestout')
call delete('Xafter')
" Duplicates should be filtered out (option has P_NODUP)
let backupskip = &backupskip
set backupskip=

View File

@ -871,7 +871,7 @@ func Test_popup_complete_backwards_ctrl_p()
endfunc
fun! Test_complete_o_tab()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
let s:o_char_pressed = 0
fun! s:act_on_text_changed()

View File

@ -2660,7 +2660,7 @@ endfunc
" Test for incsearch highlighting of the :vimgrep pattern
" This test used to cause "E315: ml_get: invalid lnum" errors.
func Test_vimgrep_incsearch()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
enew
set incsearch
call test_override("char_avail", 1)

View File

@ -2,10 +2,11 @@
source shared.vim
source screendump.vim
source check.vim
" See test/functional/legacy/search_spec.lua
func Test_search_cmdline()
" See test/functional/legacy/search_spec.lua
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -202,9 +203,9 @@ func Test_search_cmdline()
bw!
endfunc
" See test/functional/legacy/search_spec.lua
func Test_search_cmdline2()
" See test/functional/legacy/search_spec.lua
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -351,7 +352,7 @@ func Test_searchc()
endfunc
func Cmdline3_prep()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
" need to disable char_avail,
" so that expansion of commandline works
call test_override("char_avail", 1)
@ -361,14 +362,13 @@ func Cmdline3_prep()
endfunc
func Incsearch_cleanup()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
set noincsearch
call test_override("char_avail", 0)
bw!
endfunc
func Test_search_cmdline3()
throw 'skipped: Nvim does not support test_override()'
if !exists('+incsearch')
return
endif
@ -382,7 +382,6 @@ func Test_search_cmdline3()
endfunc
func Test_search_cmdline3s()
throw 'skipped: Nvim does not support test_override()'
if !exists('+incsearch')
return
endif
@ -409,7 +408,6 @@ func Test_search_cmdline3s()
endfunc
func Test_search_cmdline3g()
throw 'skipped: Nvim does not support test_override()'
if !exists('+incsearch')
return
endif
@ -433,7 +431,6 @@ func Test_search_cmdline3g()
endfunc
func Test_search_cmdline3v()
throw 'skipped: Nvim does not support test_override()'
if !exists('+incsearch')
return
endif
@ -450,9 +447,9 @@ func Test_search_cmdline3v()
call Incsearch_cleanup()
endfunc
" See test/functional/legacy/search_spec.lua
func Test_search_cmdline4()
" See test/functional/legacy/search_spec.lua
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -507,7 +504,7 @@ func Test_search_cmdline5()
endfunc
func Test_search_cmdline7()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
" Test that pressing <c-g> in an empty command line
" does not move the cursor
if !exists('+incsearch')
@ -798,7 +795,7 @@ func Test_incsearch_vimgrep_dump()
endfunc
func Test_keep_last_search_pattern()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -820,7 +817,7 @@ func Test_keep_last_search_pattern()
endfunc
func Test_word_under_cursor_after_match()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -840,7 +837,7 @@ func Test_word_under_cursor_after_match()
endfunc
func Test_subst_word_under_cursor()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -882,7 +879,7 @@ func Test_incsearch_with_change()
endfunc
func Test_incsearch_cmdline_modifier()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -960,7 +957,7 @@ func Test_incsearch_search_dump()
endfunc
func Test_incsearch_substitute()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -982,7 +979,7 @@ func Test_incsearch_substitute()
endfunc
func Test_incsearch_substitute_long_line()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
new
call test_override("char_avail", 1)
set incsearch
@ -1104,7 +1101,7 @@ func Test_one_error_msg()
endfunc
func Test_incsearch_add_char_under_cursor()
throw 'skipped: Nvim does not support test_override()'
CheckFunction test_override
if !exists('+incsearch')
return
endif
@ -1192,4 +1189,40 @@ func Test_search_smartcase_utf8()
close!
endfunc
func Test_zzzz_incsearch_highlighting_newline()
CheckRunVimInTerminal
CheckOption incsearch
CheckScreendump
new
call test_override("char_avail", 1)
let commands =<< trim [CODE]
set incsearch nohls
call setline(1, ['test', 'xxx'])
[CODE]
call writefile(commands, 'Xincsearch_nl')
let buf = RunVimInTerminal('-S Xincsearch_nl', {'rows': 5, 'cols': 10})
" Need to send one key at a time to force a redraw
call term_sendkeys(buf, '/test')
sleep 100m
call VerifyScreenDump(buf, 'Test_incsearch_newline1', {})
call term_sendkeys(buf, '\n')
sleep 100m
call VerifyScreenDump(buf, 'Test_incsearch_newline2', {})
call term_sendkeys(buf, 'x')
sleep 100m
call VerifyScreenDump(buf, 'Test_incsearch_newline3', {})
call term_sendkeys(buf, 'x')
call VerifyScreenDump(buf, 'Test_incsearch_newline4', {})
call term_sendkeys(buf, "\<CR>")
sleep 100m
call VerifyScreenDump(buf, 'Test_incsearch_newline5', {})
call StopVimInTerminal(buf)
" clean up
call delete('Xincsearch_nl')
call test_override("char_avail", 0)
bw
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -1,8 +1,7 @@
" Test for signs
if !has('signs')
finish
endif
source check.vim
CheckFeature signs
source screendump.vim
@ -1541,7 +1540,7 @@ endfunc
" Tests for memory allocation failures in sign functions
func Test_sign_memfailures()
throw 'skipped: Nvim does not support test_alloc_fail()'
CheckFunction test_alloc_fail
call writefile(repeat(["Sun is shining"], 30), "Xsign")
edit Xsign

View File

@ -862,6 +862,34 @@ func Test_x_arg()
call delete('Xtest_x_arg')
endfunc
" Test for --not-a-term avoiding escape codes.
func Test_not_a_term()
CheckUnix
CheckNotGui
if &shellredir =~ '%s'
let redir = printf(&shellredir, 'Xvimout')
else
let redir = &shellredir .. ' Xvimout'
endif
" Without --not-a-term there are a few escape sequences.
" This will take 2 seconds because of the missing --not-a-term
let cmd = GetVimProg() .. ' --cmd quit ' .. redir
exe "silent !" . cmd
" call assert_match("\<Esc>", readfile('Xvimout')->join())
call assert_match("\<Esc>", join(readfile('Xvimout')))
call delete('Xvimout')
" With --not-a-term there are no escape sequences.
let cmd = GetVimProg() .. ' --not-a-term --cmd quit ' .. redir
exe "silent !" . cmd
" call assert_notmatch("\<Esc>", readfile('Xvimout')->join())
call assert_notmatch("\<Esc>", join(readfile('Xvimout')))
call delete('Xvimout')
endfunc
" Test starting vim with various names: vim, ex, view, evim, etc.
func Test_progname()
CheckUnix

View File

@ -93,7 +93,6 @@ function! Test_system_exmode()
endfunc
func Test_system_with_shell_quote()
throw 'skipped: enable after porting method patches'
CheckMSWindows
call mkdir('Xdir with spaces', 'p')
@ -122,7 +121,8 @@ func Test_system_with_shell_quote()
let msg = printf('shell=%s shellxquote=%s', &shell, &shellxquote)
try
let out = 'echo 123'->system()
" let out = 'echo 123'->system()
let out = system('echo 123')
catch
call assert_report(printf('%s: %s', msg, v:exception))
continue

View File

@ -317,8 +317,8 @@ endfunc
" Test that the garbage collector isn't triggered if a timer callback invokes
" vgetc().
func Test_nocatch_garbage_collect()
" skipped: Nvim does not support test_garbagecollect_soon(), test_override()
return
CheckFunction test_garbagecollect_soon
CheckFunction test_override
" 'uptimetime. must be bigger than the timer timeout
set ut=200
call test_garbagecollect_soon()

View File

@ -3,6 +3,8 @@
" undo-able pieces. Do that by setting 'undolevels'.
" Also tests :earlier and :later.
source check.vim
func Test_undotree()
new
@ -135,7 +137,7 @@ func BackOne(expected)
endfunc
func Test_undo_del_chars()
throw 'skipped: Nvim does not support test_settime()'
CheckFunction test_settime
" Setup a buffer without creating undo entries
new
@ -330,7 +332,7 @@ func Test_insert_expr()
endfunc
func Test_undofile_earlier()
throw 'skipped: Nvim does not support test_settime()'
CheckFunction test_settime
let t0 = localtime() - 43200
call test_settime(t0)