mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
Merge #7800 'vim patches'
This commit is contained in:
commit
95a8af093f
@ -42,6 +42,7 @@ SCRIPTS ?= $(SCRIPTS_DEFAULT)
|
|||||||
NEW_TESTS ?= \
|
NEW_TESTS ?= \
|
||||||
test_autocmd.res \
|
test_autocmd.res \
|
||||||
test_bufwintabinfo.res \
|
test_bufwintabinfo.res \
|
||||||
|
test_changedtick.res \
|
||||||
test_charsearch.res \
|
test_charsearch.res \
|
||||||
test_cmdline.res \
|
test_cmdline.res \
|
||||||
test_command_count.res \
|
test_command_count.res \
|
||||||
|
@ -2,9 +2,10 @@
|
|||||||
" This makes testing go faster, since Vim doesn't need to restart.
|
" This makes testing go faster, since Vim doesn't need to restart.
|
||||||
|
|
||||||
source test_assign.vim
|
source test_assign.vim
|
||||||
|
source test_changedtick.vim
|
||||||
source test_cursor_func.vim
|
source test_cursor_func.vim
|
||||||
source test_execute_func.vim
|
|
||||||
source test_ex_undo.vim
|
source test_ex_undo.vim
|
||||||
|
source test_execute_func.vim
|
||||||
source test_expr.vim
|
source test_expr.vim
|
||||||
source test_expr_utf8.vim
|
source test_expr_utf8.vim
|
||||||
source test_feedkeys.vim
|
source test_feedkeys.vim
|
||||||
|
57
src/nvim/testdir/test_changedtick.vim
Normal file
57
src/nvim/testdir/test_changedtick.vim
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
" Tests for b:changedtick
|
||||||
|
|
||||||
|
func Test_changedtick_increments()
|
||||||
|
new
|
||||||
|
" New buffer has an empty line, tick starts at 2.
|
||||||
|
let expected = 2
|
||||||
|
call assert_equal(expected, b:changedtick)
|
||||||
|
call assert_equal(expected, b:['changedtick'])
|
||||||
|
call setline(1, 'hello')
|
||||||
|
let expected += 1
|
||||||
|
call assert_equal(expected, b:changedtick)
|
||||||
|
call assert_equal(expected, b:['changedtick'])
|
||||||
|
undo
|
||||||
|
" Somehow undo counts as two changes.
|
||||||
|
let expected += 2
|
||||||
|
call assert_equal(expected, b:changedtick)
|
||||||
|
call assert_equal(expected, b:['changedtick'])
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_changedtick_dict_entry()
|
||||||
|
let d = b:
|
||||||
|
call assert_equal(b:changedtick, d['changedtick'])
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_changedtick_bdel()
|
||||||
|
new
|
||||||
|
let bnr = bufnr('%')
|
||||||
|
let v = b:changedtick
|
||||||
|
bdel
|
||||||
|
" Delete counts as a change too.
|
||||||
|
call assert_equal(v + 1, getbufvar(bnr, 'changedtick'))
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_changedtick_islocked()
|
||||||
|
call assert_equal(0, islocked('b:changedtick'))
|
||||||
|
let d = b:
|
||||||
|
call assert_equal(0, islocked('d.changedtick'))
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_changedtick_fixed()
|
||||||
|
call assert_fails('let b:changedtick = 4', 'E46:')
|
||||||
|
call assert_fails('let b:["changedtick"] = 4', 'E46:')
|
||||||
|
|
||||||
|
call assert_fails('lockvar b:changedtick', 'E940:')
|
||||||
|
call assert_fails('lockvar b:["changedtick"]', 'E46:')
|
||||||
|
call assert_fails('unlockvar b:changedtick', 'E940:')
|
||||||
|
call assert_fails('unlockvar b:["changedtick"]', 'E46:')
|
||||||
|
call assert_fails('unlet b:changedtick', 'E795:')
|
||||||
|
call assert_fails('unlet b:["changedtick"]', 'E46:')
|
||||||
|
|
||||||
|
let d = b:
|
||||||
|
call assert_fails('lockvar d["changedtick"]', 'E46:')
|
||||||
|
call assert_fails('unlockvar d["changedtick"]', 'E46:')
|
||||||
|
call assert_fails('unlet d["changedtick"]', 'E46:')
|
||||||
|
|
||||||
|
endfunc
|
@ -311,3 +311,45 @@ func! Test_mode()
|
|||||||
bwipe!
|
bwipe!
|
||||||
iunmap <F2>
|
iunmap <F2>
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_getbufvar()
|
||||||
|
let bnr = bufnr('%')
|
||||||
|
let b:var_num = '1234'
|
||||||
|
let def_num = '5678'
|
||||||
|
call assert_equal('1234', getbufvar(bnr, 'var_num'))
|
||||||
|
call assert_equal('1234', getbufvar(bnr, 'var_num', def_num))
|
||||||
|
|
||||||
|
let bd = getbufvar(bnr, '')
|
||||||
|
call assert_equal('1234', bd['var_num'])
|
||||||
|
call assert_true(exists("bd['changedtick']"))
|
||||||
|
call assert_equal(2, len(bd))
|
||||||
|
|
||||||
|
let bd2 = getbufvar(bnr, '', def_num)
|
||||||
|
call assert_equal(bd, bd2)
|
||||||
|
|
||||||
|
unlet b:var_num
|
||||||
|
call assert_equal(def_num, getbufvar(bnr, 'var_num', def_num))
|
||||||
|
call assert_equal('', getbufvar(bnr, 'var_num'))
|
||||||
|
|
||||||
|
let bd = getbufvar(bnr, '')
|
||||||
|
call assert_equal(1, len(bd))
|
||||||
|
let bd = getbufvar(bnr, '',def_num)
|
||||||
|
call assert_equal(1, len(bd))
|
||||||
|
|
||||||
|
call assert_equal('', getbufvar(9999, ''))
|
||||||
|
call assert_equal(def_num, getbufvar(9999, '', def_num))
|
||||||
|
unlet def_num
|
||||||
|
|
||||||
|
call assert_equal(0, getbufvar(bnr, '&autoindent'))
|
||||||
|
call assert_equal(0, getbufvar(bnr, '&autoindent', 1))
|
||||||
|
|
||||||
|
" Open new window with forced option values
|
||||||
|
set fileformats=unix,dos
|
||||||
|
new ++ff=dos ++bin ++enc=iso-8859-2
|
||||||
|
call assert_equal('dos', getbufvar(bufnr('%'), '&fileformat'))
|
||||||
|
call assert_equal(1, getbufvar(bufnr('%'), '&bin'))
|
||||||
|
call assert_equal('iso-8859-2', getbufvar(bufnr('%'), '&fenc'))
|
||||||
|
close
|
||||||
|
|
||||||
|
set fileformats&
|
||||||
|
endfunc
|
||||||
|
@ -39,3 +39,70 @@ function! Test_multiline_subst()
|
|||||||
call assert_equal('xxxxx', getline(13))
|
call assert_equal('xxxxx', getline(13))
|
||||||
enew!
|
enew!
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! Test_substitute_variants()
|
||||||
|
" Validate that all the 2-/3-letter variants which embed the flags into the
|
||||||
|
" command name actually work.
|
||||||
|
enew!
|
||||||
|
let ln = 'Testing string'
|
||||||
|
let variants = [
|
||||||
|
\ { 'cmd': ':s/Test/test/c', 'exp': 'testing string', 'prompt': 'y' },
|
||||||
|
\ { 'cmd': ':s/foo/bar/ce', 'exp': ln },
|
||||||
|
\ { 'cmd': ':s/t/r/cg', 'exp': 'Tesring srring', 'prompt': 'a' },
|
||||||
|
\ { 'cmd': ':s/t/r/ci', 'exp': 'resting string', 'prompt': 'y' },
|
||||||
|
\ { 'cmd': ':s/t/r/cI', 'exp': 'Tesring string', 'prompt': 'y' },
|
||||||
|
\ { 'cmd': ':s/t/r/cn', 'exp': ln },
|
||||||
|
\ { 'cmd': ':s/t/r/cp', 'exp': 'Tesring string', 'prompt': 'y' },
|
||||||
|
\ { 'cmd': ':s/t/r/cl', 'exp': 'Tesring string', 'prompt': 'y' },
|
||||||
|
\ { 'cmd': ':s/t/r/gc', 'exp': 'Tesring srring', 'prompt': 'a' },
|
||||||
|
\ { 'cmd': ':s/foo/bar/ge', 'exp': ln },
|
||||||
|
\ { 'cmd': ':s/t/r/g', 'exp': 'Tesring srring' },
|
||||||
|
\ { 'cmd': ':s/t/r/gi', 'exp': 'resring srring' },
|
||||||
|
\ { 'cmd': ':s/t/r/gI', 'exp': 'Tesring srring' },
|
||||||
|
\ { 'cmd': ':s/t/r/gn', 'exp': ln },
|
||||||
|
\ { 'cmd': ':s/t/r/gp', 'exp': 'Tesring srring' },
|
||||||
|
\ { 'cmd': ':s/t/r/gl', 'exp': 'Tesring srring' },
|
||||||
|
\ { 'cmd': ':s//r/gr', 'exp': 'Testr strr' },
|
||||||
|
\ { 'cmd': ':s/t/r/ic', 'exp': 'resting string', 'prompt': 'y' },
|
||||||
|
\ { 'cmd': ':s/foo/bar/ie', 'exp': ln },
|
||||||
|
\ { 'cmd': ':s/t/r/i', 'exp': 'resting string' },
|
||||||
|
\ { 'cmd': ':s/t/r/iI', 'exp': 'Tesring string' },
|
||||||
|
\ { 'cmd': ':s/t/r/in', 'exp': ln },
|
||||||
|
\ { 'cmd': ':s/t/r/ip', 'exp': 'resting string' },
|
||||||
|
\ { 'cmd': ':s//r/ir', 'exp': 'Testr string' },
|
||||||
|
\ { 'cmd': ':s/t/r/Ic', 'exp': 'Tesring string', 'prompt': 'y' },
|
||||||
|
\ { 'cmd': ':s/foo/bar/Ie', 'exp': ln },
|
||||||
|
\ { 'cmd': ':s/t/r/Ig', 'exp': 'Tesring srring' },
|
||||||
|
\ { 'cmd': ':s/t/r/Ii', 'exp': 'resting string' },
|
||||||
|
\ { 'cmd': ':s/t/r/I', 'exp': 'Tesring string' },
|
||||||
|
\ { 'cmd': ':s/t/r/Ip', 'exp': 'Tesring string' },
|
||||||
|
\ { 'cmd': ':s/t/r/Il', 'exp': 'Tesring string' },
|
||||||
|
\ { 'cmd': ':s//r/Ir', 'exp': 'Testr string' },
|
||||||
|
\ { 'cmd': ':s//r/rc', 'exp': 'Testr string', 'prompt': 'y' },
|
||||||
|
\ { 'cmd': ':s//r/rg', 'exp': 'Testr strr' },
|
||||||
|
\ { 'cmd': ':s//r/ri', 'exp': 'Testr string' },
|
||||||
|
\ { 'cmd': ':s//r/rI', 'exp': 'Testr string' },
|
||||||
|
\ { 'cmd': ':s//r/rn', 'exp': 'Testing string' },
|
||||||
|
\ { 'cmd': ':s//r/rp', 'exp': 'Testr string' },
|
||||||
|
\ { 'cmd': ':s//r/rl', 'exp': 'Testr string' },
|
||||||
|
\ { 'cmd': ':s//r/r', 'exp': 'Testr string' },
|
||||||
|
\]
|
||||||
|
|
||||||
|
for var in variants
|
||||||
|
for run in [1, 2]
|
||||||
|
let cmd = var.cmd
|
||||||
|
if run == 2 && cmd =~ "/.*/.*/."
|
||||||
|
" Change :s/from/to/{flags} to :s{flags}
|
||||||
|
let cmd = substitute(cmd, '/.*/', '', '')
|
||||||
|
endif
|
||||||
|
call setline(1, [ln])
|
||||||
|
let msg = printf('using "%s"', cmd)
|
||||||
|
let @/='ing'
|
||||||
|
let v:errmsg = ''
|
||||||
|
call feedkeys(cmd . "\<CR>" . get(var, 'prompt', ''), 'ntx')
|
||||||
|
" No error should exist (matters for testing e flag)
|
||||||
|
call assert_equal('', v:errmsg, msg)
|
||||||
|
call assert_equal(var.exp, getline('.'), msg)
|
||||||
|
endfor
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
Loading…
Reference in New Issue
Block a user