Merge pull request #24819 from zeertzjq/vim-8.2.4208

vim-patch:8.2.{4208,4210,4211,4212},9.0.{0077,0313}
This commit is contained in:
zeertzjq 2023-08-21 16:54:11 +08:00 committed by GitHub
commit 8cd0ca1ce7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 114 additions and 90 deletions

View File

@ -49,7 +49,7 @@ describe('title', function()
end)
it('calling setbufvar() to set an option in a hidden buffer from i_CTRL-R', function()
command([[inoremap <F2> <C-R>=setbufvar(]]..buf2..[[, '&autoindent', 1) ? '' : ''<CR>]])
command([[inoremap <F2> <C-R>=setbufvar(]]..buf2..[[, '&autoindent', 1) ?? ''<CR>]])
feed('i<F2><Esc>')
command('redraw!')
screen:expect(function()

View File

@ -24,29 +24,29 @@ endfunc
" Test for the CursorHold autocmd
func Test_CursorHold_autocmd()
CheckRunVimInTerminal
call writefile(['one', 'two', 'three'], 'Xfile')
call writefile(['one', 'two', 'three'], 'XoneTwoThree')
let before =<< trim END
set updatetime=10
au CursorHold * call writefile([line('.')], 'Xoutput', 'a')
au CursorHold * call writefile([line('.')], 'XCHoutput', 'a')
END
call writefile(before, 'Xinit')
let buf = RunVimInTerminal('-S Xinit Xfile', {})
call writefile(before, 'XCHinit')
let buf = RunVimInTerminal('-S XCHinit XoneTwoThree', {})
call term_sendkeys(buf, "G")
call term_wait(buf, 20)
call term_wait(buf, 50)
call term_sendkeys(buf, "gg")
call term_wait(buf)
call WaitForAssert({-> assert_equal(['1'], readfile('Xoutput')[-1:-1])})
call WaitForAssert({-> assert_equal(['1'], readfile('XCHoutput')[-1:-1])})
call term_sendkeys(buf, "j")
call term_wait(buf)
call WaitForAssert({-> assert_equal(['1', '2'], readfile('Xoutput')[-2:-1])})
call WaitForAssert({-> assert_equal(['1', '2'], readfile('XCHoutput')[-2:-1])})
call term_sendkeys(buf, "j")
call term_wait(buf)
call WaitForAssert({-> assert_equal(['1', '2', '3'], readfile('Xoutput')[-3:-1])})
call WaitForAssert({-> assert_equal(['1', '2', '3'], readfile('XCHoutput')[-3:-1])})
call StopVimInTerminal(buf)
call delete('Xinit')
call delete('Xoutput')
call delete('Xfile')
call delete('XCHinit')
call delete('XCHoutput')
call delete('XoneTwoThree')
endfunc
if has('timers')
@ -1724,21 +1724,21 @@ endfunc
" Test for Bufleave autocommand that deletes the buffer we are about to edit.
func Test_BufleaveWithDelete()
new | edit Xfile1
new | edit XbufLeave1
augroup test_bufleavewithdelete
autocmd!
autocmd BufLeave Xfile1 bwipe Xfile2
autocmd BufLeave XbufLeave1 bwipe XbufLeave2
augroup END
call assert_fails('edit Xfile2', 'E143:')
call assert_equal('Xfile1', bufname('%'))
call assert_fails('edit XbufLeave2', 'E143:')
call assert_equal('XbufLeave1', bufname('%'))
autocmd! test_bufleavewithdelete BufLeave Xfile1
autocmd! test_bufleavewithdelete BufLeave XbufLeave1
augroup! test_bufleavewithdelete
new
bwipe! Xfile1
bwipe! XbufLeave1
endfunc
" Test for autocommand that changes the buffer list, when doing ":ball".
@ -2962,7 +2962,6 @@ endfunc
func Test_autocmd_SafeState()
CheckRunVimInTerminal
let g:test_is_flaky = 1
let lines =<< trim END
let g:safe = 0
@ -3243,13 +3242,13 @@ endfunc
func Test_BufReadPre_delfile()
augroup TestAuCmd
au!
autocmd BufReadPre Xfile call delete('Xfile')
autocmd BufReadPre XbufreadPre call delete('XbufreadPre')
augroup END
call writefile([], 'Xfile')
call assert_fails('new Xfile', 'E200:')
call assert_equal('Xfile', @%)
call writefile([], 'XbufreadPre')
call assert_fails('new XbufreadPre', 'E200:')
call assert_equal('XbufreadPre', @%)
call assert_equal(1, &readonly)
call delete('Xfile')
call delete('XbufreadPre')
augroup TestAuCmd
au!
augroup END
@ -3260,13 +3259,13 @@ endfunc
func Test_BufReadPre_changebuf()
augroup TestAuCmd
au!
autocmd BufReadPre Xfile edit Xsomeotherfile
autocmd BufReadPre Xchangebuf edit Xsomeotherfile
augroup END
call writefile([], 'Xfile')
call assert_fails('new Xfile', 'E201:')
call writefile([], 'Xchangebuf')
call assert_fails('new Xchangebuf', 'E201:')
call assert_equal('Xsomeotherfile', @%)
call assert_equal(1, &readonly)
call delete('Xfile')
call delete('Xchangebuf')
augroup TestAuCmd
au!
augroup END

View File

@ -79,11 +79,11 @@ endfunc
func Test_non_existing_backupdir()
throw 'Skipped: Nvim auto-creates backup directory'
set backupdir=./non_existing_dir backupskip=
call writefile(['line1'], 'Xfile')
new Xfile
call writefile(['line1'], 'Xbackupdir')
new Xbackupdir
call assert_fails('write', 'E510:')
set backupdir&vim backupskip&vim
call delete('Xfile')
call delete('Xbackupdir')
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -76,14 +76,14 @@ func Test_buflist_browse()
%bwipe!
call assert_fails('buffer 1000', 'E86:')
call writefile(['foo1', 'foo2', 'foo3', 'foo4'], 'Xfile1')
call writefile(['bar1', 'bar2', 'bar3', 'bar4'], 'Xfile2')
call writefile(['baz1', 'baz2', 'baz3', 'baz4'], 'Xfile3')
edit Xfile1
call writefile(['foo1', 'foo2', 'foo3', 'foo4'], 'Xbrowse1')
call writefile(['bar1', 'bar2', 'bar3', 'bar4'], 'Xbrowse2')
call writefile(['baz1', 'baz2', 'baz3', 'baz4'], 'Xbrowse3')
edit Xbrowse1
let b1 = bufnr()
edit Xfile2
edit Xbrowse2
let b2 = bufnr()
edit +/baz4 Xfile3
edit +/baz4 Xbrowse3
let b3 = bufnr()
call assert_fails('buffer ' .. b1 .. ' abc', 'E488:')
@ -127,9 +127,9 @@ func Test_buflist_browse()
call assert_fails('sandbox bnext', 'E48:')
call delete('Xfile1')
call delete('Xfile2')
call delete('Xfile3')
call delete('Xbrowse1')
call delete('Xbrowse2')
call delete('Xbrowse3')
%bwipe!
endfunc
@ -200,39 +200,39 @@ endfunc
" Test for quitting the 'swapfile exists' dialog with the split buffer
" command.
func Test_buffer_sbuf_cleanup()
call writefile([], 'Xfile')
call writefile([], 'XsplitCleanup')
" first open the file in a buffer
new Xfile
new XsplitCleanup
let bnr = bufnr()
close
" create the swap file
call writefile([], '.Xfile.swp')
call writefile([], '.XsplitCleanup.swp')
" Remove the catch-all that runtest.vim adds
au! SwapExists
augroup BufTest
au!
autocmd SwapExists Xfile let v:swapchoice='q'
autocmd SwapExists XsplitCleanup let v:swapchoice='q'
augroup END
exe 'sbuf ' . bnr
call assert_equal(1, winnr('$'))
call assert_equal(0, getbufinfo('Xfile')[0].loaded)
call assert_equal(0, getbufinfo('XsplitCleanup')[0].loaded)
" test for :sball
sball
call assert_equal(1, winnr('$'))
call assert_equal(0, getbufinfo('Xfile')[0].loaded)
call assert_equal(0, getbufinfo('XsplitCleanup')[0].loaded)
%bw!
set shortmess+=F
let v:statusmsg = ''
edit Xfile
edit XsplitCleanup
call assert_equal('', v:statusmsg)
call assert_equal(1, winnr('$'))
call assert_equal(0, getbufinfo('Xfile')[0].loaded)
call assert_equal(0, getbufinfo('XsplitCleanup')[0].loaded)
set shortmess&
call delete('Xfile')
call delete('.Xfile.swp')
call delete('XsplitCleanup')
call delete('.XsplitCleanup.swp')
augroup BufTest
au!
augroup END
@ -265,35 +265,35 @@ func Test_goto_buf_with_confirm()
CheckUnix
CheckNotGui
CheckFeature dialog_con
new Xfile
new XgotoConf
enew
call setline(1, 'test')
call assert_fails('b Xfile', 'E37:')
call assert_fails('b XgotoConf', 'E37:')
call feedkeys('c', 'L')
call assert_fails('confirm b Xfile', 'E37:')
call assert_fails('confirm b XgotoConf', 'E37:')
call assert_equal(1, &modified)
call assert_equal('', @%)
call feedkeys('y', 'L')
call assert_fails('confirm b Xfile', ['', 'E37:'])
call assert_fails('confirm b XgotoConf', ['', 'E37:'])
call assert_equal(1, &modified)
call assert_equal('', @%)
call feedkeys('n', 'L')
confirm b Xfile
call assert_equal('Xfile', @%)
confirm b XgotoConf
call assert_equal('XgotoConf', @%)
close!
endfunc
" Test for splitting buffer with 'switchbuf'
func Test_buffer_switchbuf()
new Xfile
new Xswitchbuf
wincmd w
set switchbuf=useopen
sbuf Xfile
sbuf Xswitchbuf
call assert_equal(1, winnr())
call assert_equal(2, winnr('$'))
set switchbuf=usetab
tabnew
sbuf Xfile
sbuf Xswitchbuf
call assert_equal(1, tabpagenr())
call assert_equal(2, tabpagenr('$'))
set switchbuf&
@ -305,11 +305,11 @@ func Test_bufadd_autocmd_bwipe()
%bw!
augroup BufAdd_Wipe
au!
autocmd BufAdd Xfile %bw!
autocmd BufAdd Xbwipe %bw!
augroup END
edit Xfile
edit Xbwipe
call assert_equal('', @%)
call assert_equal(0, bufexists('Xfile'))
call assert_equal(0, bufexists('Xbwipe'))
augroup BufAdd_Wipe
au!
augroup END
@ -329,40 +329,40 @@ endfunc
" Test for using CTRL-^ to edit the alternative file keeping the cursor
" position with 'nostartofline'. Also test using the 'buf' command.
func Test_buffer_edit_altfile()
call writefile(repeat(['one two'], 50), 'Xfile1')
call writefile(repeat(['five six'], 50), 'Xfile2')
call writefile(repeat(['one two'], 50), 'Xaltfile1')
call writefile(repeat(['five six'], 50), 'Xaltfile2')
set nosol
edit Xfile1
edit Xaltfile1
call cursor(25, 5)
edit Xfile2
edit Xaltfile2
call cursor(30, 4)
exe "normal \<C-^>"
call assert_equal([0, 25, 5, 0], getpos('.'))
exe "normal \<C-^>"
call assert_equal([0, 30, 4, 0], getpos('.'))
buf Xfile1
buf Xaltfile1
call assert_equal([0, 25, 5, 0], getpos('.'))
buf Xfile2
buf Xaltfile2
call assert_equal([0, 30, 4, 0], getpos('.'))
set sol&
call delete('Xfile1')
call delete('Xfile2')
call delete('Xaltfile1')
call delete('Xaltfile2')
endfunc
" Test for running the :sball command with a maximum window count and a
" modified buffer
func Test_sball_with_count()
%bw!
edit Xfile1
edit Xcountfile1
call setline(1, ['abc'])
new Xfile2
new Xfile3
new Xfile4
new Xcountfile2
new Xcountfile3
new Xcountfile4
2sball
call assert_equal(bufnr('Xfile4'), winbufnr(1))
call assert_equal(bufnr('Xfile1'), winbufnr(2))
call assert_equal(0, getbufinfo('Xfile2')[0].loaded)
call assert_equal(0, getbufinfo('Xfile3')[0].loaded)
call assert_equal(bufnr('Xcountfile4'), winbufnr(1))
call assert_equal(bufnr('Xcountfile1'), winbufnr(2))
call assert_equal(0, getbufinfo('Xcountfile2')[0].loaded)
call assert_equal(0, getbufinfo('Xcountfile3')[0].loaded)
%bw!
endfunc
@ -456,18 +456,18 @@ func Test_buflist_alloc_failure()
CheckFunction test_alloc_fail
%bw!
edit Xfile1
edit XallocFail1
call test_alloc_fail(GetAllocId('newbuf_bvars'), 0, 0)
call assert_fails('edit Xfile2', 'E342:')
call assert_fails('edit XallocFail2', 'E342:')
" test for bufadd()
call test_alloc_fail(GetAllocId('newbuf_bvars'), 0, 0)
call assert_fails('call bufadd("Xbuffer")', 'E342:')
" test for setting the arglist
edit Xfile2
edit XallocFail2
call test_alloc_fail(GetAllocId('newbuf_bvars'), 0, 0)
call assert_fails('next Xfile3', 'E342:')
call assert_fails('next XallocFail3', 'E342:')
" test for setting the alternate buffer name when writing a file
call test_alloc_fail(GetAllocId('newbuf_bvars'), 0, 0)
@ -494,17 +494,17 @@ func Test_buflist_alloc_failure()
endif
" test for loading a new buffer after wiping out all the buffers
edit Xfile4
edit XallocFail4
call test_alloc_fail(GetAllocId('newbuf_bvars'), 0, 0)
call assert_fails('%bw!', 'E342:')
" test for :checktime loading the buffer
call writefile(['one'], 'Xfile5')
call writefile(['one'], 'XallocFail5')
if has('unix')
edit Xfile5
edit XallocFail5
" sleep for some time to make sure the timestamp is different
sleep 200m
call writefile(['two'], 'Xfile5')
call writefile(['two'], 'XallocFail5')
set autoread
call test_alloc_fail(GetAllocId('newbuf_bvars'), 0, 0)
call assert_fails('checktime', 'E342:')
@ -514,12 +514,12 @@ func Test_buflist_alloc_failure()
" test for :vimgrep loading a dummy buffer
call test_alloc_fail(GetAllocId('newbuf_bvars'), 0, 0)
call assert_fails('vimgrep two Xfile5', 'E342:')
call delete('Xfile5')
call assert_fails('vimgrep two XallocFail5', 'E342:')
call delete('XallocFail5')
" test for quickfix command loading a buffer
call test_alloc_fail(GetAllocId('newbuf_bvars'), 0, 0)
call assert_fails('cexpr "Xfile6:10:Line10"', 'E342:')
call assert_fails('cexpr "XallocFail6:10:Line10"', 'E342:')
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@ -2009,6 +2009,32 @@ func Test_setbufvar_options()
bwipe!
endfunc
func Test_setbufvar_keep_window_title()
CheckRunVimInTerminal
if !has('title') || empty(&t_ts)
throw "Skipped: can't get/set title"
endif
let lines =<< trim END
set title
edit Xa.txt
let g:buf = bufadd('Xb.txt')
inoremap <F2> <C-R>=setbufvar(g:buf, '&autoindent', 1) ?? ''<CR>
END
call writefile(lines, 'Xsetbufvar')
let buf = RunVimInTerminal('-S Xsetbufvar', {})
call WaitForAssert({-> assert_match('Xa.txt', term_gettitle(buf))}, 1000)
call term_sendkeys(buf, "i\<F2>")
call TermWait(buf)
call term_sendkeys(buf, "\<Esc>")
call TermWait(buf)
call assert_match('Xa.txt', term_gettitle(buf))
call StopVimInTerminal(buf)
call delete('Xsetbufvar')
endfunc
func Test_redo_in_nested_functions()
nnoremap g. :set opfunc=Operator<CR>g@
function Operator( type, ... )
@ -2567,7 +2593,6 @@ endfunc
func Test_state()
CheckRunVimInTerminal
let g:test_is_flaky = 1
let getstate = ":echo 'state: ' .. g:state .. '; mode: ' .. g:mode\<CR>"