diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/testdir/README.txt | 121 | ||||
-rw-r--r-- | src/nvim/testdir/test_ins_complete.vim | 193 |
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) |