vim-patch:8.2.0203: :helptags and some other functionality not tested

Problem:    :helptags and some other functionality not tested.
Solution:   Add more tests. (Yegappan Lakshmanan, closes vim/vim#5567)
e20b9ececa
This commit is contained in:
zeertzjq 2022-07-12 07:22:17 +08:00
parent 189db2b759
commit 53392f48b1
9 changed files with 288 additions and 2 deletions

View File

@ -68,5 +68,9 @@ func Test_compiler_completion()
endfunc endfunc
func Test_compiler_error() func Test_compiler_error()
let g:current_compiler = 'abc'
call assert_fails('compiler doesnotexist', 'E666:') call assert_fails('compiler doesnotexist', 'E666:')
call assert_equal('abc', g:current_compiler)
call assert_fails('compiler! doesnotexist', 'E666:')
unlet! g:current_compiler
endfunc endfunc

View File

@ -64,6 +64,35 @@ func Test_ex_mode()
let &encoding = encoding_save let &encoding = encoding_save
endfunc endfunc
" Test subsittute confirmation prompt :%s/pat/str/c in Ex mode
func Test_Ex_substitute()
CheckRunVimInTerminal
let buf = RunVimInTerminal('', {'rows': 6})
call term_sendkeys(buf, ":call setline(1, ['foo foo', 'foo foo', 'foo foo'])\<CR>")
call term_sendkeys(buf, ":set number\<CR>")
call term_sendkeys(buf, "gQ")
call WaitForAssert({-> assert_match(':', term_getline(buf, 6))}, 1000)
call term_sendkeys(buf, "%s/foo/bar/gc\<CR>")
call WaitForAssert({-> assert_match(' 1 foo foo', term_getline(buf, 5))},
\ 1000)
call WaitForAssert({-> assert_match(' ^^^', term_getline(buf, 6))}, 1000)
call term_sendkeys(buf, "n\<CR>")
call WaitForAssert({-> assert_match(' ^^^', term_getline(buf, 6))},
\ 1000)
call term_sendkeys(buf, "y\<CR>")
call term_sendkeys(buf, "q\<CR>")
call WaitForAssert({-> assert_match(':', term_getline(buf, 6))}, 1000)
call term_sendkeys(buf, ":vi\<CR>")
call WaitForAssert({-> assert_match('foo bar', term_getline(buf, 1))}, 1000)
call term_sendkeys(buf, ":q!\n")
call StopVimInTerminal(buf)
endfunc
" Test for displaying lines from an empty buffer in Ex mode " Test for displaying lines from an empty buffer in Ex mode
func Test_Ex_emptybuf() func Test_Ex_emptybuf()
new new

View File

@ -223,12 +223,24 @@ func Test_change_cmd()
close! close!
endfunc endfunc
" Test for the :language command
func Test_language_cmd()
CheckNotMSWindows " FIXME: why does this fail on Windows CI?
CheckNotBSD " FIXME: why does this fail on OpenBSD CI?
CheckFeature multi_lang
call assert_fails('language ctype non_existing_lang', 'E197:')
call assert_fails('language time non_existing_lang', 'E197:')
endfunc
" Test for the :confirm command dialog " Test for the :confirm command dialog
func Test_confirm_cmd() func Test_confirm_cmd()
CheckNotGui CheckNotGui
CheckRunVimInTerminal CheckRunVimInTerminal
call writefile(['foo1'], 'foo') call writefile(['foo1'], 'foo')
call writefile(['bar1'], 'bar') call writefile(['bar1'], 'bar')
" Test for saving all the modified buffers " Test for saving all the modified buffers
let buf = RunVimInTerminal('', {'rows': 20}) let buf = RunVimInTerminal('', {'rows': 20})
call term_sendkeys(buf, ":set nomore\n") call term_sendkeys(buf, ":set nomore\n")
@ -241,8 +253,10 @@ func Test_confirm_cmd()
call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000) call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000)
call term_sendkeys(buf, "A") call term_sendkeys(buf, "A")
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
call assert_equal(['foo2'], readfile('foo')) call assert_equal(['foo2'], readfile('foo'))
call assert_equal(['bar2'], readfile('bar')) call assert_equal(['bar2'], readfile('bar'))
" Test for discarding all the changes to modified buffers " Test for discarding all the changes to modified buffers
let buf = RunVimInTerminal('', {'rows': 20}) let buf = RunVimInTerminal('', {'rows': 20})
call term_sendkeys(buf, ":set nomore\n") call term_sendkeys(buf, ":set nomore\n")
@ -255,8 +269,10 @@ func Test_confirm_cmd()
call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000) call WaitForAssert({-> assert_match('\[Y\]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ', term_getline(buf, 20))}, 1000)
call term_sendkeys(buf, "D") call term_sendkeys(buf, "D")
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
call assert_equal(['foo2'], readfile('foo')) call assert_equal(['foo2'], readfile('foo'))
call assert_equal(['bar2'], readfile('bar')) call assert_equal(['bar2'], readfile('bar'))
" Test for saving and discarding changes to some buffers " Test for saving and discarding changes to some buffers
let buf = RunVimInTerminal('', {'rows': 20}) let buf = RunVimInTerminal('', {'rows': 20})
call term_sendkeys(buf, ":set nomore\n") call term_sendkeys(buf, ":set nomore\n")
@ -271,6 +287,7 @@ func Test_confirm_cmd()
call WaitForAssert({-> assert_match('\[Y\]es, (N)o, (C)ancel: ', term_getline(buf, 20))}, 1000) call WaitForAssert({-> assert_match('\[Y\]es, (N)o, (C)ancel: ', term_getline(buf, 20))}, 1000)
call term_sendkeys(buf, "Y") call term_sendkeys(buf, "Y")
call StopVimInTerminal(buf) call StopVimInTerminal(buf)
call assert_equal(['foo4'], readfile('foo')) call assert_equal(['foo4'], readfile('foo'))
call assert_equal(['bar2'], readfile('bar')) call assert_equal(['bar2'], readfile('bar'))

