aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-07-21 06:00:16 +0800
committerGitHub <noreply@github.com>2022-07-21 06:00:16 +0800
commit1f1863ed54355c314a5016560809e65c3fb0cb79 (patch)
tree7cd44846cdee7c144ef5393b936f5865db3e5260 /src
parent598cbcae4a9fdb3fd4cfbe1d1fed400c5eb0fb9c (diff)
downloadrneovim-1f1863ed54355c314a5016560809e65c3fb0cb79.tar.gz
rneovim-1f1863ed54355c314a5016560809e65c3fb0cb79.tar.bz2
rneovim-1f1863ed54355c314a5016560809e65c3fb0cb79.zip
vim-patch:8.2.4502 (#19439)
vim-patch:8.2.4502: in the GUI a modifier is not recognized after CTRL-X Problem: In the GUI a modifier is not recognized for the key typed after CTRL-X, which may result in a mapping to be used. (Daniel Steinberg) Solution: Recognize a modifier starting with CSI. (closes vim/vim#9889) https://github.com/vim/vim/commit/d979d64fa269ff47a96fc6aed2f4cdd066753c0c Code is N/A. This just ports the test change. Test depends on README.txt in testdir. Add that file. Reorder test_ins_complete.vim to match upstream.
Diffstat (limited to 'src')
-rw-r--r--src/nvim/testdir/README.txt121
-rw-r--r--src/nvim/testdir/test_ins_complete.vim193
2 files changed, 223 insertions, 91 deletions
diff --git a/src/nvim/testdir/README.txt b/src/nvim/testdir/README.txt
new file mode 100644
index 0000000000..b8bc52f1e6
--- /dev/null
+++ b/src/nvim/testdir/README.txt
@@ -0,0 +1,121 @@
+This directory contains tests for various Vim features.
+For testing an indent script see runtime/indent/testdir/README.txt.
+
+If it makes sense, add a new test method to an already existing file. You may
+want to separate it from other tests with comment lines.
+
+TO ADD A NEW STYLE TEST:
+
+1) Create a test_<subject>.vim file.
+2) Add test_<subject>.res to NEW_TESTS_RES in Make_all.mak in alphabetical
+ order.
+3) Also add an entry "test_<subject>" to NEW_TESTS in Make_all.mak.
+4) Use make test_<subject> to run a single test.
+
+At 2), instead of running the test separately, it can be included in
+"test_alot". Do this for quick tests without side effects. The test runs a
+bit faster, because Vim doesn't have to be started, one Vim instance runs many
+tests.
+
+At 4), to run a test in GUI, add "GUI_FLAG=-g" to the make command.
+
+
+What you can use (see test_assert.vim for an example):
+
+- Call assert_equal(), assert_true(), assert_false(), etc.
+
+- Use assert_fails() to check for expected errors.
+
+- Use try/catch to avoid an exception aborts the test.
+
+- Use test_alloc_fail() to have memory allocation fail. This makes it possible
+ to check memory allocation failures are handled gracefully. You need to
+ change the source code to add an ID to the allocation. Add a new one to
+ alloc_id_T, before aid_last.
+
+- Use test_override() to make Vim behave differently, e.g. if char_avail()
+ must return FALSE for a while. E.g. to trigger the CursorMovedI autocommand
+ event. See test_cursor_func.vim for an example.
+
+- If the bug that is being tested isn't fixed yet, you can throw an exception
+ with "Skipped" so that it's clear this still needs work. E.g.: throw
+ "Skipped: Bug with <c-e> and popupmenu not fixed yet"
+
+- The following environment variables are recognized and can be set to
+ influence the behavior of the test suite (see runtest.vim for details)
+
+ - $TEST_MAY_FAIL=Test_channel_one - ignore those failing tests
+ - $TEST_FILTER=Test_channel - only run test that match this pattern
+ - $TEST_SKIP_PAT=Test_channel - skip tests that match this pattern
+ - $TEST_NO_RETRY=yes - do not try to re-run failing tests
+ You can also set them in Vim:
+ :let $TEST_MAY_FAIL = 'Test_channel_one'
+ :let $TEST_FILTER = '_set_mode'
+ :let $TEST_SKIP_PAT = 'Test_loop_forever'
+ :let $TEST_NO_RETRY = 'yes'
+ Use an empty string to revert, e.g.:
+ :let $TEST_FILTER = ''
+
+- See the start of runtest.vim for more help.
+
+
+TO ADD A SCREEN DUMP TEST:
+
+Mostly the same as writing a new style test. Additionally, see help on
+"terminal-dumptest". Put the reference dump in "dumps/Test_func_name.dump".
+
+
+OLD STYLE TESTS:
+
+There are a few tests that are used when Vim was built without the +eval
+feature. These cannot use the "assert" functions, therefore they consist of a
+.in file that contains Normal mode commands between STARTTEST and ENDTEST.
+They modify the file and the result gets written in the test.out file. This
+is then compared with the .ok file. If they are equal the test passed. If
+they differ the test failed.
+
+
+RUNNING THE TESTS:
+
+To run a single test from the src directory:
+
+ $ make test_<name>
+
+The below commands should be run from the src/testdir directory.
+
+To run a single test:
+
+ $ make test_<name>.res
+
+The file 'messages' contains the messages generated by the test script. If a
+test fails, then the test.log file contains the error messages. If all the
+tests are successful, then this file will be an empty file.
+
+- To run a single test function from a test script:
+
+ $ ../vim -u NONE -S runtest.vim <test_file>.vim <function_name>
+
+- To execute only specific test functions, add a second argument:
+
+ $ ../vim -u NONE -S runtest.vim test_channel.vim open_delay
+
+
+- To run all the tests:
+
+ $ make
+
+- To run the test on MS-Windows using the MSVC nmake:
+
+ > nmake -f Make_dos.mak
+
+- To run the tests with GUI Vim:
+
+ $ make GUI_FLAG=-g
+
+ or
+
+ $ make VIMPROG=../gvim
+
+- To cleanup the temporary files after running the tests:
+
+ $ make clean
diff --git a/src/nvim/testdir/test_ins_complete.vim b/src/nvim/testdir/test_ins_complete.vim
index 93ab17955d..1b7ebaf8e2 100644
--- a/src/nvim/testdir/test_ins_complete.vim
+++ b/src/nvim/testdir/test_ins_complete.vim
@@ -100,6 +100,74 @@ func Test_ins_complete()
call delete('Xdir', 'rf')
endfunc
+func Test_omni_dash()
+ func Omni(findstart, base)
+ if a:findstart
+ return 5
+ else
+ echom a:base
+ return ['-help', '-v']
+ endif
+ endfunc
+ set omnifunc=Omni
+ new
+ exe "normal Gofind -\<C-x>\<C-o>"
+ call assert_equal("find -help", getline('$'))
+
+ bwipe!
+ delfunc Omni
+ set omnifunc=
+endfunc
+
+func Test_omni_throw()
+ let g:CallCount = 0
+ func Omni(findstart, base)
+ let g:CallCount += 1
+ if a:findstart
+ throw "he he he"
+ endif
+ endfunc
+ set omnifunc=Omni
+ new
+ try
+ exe "normal ifoo\<C-x>\<C-o>"
+ call assert_false(v:true, 'command should have failed')
+ catch
+ call assert_exception('he he he')
+ call assert_equal(1, g:CallCount)
+ endtry
+
+ bwipe!
+ delfunc Omni
+ unlet g:CallCount
+ set omnifunc=
+endfunc
+
+func Test_completefunc_args()
+ let s:args = []
+ func! CompleteFunc(findstart, base)
+ let s:args += [[a:findstart, empty(a:base)]]
+ endfunc
+ new
+
+ set completefunc=CompleteFunc
+ call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x')
+ call assert_equal([1, 1], s:args[0])
+ call assert_equal(0, s:args[1][0])
+ set completefunc=
+
+ let s:args = []
+ set omnifunc=CompleteFunc
+ call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x')
+ call assert_equal([1, 1], s:args[0])
+ call assert_equal(0, s:args[1][0])
+ set omnifunc=
+
+ bwipe!
+ unlet s:args
+ delfunc CompleteFunc
+endfunc
+
func s:CompleteDone_CompleteFuncNone( findstart, base )
throw 'skipped: Nvim does not support v:none'
if a:findstart
@@ -179,19 +247,6 @@ func Test_CompleteDoneDict()
au! CompleteDone
endfunc
-func Test_CompleteDone_undo()
- au CompleteDone * call append(0, "prepend1")
- new
- call setline(1, ["line1", "line2"])
- call feedkeys("Go\<C-X>\<C-N>\<CR>\<ESC>", "tx")
- call assert_equal(["prepend1", "line1", "line2", "line1", ""],
- \ getline(1, '$'))
- undo
- call assert_equal(["line1", "line2"], getline(1, '$'))
- bwipe!
- au! CompleteDone
-endfunc
-
func s:CompleteDone_CompleteFuncDictNoUserData(findstart, base)
if a:findstart
return 0
@@ -268,72 +323,17 @@ func Test_CompleteDoneList()
au! CompleteDone
endfunc
-func Test_omni_dash()
- func Omni(findstart, base)
- if a:findstart
- return 5
- else
- echom a:base
- return ['-help', '-v']
- endif
- endfunc
- set omnifunc=Omni
- new
- exe "normal Gofind -\<C-x>\<C-o>"
- call assert_equal("find -help", getline('$'))
-
- bwipe!
- delfunc Omni
- set omnifunc=
-endfunc
-
-func Test_omni_throw()
- let g:CallCount = 0
- func Omni(findstart, base)
- let g:CallCount += 1
- if a:findstart
- throw "he he he"
- endif
- endfunc
- set omnifunc=Omni
- new
- try
- exe "normal ifoo\<C-x>\<C-o>"
- call assert_false(v:true, 'command should have failed')
- catch
- call assert_exception('he he he')
- call assert_equal(1, g:CallCount)
- endtry
-
- bwipe!
- delfunc Omni
- unlet g:CallCount
- set omnifunc=
-endfunc
-
-func Test_completefunc_args()
- let s:args = []
- func! CompleteFunc(findstart, base)
- let s:args += [[a:findstart, empty(a:base)]]
- endfunc
+func Test_CompleteDone_undo()
+ au CompleteDone * call append(0, "prepend1")
new
-
- set completefunc=CompleteFunc
- call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x')
- call assert_equal([1, 1], s:args[0])
- call assert_equal(0, s:args[1][0])
- set completefunc=
-
- let s:args = []
- set omnifunc=CompleteFunc
- call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x')
- call assert_equal([1, 1], s:args[0])
- call assert_equal(0, s:args[1][0])
- set omnifunc=
-
+ call setline(1, ["line1", "line2"])
+ call feedkeys("Go\<C-X>\<C-N>\<CR>\<ESC>", "tx")
+ call assert_equal(["prepend1", "line1", "line2", "line1", ""],
+ \ getline(1, '$'))
+ undo
+ call assert_equal(["line1", "line2"], getline(1, '$'))
bwipe!
- unlet s:args
- delfunc CompleteFunc
+ au! CompleteDone
endfunc
func CompleteTest(findstart, query)
@@ -505,19 +505,6 @@ func Test_ins_completeslash()
set completeslash=
endfunc
-func Test_issue_7021()
- CheckMSWindows
-
- let orig_shellslash = &shellslash
- set noshellslash
-
- set completeslash=slash
- call assert_false(expand('~') =~ '/')
-
- let &shellslash = orig_shellslash
- set completeslash=
-endfunc
-
func Test_pum_stopped_by_timer()
CheckScreendump
@@ -829,6 +816,19 @@ func Test_complete_stop()
close!
endfunc
+func Test_issue_7021()
+ CheckMSWindows
+
+ let orig_shellslash = &shellslash
+ set noshellslash
+
+ set completeslash=slash
+ call assert_false(expand('~') =~ '/')
+
+ let &shellslash = orig_shellslash
+ set completeslash=
+endfunc
+
" Test to ensure 'Scanning...' messages are not recorded in messages history
func Test_z1_complete_no_history()
new
@@ -838,7 +838,18 @@ func Test_z1_complete_no_history()
exe "normal owh\<C-X>\<C-K>"
exe "normal owh\<C-N>"
call assert_equal(currmess, execute('messages'))
- close!
+ bwipe!
+endfunc
+
+" A mapping is not used for the key after CTRL-X.
+func Test_no_mapping_for_ctrl_x_key()
+ new
+ inoremap <C-K> <Cmd>let was_mapped = 'yes'<CR>
+ setlocal dictionary=README.txt
+ call feedkeys("aexam\<C-X>\<C-K> ", 'xt')
+ call assert_equal('example ', getline(1))
+ call assert_false(exists('was_mapped'))
+ bwipe!
endfunc
func FooBarComplete(findstart, base)