mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
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)
d979d64fa2
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.
This commit is contained in:
121
src/nvim/testdir/README.txt
Normal file
121
src/nvim/testdir/README.txt
Normal file
@@ -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
|
@@ -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
|
||||
func Test_CompleteDone_undo()
|
||||
au CompleteDone * call append(0, "prepend1")
|
||||
new
|
||||
exe "normal Gofind -\<C-x>\<C-o>"
|
||||
call assert_equal("find -help", getline('$'))
|
||||
|
||||
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!
|
||||
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
|
||||
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)
|
||||
|
Reference in New Issue
Block a user