View File

@ -237,7 +237,7 @@ func Test_file_changed_dialog()
sleep 2 sleep 2
silent !touch Xchanged_d silent !touch Xchanged_d
let v:warningmsg = '' let v:warningmsg = ''
checktime checktime Xchanged_d
call assert_equal('', v:warningmsg) call assert_equal('', v:warningmsg)
call assert_equal(1, line('$')) call assert_equal(1, line('$'))
call assert_equal('new line', getline(1)) call assert_equal('new line', getline(1))

View File

@ -125,6 +125,11 @@ func Test_help_tagjump()
call assert_true(getline('.') =~ '\*/\\bar\*') call assert_true(getline('.') =~ '\*/\\bar\*')
helpclose helpclose
help \_$
call assert_equal("help", &filetype)
call assert_true(getline('.') =~ '\*/\\_$\*')
helpclose
help CTRL-\_CTRL-N help CTRL-\_CTRL-N
call assert_equal("help", &filetype) call assert_equal("help", &filetype)
call assert_true(getline('.') =~ '\*CTRL-\\_CTRL-N\*') call assert_true(getline('.') =~ '\*CTRL-\\_CTRL-N\*')

View File

@ -94,6 +94,8 @@ func Test_timer_info()
call timer_stop(id) call timer_stop(id)
call assert_equal([], timer_info(id)) call assert_equal([], timer_info(id))
call assert_fails('call timer_info("abc")', 'E39:')
endfunc endfunc
func Test_timer_stopall() func Test_timer_stopall()
@ -131,6 +133,8 @@ func Test_timer_paused()
else else
call assert_inrange(0, 10, slept) call assert_inrange(0, 10, slept)
endif endif
call assert_fails('call timer_pause("abc", 1)', 'E39:')
endfunc endfunc
func StopMyself(timer) func StopMyself(timer)
@ -225,6 +229,10 @@ func Test_timer_errors()
call WaitForAssert({-> assert_equal(3, g:call_count)}) call WaitForAssert({-> assert_equal(3, g:call_count)})
sleep 50m sleep 50m
call assert_equal(3, g:call_count) call assert_equal(3, g:call_count)
call assert_fails('call timer_start(100, "MyHandler", "abc")', 'E475:')
call assert_fails('call timer_start(100, [])', 'E921:')
call assert_fails('call timer_stop("abc")', 'E39:')
endfunc endfunc
func FuncWithCaughtError(timer) func FuncWithCaughtError(timer)
@ -388,6 +396,15 @@ func Test_timer_error_in_timer_callback()
exe buf .. 'bwipe!' exe buf .. 'bwipe!'
endfunc endfunc
" Test for garbage collection when a timer is still running
func Test_timer_garbage_collect()
let timer = timer_start(1000, function('MyHandler'), {'repeat' : 10})
call test_garbagecollect_now()
let l = timer_info(timer)
call assert_equal(function('MyHandler'), l[0].callback)
call timer_stop(timer)
endfunc
func Test_timer_invalid_callback() func Test_timer_invalid_callback()
call assert_fails('call timer_start(0, "0")', 'E921') call assert_fails('call timer_start(0, "0")', 'E921')
endfunc endfunc

View File

