diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-07-12 07:22:17 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-07-12 11:52:47 +0800 |
commit | 53392f48b1e258bc11afdad7104930d7c1a361da (patch) | |
tree | a5d15ea92d0197cd0f5c3b08d6c95071fc0913ba | |
parent | 189db2b759b48d7e10dc0d092ba62141e7eca39e (diff) | |
download | rneovim-53392f48b1e258bc11afdad7104930d7c1a361da.tar.gz rneovim-53392f48b1e258bc11afdad7104930d7c1a361da.tar.bz2 rneovim-53392f48b1e258bc11afdad7104930d7c1a361da.zip |
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)
https://github.com/vim/vim/commit/e20b9ececa37a81c0340a78f61e57fa1bf46b06d
-rw-r--r-- | src/nvim/testdir/test_compiler.vim | 4 | ||||
-rw-r--r-- | src/nvim/testdir/test_ex_mode.vim | 29 | ||||
-rw-r--r-- | src/nvim/testdir/test_excmd.vim | 17 | ||||
-rw-r--r-- | src/nvim/testdir/test_filechanged.vim | 2 | ||||
-rw-r--r-- | src/nvim/testdir/test_help_tagjump.vim | 5 | ||||
-rw-r--r-- | src/nvim/testdir/test_timers.vim | 17 | ||||
-rw-r--r-- | test/functional/legacy/ex_mode_spec.lua | 58 | ||||
-rw-r--r-- | test/functional/legacy/excmd_spec.lua | 156 | ||||
-rw-r--r-- | test/functional/legacy/filechanged_spec.lua | 2 |
9 files changed, 288 insertions, 2 deletions
diff --git a/src/nvim/testdir/test_compiler.vim b/src/nvim/testdir/test_compiler.vim index c0c572ce65..3dc8710d63 100644 --- a/src/nvim/testdir/test_compiler.vim +++ b/src/nvim/testdir/test_compiler.vim @@ -68,5 +68,9 @@ func Test_compiler_completion() endfunc func Test_compiler_error() + let g:current_compiler = 'abc' call assert_fails('compiler doesnotexist', 'E666:') + call assert_equal('abc', g:current_compiler) + call assert_fails('compiler! doesnotexist', 'E666:') + unlet! g:current_compiler endfunc diff --git a/src/nvim/testdir/test_ex_mode.vim b/src/nvim/testdir/test_ex_mode.vim index 169a6cdabf..4efdd7c3cd 100644 --- a/src/nvim/testdir/test_ex_mode.vim +++ b/src/nvim/testdir/test_ex_mode.vim @@ -64,6 +64,35 @@ func Test_ex_mode() let &encoding = encoding_save 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 func Test_Ex_emptybuf() new diff --git a/src/nvim/testdir/test_excmd.vim b/src/nvim/testdir/test_excmd.vim index 9b59792696..ff5c28d54a 100644 --- a/src/nvim/testdir/test_excmd.vim +++ b/src/nvim/testdir/test_excmd.vim @@ -223,12 +223,24 @@ func Test_change_cmd() close! 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 func Test_confirm_cmd() CheckNotGui CheckRunVimInTerminal + call writefile(['foo1'], 'foo') call writefile(['bar1'], 'bar') + " Test for saving all the modified buffers let buf = RunVimInTerminal('', {'rows': 20}) 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 term_sendkeys(buf, "A") call StopVimInTerminal(buf) + call assert_equal(['foo2'], readfile('foo')) call assert_equal(['bar2'], readfile('bar')) + " Test for discarding all the changes to modified buffers let buf = RunVimInTerminal('', {'rows': 20}) 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 term_sendkeys(buf, "D") call StopVimInTerminal(buf) + call assert_equal(['foo2'], readfile('foo')) call assert_equal(['bar2'], readfile('bar')) + " Test for saving and discarding changes to some buffers let buf = RunVimInTerminal('', {'rows': 20}) 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 term_sendkeys(buf, "Y") call StopVimInTerminal(buf) + call assert_equal(['foo4'], readfile('foo')) call assert_equal(['bar2'], readfile('bar')) diff --git a/src/nvim/testdir/test_filechanged.vim b/src/nvim/testdir/test_filechanged.vim index 1b0f49ca51..c6e781a1ef 100644 --- a/src/nvim/testdir/test_filechanged.vim +++ b/src/nvim/testdir/test_filechanged.vim @@ -237,7 +237,7 @@ func Test_file_changed_dialog() sleep 2 silent !touch Xchanged_d let v:warningmsg = '' - checktime + checktime Xchanged_d call assert_equal('', v:warningmsg) call assert_equal(1, line('$')) call assert_equal('new line', getline(1)) diff --git a/src/nvim/testdir/test_help_tagjump.vim b/src/nvim/testdir/test_help_tagjump.vim index ece8ccf215..e84726bbfc 100644 --- a/src/nvim/testdir/test_help_tagjump.vim +++ b/src/nvim/testdir/test_help_tagjump.vim @@ -125,6 +125,11 @@ func Test_help_tagjump() call assert_true(getline('.') =~ '\*/\\bar\*') helpclose + help \_$ + call assert_equal("help", &filetype) + call assert_true(getline('.') =~ '\*/\\_$\*') + helpclose + help CTRL-\_CTRL-N call assert_equal("help", &filetype) call assert_true(getline('.') =~ '\*CTRL-\\_CTRL-N\*') diff --git a/src/nvim/testdir/test_timers.vim b/src/nvim/testdir/test_timers.vim index a36d65a8dd..56a5ec96af 100644 --- a/src/nvim/testdir/test_timers.vim +++ b/src/nvim/testdir/test_timers.vim @@ -94,6 +94,8 @@ func Test_timer_info() call timer_stop(id) call assert_equal([], timer_info(id)) + + call assert_fails('call timer_info("abc")', 'E39:') endfunc func Test_timer_stopall() @@ -131,6 +133,8 @@ func Test_timer_paused() else call assert_inrange(0, 10, slept) endif + + call assert_fails('call timer_pause("abc", 1)', 'E39:') endfunc func StopMyself(timer) @@ -225,6 +229,10 @@ func Test_timer_errors() call WaitForAssert({-> assert_equal(3, g:call_count)}) sleep 50m 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 func FuncWithCaughtError(timer) @@ -388,6 +396,15 @@ func Test_timer_error_in_timer_callback() exe buf .. 'bwipe!' 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() call assert_fails('call timer_start(0, "0")', 'E921') endfunc diff --git a/test/functional/legacy/ex_mode_spec.lua b/test/functional/legacy/ex_mode_spec.lua index 244b6bf00f..b3fd94f4f8 100644 --- a/test/functional/legacy/ex_mode_spec.lua +++ b/test/functional/legacy/ex_mode_spec.lua @@ -1,4 +1,5 @@ local helpers = require('test.functional.helpers')(after_each) +local Screen = require('test.functional.ui.screen') local clear = helpers.clear local command = helpers.command local eq = helpers.eq @@ -39,4 +40,61 @@ describe('Ex mode', function() test_ex_edit('\tm<C-T>n', '\tm<C-T>n') command('set wildchar&') 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) diff --git a/test/functional/legacy/excmd_spec.lua b/test/functional/legacy/excmd_spec.lua index 174f7d292e..6b3b265579 100644 --- a/test/functional/legacy/excmd_spec.lua +++ b/test/functional/legacy/excmd_spec.lua @@ -1,9 +1,15 @@ local helpers = require('test.functional.helpers')(after_each) +local Screen = require('test.functional.ui.screen') local clear = helpers.clear +local command = helpers.command local exec_lua = helpers.exec_lua +local feed = helpers.feed local meths = helpers.meths +local poke_eventloop = helpers.poke_eventloop +local read_file = helpers.read_file local source = helpers.source local eq = helpers.eq +local write_file = helpers.write_file local function sizeoflong() if not exec_lua('return pcall(require, "ffi")') then @@ -30,3 +36,153 @@ describe('Ex command', function() ]] 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) diff --git a/test/functional/legacy/filechanged_spec.lua b/test/functional/legacy/filechanged_spec.lua index 6eb853d630..ecb861098c 100644 --- a/test/functional/legacy/filechanged_spec.lua +++ b/test/functional/legacy/filechanged_spec.lua @@ -62,7 +62,7 @@ describe('file changed dialog', function() sleep 2 silent !touch Xchanged_d let v:warningmsg = '' - checktime + checktime Xchanged_d call assert_equal('', v:warningmsg) call assert_equal(1, line('$')) call assert_equal('new line', getline(1)) |