mirror of
https://github.com/neovim/neovim.git
synced 2026-02-17 01:40:51 +10:00
vim-patch:9.1.0046: :drop does not re-use empty buffer (#27165)
Problem: :drop does not re-use empty buffer
(Rocco Mao)
Solution: Make :drop re-use an empty buffer
(Rocco Mao)
fixes: vim/vim#13851
closes: vim/vim#13881
f96dc8d07f
Co-authored-by: Rocco Mao <dapeng.mao@qq.com>
This commit is contained in:
@@ -90,23 +90,31 @@ endfunc
|
||||
|
||||
" Test for the :drop command
|
||||
func Test_drop_cmd()
|
||||
call writefile(['L1', 'L2'], 'Xfile')
|
||||
call writefile(['L1', 'L2'], 'Xdropfile', 'D')
|
||||
" Test for reusing the current buffer
|
||||
enew | only
|
||||
drop Xfile
|
||||
let expected_nr = bufnr()
|
||||
drop Xdropfile
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
" Test for switching to an existing window
|
||||
below new
|
||||
drop Xfile
|
||||
drop Xdropfile
|
||||
call assert_equal(1, winnr())
|
||||
" Test for splitting the current window
|
||||
" Test for splitting the current window (set nohidden)
|
||||
enew | only
|
||||
set modified
|
||||
drop Xfile
|
||||
drop Xdropfile
|
||||
call assert_equal(2, winnr('$'))
|
||||
" Not splitting the current window even if modified (set hidden)
|
||||
set hidden
|
||||
enew | only
|
||||
set modified
|
||||
drop Xdropfile
|
||||
call assert_equal(1, winnr('$'))
|
||||
" Check for setting the argument list
|
||||
call assert_equal(['Xfile'], argv())
|
||||
call assert_equal(['Xdropfile'], argv())
|
||||
enew | only!
|
||||
call delete('Xfile')
|
||||
endfunc
|
||||
|
||||
" Test for the :append command
|
||||
|
||||
@@ -164,6 +164,74 @@ func Test_tabpage_drop()
|
||||
bwipe!
|
||||
bwipe!
|
||||
call assert_equal(1, tabpagenr('$'))
|
||||
|
||||
call assert_equal(1, winnr('$'))
|
||||
call assert_equal('', bufname(''))
|
||||
call writefile(['L1', 'L2'], 'Xdropfile', 'D')
|
||||
|
||||
" Test for ':tab drop single-file': reuse current buffer
|
||||
let expected_nr = bufnr()
|
||||
tab drop Xdropfile
|
||||
call assert_equal(1, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
bwipe!
|
||||
|
||||
" Test for ':tab drop single-file': not reuse modified buffer
|
||||
set modified
|
||||
let expected_nr = bufnr() + 1
|
||||
tab drop Xdropfile
|
||||
call assert_equal(2, tabpagenr())
|
||||
call assert_equal(2, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
bwipe!
|
||||
|
||||
" Test for ':tab drop single-file': multiple tabs already exist
|
||||
tab split f2
|
||||
tab split f3
|
||||
let expected_nr = bufnr() + 1
|
||||
tab drop Xdropfile
|
||||
call assert_equal(4, tabpagenr())
|
||||
call assert_equal(4, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
%bwipe!
|
||||
|
||||
" Test for ':tab drop multi-files': reuse current buffer
|
||||
let expected_nr = bufnr()
|
||||
tab drop Xdropfile f1 f2 f3
|
||||
call assert_equal(1, tabpagenr())
|
||||
call assert_equal(4, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
%bwipe!
|
||||
|
||||
" Test for ':tab drop multi-files': not reuse modified buffer
|
||||
set modified
|
||||
let expected_nr = bufnr() + 1
|
||||
tab drop Xdropfile f1 f2 f3
|
||||
call assert_equal(2, tabpagenr())
|
||||
call assert_equal(5, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
%bwipe!
|
||||
|
||||
" Test for ':tab drop multi-files': multiple tabs already exist
|
||||
tab split f2
|
||||
tab split f3
|
||||
let expected_nr = bufnr() + 1
|
||||
tab drop a b c
|
||||
call assert_equal(4, tabpagenr())
|
||||
call assert_equal(6, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
let expected_nr = bufnr() + 3
|
||||
tab drop Xdropfile f1 f2 f3
|
||||
call assert_equal(5, tabpagenr())
|
||||
call assert_equal(8, tabpagenr('$'))
|
||||
call assert_equal(expected_nr, bufnr())
|
||||
call assert_equal('L2', getline(2))
|
||||
%bwipe!
|
||||
endfunc
|
||||
|
||||
" Test autocommands
|
||||
@@ -260,14 +328,14 @@ function Test_tabpage_with_autocmd_tab_drop()
|
||||
|
||||
let s:li = []
|
||||
tab drop test1
|
||||
call assert_equal(['BufLeave', 'BufEnter'], s:li)
|
||||
call assert_equal(['BufEnter'], s:li)
|
||||
|
||||
let s:li = []
|
||||
tab drop test2 test3
|
||||
call assert_equal([
|
||||
\ 'TabLeave', 'TabEnter', 'TabLeave', 'TabEnter',
|
||||
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter',
|
||||
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
|
||||
\ 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter', 'BufEnter'], s:li)
|
||||
|
||||
autocmd! TestTabpageGroup
|
||||
augroup! TestTabpageGroup
|
||||
|
||||
Reference in New Issue
Block a user