@ -1,4 +1,5 @@
local helpers = require('test.functional.helpers')(after_each) local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear = helpers.clear local clear = helpers.clear
local command = helpers.command local command = helpers.command
local eq = helpers.eq local eq = helpers.eq
@ -39,4 +40,61 @@ describe('Ex mode', function()
test_ex_edit('\tm<C-T>n', '\tm<C-T>n') test_ex_edit('\tm<C-T>n', '\tm<C-T>n')
command('set wildchar&') command('set wildchar&')
end) end)
it('substitute confirmation prompt', function()
command('set noincsearch nohlsearch inccommand=')
local screen = Screen.new(60, 6)
screen:attach()
command([[call setline(1, ['foo foo', 'foo foo', 'foo foo'])]])
command([[set number]])
feed('gQ')
screen:expect([[
1 foo foo |
2 foo foo |
3 foo foo |
|
Entering Ex mode. Type "visual" to go to Normal mode. |
:^ |
]])
feed('%s/foo/bar/gc<CR>')
screen:expect([[
1 foo foo |
|
Entering Ex mode. Type "visual" to go to Normal mode. |
:%s/foo/bar/gc |
1 foo foo |
^^^^ |
]])
feed('n<CR>')
screen:expect([[
Entering Ex mode. Type "visual" to go to Normal mode. |
:%s/foo/bar/gc |
1 foo foo |
^^^n |
1 foo foo |
^^^^ |
]])
feed('y<CR>')
feed('q<CR>')
screen:expect([[
1 foo foo |
^^^y |
2 foo foo |
^^^q |
2 foo foo |
:^ |
]])
feed(':vi<CR>')
screen:expect([[
1 foo bar |
2 fo^o foo |
3 foo foo |
~ |
~ |
|
]])
end)
end) end)

View File

@ -1,9 +1,15 @@
local helpers = require('test.functional.helpers')(after_each) local helpers = require('test.functional.helpers')(after_each)
local Screen = require('test.functional.ui.screen')
local clear = helpers.clear local clear = helpers.clear
local command = helpers.command
local exec_lua = helpers.exec_lua local exec_lua = helpers.exec_lua
local feed = helpers.feed
local meths = helpers.meths local meths = helpers.meths
local poke_eventloop = helpers.poke_eventloop
local read_file = helpers.read_file
local source = helpers.source local source = helpers.source
local eq = helpers.eq local eq = helpers.eq
local write_file = helpers.write_file
local function sizeoflong() local function sizeoflong()
if not exec_lua('return pcall(require, "ffi")') then if not exec_lua('return pcall(require, "ffi")') then
@ -30,3 +36,153 @@ describe('Ex command', function()
]] ]]
end) end)
end) end)
it(':confirm command dialog', function()
local screen
local function start_new()
clear()
screen = Screen.new(60, 20)
screen:attach()
end
write_file('foo', 'foo1\n')
write_file('bar', 'bar1\n')
-- Test for saving all the modified buffers
start_new()
command("set nomore")
command("new foo")
command("call setline(1, 'foo2')")
command("new bar")
command("call setline(1, 'bar2')")
command("wincmd b")
feed(':confirm qall\n')
screen:expect([[
bar2 |
~ |
~ |
~ |
~ |
~ |
bar [+] |
foo2 |
~ |
~ |
~ |
~ |
foo [+] |
|
~ |
~ |
|
:confirm qall |
Save changes to "bar"? |
[Y]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ^ |
]])
feed('A')
poke_eventloop()
eq('foo2\n', read_file('foo'))
eq('bar2\n', read_file('bar'))
-- Test for discarding all the changes to modified buffers
start_new()
command("set nomore")
command("new foo")
command("call setline(1, 'foo3')")
command("new bar")
command("call setline(1, 'bar3')")
command("wincmd b")
feed(':confirm qall\n')
screen:expect([[
bar3 |
~ |
~ |
~ |
~ |
~ |
bar [+] |
foo3 |
~ |
~ |
~ |
~ |
foo [+] |
|
~ |
~ |
|
:confirm qall |
Save changes to "bar"? |
[Y]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ^ |
]])
feed('D')
poke_eventloop()
eq('foo2\n', read_file('foo'))
eq('bar2\n', read_file('bar'))
-- Test for saving and discarding changes to some buffers
start_new()
command("set nomore")
command("new foo")
command("call setline(1, 'foo4')")
command("new bar")
command("call setline(1, 'bar4')")
command("wincmd b")
feed(':confirm qall\n')
screen:expect([[
bar4 |
~ |
~ |
~ |
~ |
~ |
bar [+] |
foo4 |
~ |
~ |
~ |
~ |
foo [+] |
|
~ |
~ |
|
:confirm qall |
Save changes to "bar"? |
[Y]es, (N)o, Save (A)ll, (D)iscard All, (C)ancel: ^ |
]])
feed('N')
screen:expect([[
bar4 |
~ |
~ |
~ |
~ |
~ |
bar [+] |
foo4 |
~ |
~ |
~ |
~ |
foo [+] |
|
|
:confirm qall |
Save changes to "bar"? |
|
Save changes to "foo"? |
[Y]es, (N)o, (C)ancel: ^ |
]])
feed('Y')
poke_eventloop()
eq('foo4\n', read_file('foo'))
eq('bar2\n', read_file('bar'))
os.remove('foo')
os.remove('bar')
end)

View File

@ -62,7 +62,7 @@ describe('file changed dialog', function()
sleep 2 sleep 2
silent !touch Xchanged_d silent !touch Xchanged_d
let v:warningmsg = '' let v:warningmsg = ''
checktime checktime Xchanged_d
call assert_equal('', v:warningmsg) call assert_equal('', v:warningmsg)
call assert_equal(1, line('$')) call assert_equal(1, line('$'))
call assert_equal('new line', getline(1)) call assert_equal('new line', getline(1))