16d91bcb4SBram Moolenaar" Test for insert completion 26d91bcb4SBram Moolenaar 309dd2bb3SBram Moolenaarsource screendump.vim 450f91d22SBram Moolenaarsource check.vim 515993ce9SBram Moolenaar 615993ce9SBram Moolenaar" Test for insert expansion 715993ce9SBram Moolenaarfunc Test_ins_complete() 8cf1ba35fSBram Moolenaar edit test_ins_complete.vim 9fb094e14SBram Moolenaar " The files in the current directory interferes with the files 10fb094e14SBram Moolenaar " used by this test. So use a separate directory for the test. 11fb094e14SBram Moolenaar call mkdir('Xdir') 12fb094e14SBram Moolenaar cd Xdir 13fb094e14SBram Moolenaar 1415993ce9SBram Moolenaar set ff=unix 1515993ce9SBram Moolenaar call writefile(["test11\t36Gepeto\t/Tag/", 1615993ce9SBram Moolenaar \ "asd\ttest11file\t36G", 1715993ce9SBram Moolenaar \ "Makefile\tto\trun"], 'Xtestfile') 1815993ce9SBram Moolenaar call writefile(['', 'start of testfile', 1915993ce9SBram Moolenaar \ 'ru', 2015993ce9SBram Moolenaar \ 'run1', 2115993ce9SBram Moolenaar \ 'run2', 2215993ce9SBram Moolenaar \ 'STARTTEST', 2315993ce9SBram Moolenaar \ 'ENDTEST', 2415993ce9SBram Moolenaar \ 'end of testfile'], 'Xtestdata') 2515993ce9SBram Moolenaar set ff& 2615993ce9SBram Moolenaar 2715993ce9SBram Moolenaar enew! 2815993ce9SBram Moolenaar edit Xtestdata 2915993ce9SBram Moolenaar new 3015993ce9SBram Moolenaar call append(0, ['#include "Xtestfile"', '']) 3115993ce9SBram Moolenaar call cursor(2, 1) 3215993ce9SBram Moolenaar 3315993ce9SBram Moolenaar set cot= 3415993ce9SBram Moolenaar set cpt=.,w 3515993ce9SBram Moolenaar " add-expands (word from next line) from other window 3615993ce9SBram Moolenaar exe "normal iru\<C-N>\<C-N>\<C-X>\<C-N>\<Esc>\<C-A>" 3715993ce9SBram Moolenaar call assert_equal('run1 run3', getline('.')) 3815993ce9SBram Moolenaar " add-expands (current buffer first) 3915993ce9SBram Moolenaar exe "normal o\<C-P>\<C-X>\<C-N>" 4015993ce9SBram Moolenaar call assert_equal('run3 run3', getline('.')) 4115993ce9SBram Moolenaar " Local expansion, ends in an empty line (unless it becomes a global 4215993ce9SBram Moolenaar " expansion) 4315993ce9SBram Moolenaar exe "normal o\<C-X>\<C-P>\<C-P>\<C-P>\<C-P>\<C-P>" 4415993ce9SBram Moolenaar call assert_equal('', getline('.')) 4515993ce9SBram Moolenaar " starts Local and switches to global add-expansion 4615993ce9SBram Moolenaar exe "normal o\<C-X>\<C-P>\<C-P>\<C-X>\<C-X>\<C-N>\<C-X>\<C-N>\<C-N>" 4715993ce9SBram Moolenaar call assert_equal('run1 run2', getline('.')) 4815993ce9SBram Moolenaar 4915993ce9SBram Moolenaar set cpt=.,w,i 5015993ce9SBram Moolenaar " i-add-expands and switches to local 5115993ce9SBram Moolenaar exe "normal OM\<C-N>\<C-X>\<C-N>\<C-X>\<C-N>\<C-X>\<C-X>\<C-X>\<C-P>" 5215993ce9SBram Moolenaar call assert_equal("Makefile\tto\trun3", getline('.')) 5315993ce9SBram Moolenaar " add-expands lines (it would end in an empty line if it didn't ignored 5415993ce9SBram Moolenaar " itself) 5515993ce9SBram Moolenaar exe "normal o\<C-X>\<C-L>\<C-X>\<C-L>\<C-P>\<C-P>" 5615993ce9SBram Moolenaar call assert_equal("Makefile\tto\trun3", getline('.')) 5715993ce9SBram Moolenaar call assert_equal("Makefile\tto\trun3", getline(line('.') - 1)) 5815993ce9SBram Moolenaar 5915993ce9SBram Moolenaar set cpt=kXtestfile 6015993ce9SBram Moolenaar " checks k-expansion, and file expansion (use Xtest11 instead of test11, 6115993ce9SBram Moolenaar " because TEST11.OUT may match first on DOS) 6215993ce9SBram Moolenaar write Xtest11.one 6315993ce9SBram Moolenaar write Xtest11.two 6415993ce9SBram Moolenaar exe "normal o\<C-N>\<Esc>IX\<Esc>A\<C-X>\<C-F>\<C-N>" 6515993ce9SBram Moolenaar call assert_equal('Xtest11.two', getline('.')) 6615993ce9SBram Moolenaar 6715993ce9SBram Moolenaar " use CTRL-X CTRL-F to complete Xtest11.one, remove it and then use CTRL-X 6815993ce9SBram Moolenaar " CTRL-F again to verify this doesn't cause trouble. 6915993ce9SBram Moolenaar exe "normal oXt\<C-X>\<C-F>\<BS>\<BS>\<BS>\<BS>\<BS>\<BS>\<BS>\<BS>\<C-X>\<C-F>" 7015993ce9SBram Moolenaar call assert_equal('Xtest11.one', getline('.')) 7115993ce9SBram Moolenaar normal ddk 7215993ce9SBram Moolenaar 7315993ce9SBram Moolenaar set cpt=w 7415993ce9SBram Moolenaar " checks make_cyclic in other window 7515993ce9SBram Moolenaar exe "normal oST\<C-N>\<C-P>\<C-P>\<C-P>\<C-P>" 7615993ce9SBram Moolenaar call assert_equal('STARTTEST', getline('.')) 7715993ce9SBram Moolenaar 7815993ce9SBram Moolenaar set cpt=u nohid 7915993ce9SBram Moolenaar " checks unloaded buffer expansion 8015993ce9SBram Moolenaar only 8115993ce9SBram Moolenaar exe "normal oEN\<C-N>" 8215993ce9SBram Moolenaar call assert_equal('ENDTEST', getline('.')) 8315993ce9SBram Moolenaar " checks adding mode abortion 8415993ce9SBram Moolenaar exe "normal ounl\<C-N>\<C-X>\<C-X>\<C-P>" 8515993ce9SBram Moolenaar call assert_equal('unless', getline('.')) 8615993ce9SBram Moolenaar 8715993ce9SBram Moolenaar set cpt=t,d def=^\\k* tags=Xtestfile notagbsearch 8815993ce9SBram Moolenaar " tag expansion, define add-expansion interrupted 8915993ce9SBram Moolenaar exe "normal o\<C-X>\<C-]>\<C-X>\<C-D>\<C-X>\<C-D>\<C-X>\<C-X>\<C-D>\<C-X>\<C-D>\<C-X>\<C-D>\<C-X>\<C-D>" 9015993ce9SBram Moolenaar call assert_equal('test11file 36Gepeto /Tag/ asd', getline('.')) 9115993ce9SBram Moolenaar " t-expansion 9215993ce9SBram Moolenaar exe "normal oa\<C-N>\<Esc>" 9315993ce9SBram Moolenaar call assert_equal('asd', getline('.')) 9415993ce9SBram Moolenaar 9515993ce9SBram Moolenaar %bw! 9615993ce9SBram Moolenaar call delete('Xtestfile') 9715993ce9SBram Moolenaar call delete('Xtest11.one') 9815993ce9SBram Moolenaar call delete('Xtest11.two') 9915993ce9SBram Moolenaar call delete('Xtestdata') 10015993ce9SBram Moolenaar set cpt& cot& def& tags& tagbsearch& hidden& 101fb094e14SBram Moolenaar cd .. 102fb094e14SBram Moolenaar call delete('Xdir', 'rf') 10315993ce9SBram Moolenaarendfunc 104ffd99f72SBram Moolenaar 105ffd99f72SBram Moolenaarfunc Test_omni_dash() 106ffd99f72SBram Moolenaar func Omni(findstart, base) 107ffd99f72SBram Moolenaar if a:findstart 108ffd99f72SBram Moolenaar return 5 109ffd99f72SBram Moolenaar else 110ffd99f72SBram Moolenaar echom a:base 111ffd99f72SBram Moolenaar return ['-help', '-v'] 112ffd99f72SBram Moolenaar endif 113ffd99f72SBram Moolenaar endfunc 114ffd99f72SBram Moolenaar set omnifunc=Omni 115ffd99f72SBram Moolenaar new 116ffd99f72SBram Moolenaar exe "normal Gofind -\<C-x>\<C-o>" 117cc233589SBram Moolenaar call assert_equal("find -help", getline('$')) 118ffd99f72SBram Moolenaar 119ffd99f72SBram Moolenaar bwipe! 120ffd99f72SBram Moolenaar delfunc Omni 121ffd99f72SBram Moolenaar set omnifunc= 122ffd99f72SBram Moolenaarendfunc 12302ae9b4aSBram Moolenaar 124ff34bee3SBram Moolenaarfunc Test_omni_autoload() 125ff34bee3SBram Moolenaar let save_rtp = &rtp 126ff34bee3SBram Moolenaar set rtp=Xruntime/some 127ff34bee3SBram Moolenaar let dir = 'Xruntime/some/autoload' 128ff34bee3SBram Moolenaar call mkdir(dir, 'p') 129ff34bee3SBram Moolenaar 130ff34bee3SBram Moolenaar let lines =<< trim END 131ff34bee3SBram Moolenaar vim9script 132ff34bee3SBram Moolenaar def omni#func(findstart: bool, base: string): any 133ff34bee3SBram Moolenaar if findstart 134ff34bee3SBram Moolenaar return 1 135ff34bee3SBram Moolenaar else 136ff34bee3SBram Moolenaar return ['match'] 137ff34bee3SBram Moolenaar endif 138ff34bee3SBram Moolenaar enddef 139ff34bee3SBram Moolenaar { 140ff34bee3SBram Moolenaar eval 1 + 2 141ff34bee3SBram Moolenaar } 142ff34bee3SBram Moolenaar END 143ff34bee3SBram Moolenaar call writefile(lines, dir .. '/omni.vim') 144ff34bee3SBram Moolenaar 145ff34bee3SBram Moolenaar new 146ff34bee3SBram Moolenaar setlocal omnifunc=omni#func 147ff34bee3SBram Moolenaar call feedkeys("i\<C-X>\<C-O>\<Esc>", 'xt') 148ff34bee3SBram Moolenaar 149ff34bee3SBram Moolenaar bwipe! 150ff34bee3SBram Moolenaar call delete('Xruntime', 'rf') 151ff34bee3SBram Moolenaar set omnifunc= 152ff34bee3SBram Moolenaar let &rtp = save_rtp 153ff34bee3SBram Moolenaarendfunc 154ff34bee3SBram Moolenaar 155ffa96841SBram Moolenaarfunc Test_completefunc_args() 156ffa96841SBram Moolenaar let s:args = [] 157ffa96841SBram Moolenaar func! CompleteFunc(findstart, base) 158ffa96841SBram Moolenaar let s:args += [[a:findstart, empty(a:base)]] 159ffa96841SBram Moolenaar endfunc 160ffa96841SBram Moolenaar new 161ffa96841SBram Moolenaar 162ffa96841SBram Moolenaar set completefunc=CompleteFunc 163ffa96841SBram Moolenaar call feedkeys("i\<C-X>\<C-U>\<Esc>", 'x') 16452d3aaeeSBram Moolenaar call assert_equal([1, 1], s:args[0]) 16552d3aaeeSBram Moolenaar call assert_equal(0, s:args[1][0]) 166ffa96841SBram Moolenaar set completefunc= 167ffa96841SBram Moolenaar 168ffa96841SBram Moolenaar let s:args = [] 169ffa96841SBram Moolenaar set omnifunc=CompleteFunc 170ffa96841SBram Moolenaar call feedkeys("i\<C-X>\<C-O>\<Esc>", 'x') 17152d3aaeeSBram Moolenaar call assert_equal([1, 1], s:args[0]) 17252d3aaeeSBram Moolenaar call assert_equal(0, s:args[1][0]) 173ffa96841SBram Moolenaar set omnifunc= 174ffa96841SBram Moolenaar 175ffa96841SBram Moolenaar bwipe! 176ffa96841SBram Moolenaar unlet s:args 177ffa96841SBram Moolenaar delfunc CompleteFunc 178ffa96841SBram Moolenaarendfunc 179ffa96841SBram Moolenaar 180cee9bc2eSBram Moolenaarfunc s:CompleteDone_CompleteFuncNone( findstart, base ) 181cee9bc2eSBram Moolenaar if a:findstart 182cee9bc2eSBram Moolenaar return 0 183cee9bc2eSBram Moolenaar endif 184cee9bc2eSBram Moolenaar 185cee9bc2eSBram Moolenaar return v:none 186cee9bc2eSBram Moolenaarendfunc 187cee9bc2eSBram Moolenaar 1881e115360SBram Moolenaarfunc s:CompleteDone_CompleteFuncDict( findstart, base ) 1899b56a57cSBram Moolenaar if a:findstart 1909b56a57cSBram Moolenaar return 0 1919b56a57cSBram Moolenaar endif 1929b56a57cSBram Moolenaar 1939b56a57cSBram Moolenaar return { 1949b56a57cSBram Moolenaar \ 'words': [ 1959b56a57cSBram Moolenaar \ { 1969b56a57cSBram Moolenaar \ 'word': 'aword', 1979b56a57cSBram Moolenaar \ 'abbr': 'wrd', 1989b56a57cSBram Moolenaar \ 'menu': 'extra text', 1999b56a57cSBram Moolenaar \ 'info': 'words are cool', 2009b56a57cSBram Moolenaar \ 'kind': 'W', 2019b56a57cSBram Moolenaar \ 'user_data': 'test' 2029b56a57cSBram Moolenaar \ } 2039b56a57cSBram Moolenaar \ ] 2049b56a57cSBram Moolenaar \ } 2051e115360SBram Moolenaarendfunc 2069b56a57cSBram Moolenaar 207cee9bc2eSBram Moolenaarfunc s:CompleteDone_CheckCompletedItemNone() 208cee9bc2eSBram Moolenaar let s:called_completedone = 1 209cee9bc2eSBram Moolenaarendfunc 210cee9bc2eSBram Moolenaar 2113f169ce1SBram Moolenaarfunc s:CompleteDone_CheckCompletedItemDict(pre) 2129b56a57cSBram Moolenaar call assert_equal( 'aword', v:completed_item[ 'word' ] ) 2139b56a57cSBram Moolenaar call assert_equal( 'wrd', v:completed_item[ 'abbr' ] ) 2149b56a57cSBram Moolenaar call assert_equal( 'extra text', v:completed_item[ 'menu' ] ) 2159b56a57cSBram Moolenaar call assert_equal( 'words are cool', v:completed_item[ 'info' ] ) 2169b56a57cSBram Moolenaar call assert_equal( 'W', v:completed_item[ 'kind' ] ) 2179b56a57cSBram Moolenaar call assert_equal( 'test', v:completed_item[ 'user_data' ] ) 2189b56a57cSBram Moolenaar 2193f169ce1SBram Moolenaar if a:pre 22017e04781SBram Moolenaar call assert_equal('function', complete_info().mode) 2213f169ce1SBram Moolenaar endif 22217e04781SBram Moolenaar 2239b56a57cSBram Moolenaar let s:called_completedone = 1 2241e115360SBram Moolenaarendfunc 2259b56a57cSBram Moolenaar 226cee9bc2eSBram Moolenaarfunc Test_CompleteDoneNone() 227cee9bc2eSBram Moolenaar au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemNone() 2289845f36aSBram Moolenaar let oldline = join(map(range(&columns), 'nr2char(screenchar(&lines-1, v:val+1))'), '') 229cee9bc2eSBram Moolenaar 230cee9bc2eSBram Moolenaar set completefunc=<SID>CompleteDone_CompleteFuncNone 231cee9bc2eSBram Moolenaar execute "normal a\<C-X>\<C-U>\<C-Y>" 232cee9bc2eSBram Moolenaar set completefunc& 2339845f36aSBram Moolenaar let newline = join(map(range(&columns), 'nr2char(screenchar(&lines-1, v:val+1))'), '') 234cee9bc2eSBram Moolenaar 235cee9bc2eSBram Moolenaar call assert_true(s:called_completedone) 2369845f36aSBram Moolenaar call assert_equal(oldline, newline) 237cee9bc2eSBram Moolenaar 238cee9bc2eSBram Moolenaar let s:called_completedone = 0 239cee9bc2eSBram Moolenaar au! CompleteDone 240cee9bc2eSBram Moolenaarendfunc 241cee9bc2eSBram Moolenaar 242cee9bc2eSBram Moolenaarfunc Test_CompleteDoneDict() 2433f169ce1SBram Moolenaar au CompleteDonePre * :call <SID>CompleteDone_CheckCompletedItemDict(1) 2443f169ce1SBram Moolenaar au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDict(0) 2459b56a57cSBram Moolenaar 2469b56a57cSBram Moolenaar set completefunc=<SID>CompleteDone_CompleteFuncDict 2479b56a57cSBram Moolenaar execute "normal a\<C-X>\<C-U>\<C-Y>" 2489b56a57cSBram Moolenaar set completefunc& 2499b56a57cSBram Moolenaar 2509b56a57cSBram Moolenaar call assert_equal('test', v:completed_item[ 'user_data' ]) 2519b56a57cSBram Moolenaar call assert_true(s:called_completedone) 2529b56a57cSBram Moolenaar 2539b56a57cSBram Moolenaar let s:called_completedone = 0 2549b56a57cSBram Moolenaar au! CompleteDone 2559b56a57cSBram Moolenaarendfunc 2569b56a57cSBram Moolenaar 2571e115360SBram Moolenaarfunc s:CompleteDone_CompleteFuncDictNoUserData(findstart, base) 2589b56a57cSBram Moolenaar if a:findstart 2599b56a57cSBram Moolenaar return 0 2609b56a57cSBram Moolenaar endif 2619b56a57cSBram Moolenaar 2629b56a57cSBram Moolenaar return { 2639b56a57cSBram Moolenaar \ 'words': [ 2649b56a57cSBram Moolenaar \ { 2659b56a57cSBram Moolenaar \ 'word': 'aword', 2669b56a57cSBram Moolenaar \ 'abbr': 'wrd', 2679b56a57cSBram Moolenaar \ 'menu': 'extra text', 2689b56a57cSBram Moolenaar \ 'info': 'words are cool', 2690892832bSBram Moolenaar \ 'kind': 'W', 2700892832bSBram Moolenaar \ 'user_data': ['one', 'two'], 2719b56a57cSBram Moolenaar \ } 2729b56a57cSBram Moolenaar \ ] 2739b56a57cSBram Moolenaar \ } 2741e115360SBram Moolenaarendfunc 2759b56a57cSBram Moolenaar 2761e115360SBram Moolenaarfunc s:CompleteDone_CheckCompletedItemDictNoUserData() 2779b56a57cSBram Moolenaar call assert_equal( 'aword', v:completed_item[ 'word' ] ) 2789b56a57cSBram Moolenaar call assert_equal( 'wrd', v:completed_item[ 'abbr' ] ) 2799b56a57cSBram Moolenaar call assert_equal( 'extra text', v:completed_item[ 'menu' ] ) 2809b56a57cSBram Moolenaar call assert_equal( 'words are cool', v:completed_item[ 'info' ] ) 2819b56a57cSBram Moolenaar call assert_equal( 'W', v:completed_item[ 'kind' ] ) 2820892832bSBram Moolenaar call assert_equal( ['one', 'two'], v:completed_item[ 'user_data' ] ) 2839b56a57cSBram Moolenaar 2849b56a57cSBram Moolenaar let s:called_completedone = 1 2851e115360SBram Moolenaarendfunc 2869b56a57cSBram Moolenaar 287cee9bc2eSBram Moolenaarfunc Test_CompleteDoneDictNoUserData() 2889b56a57cSBram Moolenaar au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemDictNoUserData() 2899b56a57cSBram Moolenaar 2909b56a57cSBram Moolenaar set completefunc=<SID>CompleteDone_CompleteFuncDictNoUserData 2919b56a57cSBram Moolenaar execute "normal a\<C-X>\<C-U>\<C-Y>" 2929b56a57cSBram Moolenaar set completefunc& 2939b56a57cSBram Moolenaar 2940892832bSBram Moolenaar call assert_equal(['one', 'two'], v:completed_item[ 'user_data' ]) 2959b56a57cSBram Moolenaar call assert_true(s:called_completedone) 2969b56a57cSBram Moolenaar 2979b56a57cSBram Moolenaar let s:called_completedone = 0 2989b56a57cSBram Moolenaar au! CompleteDone 2999b56a57cSBram Moolenaarendfunc 3009b56a57cSBram Moolenaar 3011e115360SBram Moolenaarfunc s:CompleteDone_CompleteFuncList(findstart, base) 3029b56a57cSBram Moolenaar if a:findstart 3039b56a57cSBram Moolenaar return 0 3049b56a57cSBram Moolenaar endif 3059b56a57cSBram Moolenaar 3069b56a57cSBram Moolenaar return [ 'aword' ] 3071e115360SBram Moolenaarendfunc 3089b56a57cSBram Moolenaar 3091e115360SBram Moolenaarfunc s:CompleteDone_CheckCompletedItemList() 3109b56a57cSBram Moolenaar call assert_equal( 'aword', v:completed_item[ 'word' ] ) 3119b56a57cSBram Moolenaar call assert_equal( '', v:completed_item[ 'abbr' ] ) 3129b56a57cSBram Moolenaar call assert_equal( '', v:completed_item[ 'menu' ] ) 3139b56a57cSBram Moolenaar call assert_equal( '', v:completed_item[ 'info' ] ) 3149b56a57cSBram Moolenaar call assert_equal( '', v:completed_item[ 'kind' ] ) 3159b56a57cSBram Moolenaar call assert_equal( '', v:completed_item[ 'user_data' ] ) 3169b56a57cSBram Moolenaar 3179b56a57cSBram Moolenaar let s:called_completedone = 1 3181e115360SBram Moolenaarendfunc 3199b56a57cSBram Moolenaar 320cee9bc2eSBram Moolenaarfunc Test_CompleteDoneList() 3219b56a57cSBram Moolenaar au CompleteDone * :call <SID>CompleteDone_CheckCompletedItemList() 3229b56a57cSBram Moolenaar 3239b56a57cSBram Moolenaar set completefunc=<SID>CompleteDone_CompleteFuncList 3249b56a57cSBram Moolenaar execute "normal a\<C-X>\<C-U>\<C-Y>" 3259b56a57cSBram Moolenaar set completefunc& 3269b56a57cSBram Moolenaar 3279b56a57cSBram Moolenaar call assert_equal('', v:completed_item[ 'user_data' ]) 3289b56a57cSBram Moolenaar call assert_true(s:called_completedone) 3299b56a57cSBram Moolenaar 3309b56a57cSBram Moolenaar let s:called_completedone = 0 3319b56a57cSBram Moolenaar au! CompleteDone 3329b56a57cSBram Moolenaarendfunc 3339b56a57cSBram Moolenaar 334af559d2cSBram Moolenaarfunc Test_CompleteDone_undo() 335af559d2cSBram Moolenaar au CompleteDone * call append(0, "prepend1") 336af559d2cSBram Moolenaar new 337af559d2cSBram Moolenaar call setline(1, ["line1", "line2"]) 338af559d2cSBram Moolenaar call feedkeys("Go\<C-X>\<C-N>\<CR>\<ESC>", "tx") 339af559d2cSBram Moolenaar call assert_equal(["prepend1", "line1", "line2", "line1", ""], 340af559d2cSBram Moolenaar \ getline(1, '$')) 341af559d2cSBram Moolenaar undo 342af559d2cSBram Moolenaar call assert_equal(["line1", "line2"], getline(1, '$')) 343af559d2cSBram Moolenaar bwipe! 344af559d2cSBram Moolenaar au! CompleteDone 345af559d2cSBram Moolenaarendfunc 346af559d2cSBram Moolenaar 347b806aa5bSBram Moolenaarfunc CompleteTest(findstart, query) 348b806aa5bSBram Moolenaar if a:findstart 349b806aa5bSBram Moolenaar return col('.') 350b806aa5bSBram Moolenaar endif 351b806aa5bSBram Moolenaar return ['matched'] 352b806aa5bSBram Moolenaarendfunc 353b806aa5bSBram Moolenaar 354b806aa5bSBram Moolenaarfunc Test_completefunc_info() 355b806aa5bSBram Moolenaar new 356b806aa5bSBram Moolenaar set completeopt=menuone 357b806aa5bSBram Moolenaar set completefunc=CompleteTest 358b806aa5bSBram Moolenaar call feedkeys("i\<C-X>\<C-U>\<C-R>\<C-R>=string(complete_info())\<CR>\<ESC>", "tx") 359f9d51354SBram Moolenaar call assert_equal("matched{'pum_visible': 1, 'mode': 'function', 'selected': 0, 'items': [{'word': 'matched', 'menu': '', 'user_data': '', 'info': '', 'kind': '', 'abbr': ''}]}", getline(1)) 360b806aa5bSBram Moolenaar bwipe! 361b806aa5bSBram Moolenaar set completeopt& 362b806aa5bSBram Moolenaar set completefunc& 363b806aa5bSBram Moolenaarendfunc 364b806aa5bSBram Moolenaar 36502ae9b4aSBram Moolenaar" Check that when using feedkeys() typeahead does not interrupt searching for 36602ae9b4aSBram Moolenaar" completions. 36702ae9b4aSBram Moolenaarfunc Test_compl_feedkeys() 36802ae9b4aSBram Moolenaar new 36902ae9b4aSBram Moolenaar set completeopt=menuone,noselect 37002ae9b4aSBram Moolenaar call feedkeys("ajump ju\<C-X>\<C-N>\<C-P>\<ESC>", "tx") 37102ae9b4aSBram Moolenaar call assert_equal("jump jump", getline(1)) 37202ae9b4aSBram Moolenaar bwipe! 37302ae9b4aSBram Moolenaar set completeopt& 37402ae9b4aSBram Moolenaarendfunc 375f03e3283SBram Moolenaar 376*a1198124Smityufunc s:ComplInCmdwin_GlobalCompletion(a, l, p) 377*a1198124Smityu return 'global' 378*a1198124Smityuendfunc 379*a1198124Smityu 380*a1198124Smityufunc s:ComplInCmdwin_LocalCompletion(a, l, p) 381*a1198124Smityu return 'local' 382*a1198124Smityuendfunc 383*a1198124Smityu 384f03e3283SBram Moolenaarfunc Test_compl_in_cmdwin() 38521829c5fSBram Moolenaar CheckFeature cmdwin 38621829c5fSBram Moolenaar 387f03e3283SBram Moolenaar set wildmenu wildchar=<Tab> 388f03e3283SBram Moolenaar com! -nargs=1 -complete=command GetInput let input = <q-args> 389f03e3283SBram Moolenaar com! -buffer TestCommand echo 'TestCommand' 3904ff2f2fbSBram Moolenaar let w:test_winvar = 'winvar' 3914ff2f2fbSBram Moolenaar let b:test_bufvar = 'bufvar' 392f03e3283SBram Moolenaar 3934ff2f2fbSBram Moolenaar " User-defined commands 394f03e3283SBram Moolenaar let input = '' 395f03e3283SBram Moolenaar call feedkeys("q:iGetInput T\<C-x>\<C-v>\<CR>", 'tx!') 396f03e3283SBram Moolenaar call assert_equal('TestCommand', input) 397f03e3283SBram Moolenaar 398f03e3283SBram Moolenaar let input = '' 399f03e3283SBram Moolenaar call feedkeys("q::GetInput T\<Tab>\<CR>:q\<CR>", 'tx!') 400f03e3283SBram Moolenaar call assert_equal('T', input) 401f03e3283SBram Moolenaar 4024ff2f2fbSBram Moolenaar 4034ff2f2fbSBram Moolenaar com! -nargs=1 -complete=var GetInput let input = <q-args> 4044ff2f2fbSBram Moolenaar " Window-local variables 4054ff2f2fbSBram Moolenaar let input = '' 4064ff2f2fbSBram Moolenaar call feedkeys("q:iGetInput w:test_\<C-x>\<C-v>\<CR>", 'tx!') 4074ff2f2fbSBram Moolenaar call assert_equal('w:test_winvar', input) 4084ff2f2fbSBram Moolenaar 4094ff2f2fbSBram Moolenaar let input = '' 4104ff2f2fbSBram Moolenaar call feedkeys("q::GetInput w:test_\<Tab>\<CR>:q\<CR>", 'tx!') 4114ff2f2fbSBram Moolenaar call assert_equal('w:test_', input) 4124ff2f2fbSBram Moolenaar 4134ff2f2fbSBram Moolenaar " Buffer-local variables 4144ff2f2fbSBram Moolenaar let input = '' 4154ff2f2fbSBram Moolenaar call feedkeys("q:iGetInput b:test_\<C-x>\<C-v>\<CR>", 'tx!') 4164ff2f2fbSBram Moolenaar call assert_equal('b:test_bufvar', input) 4174ff2f2fbSBram Moolenaar 4184ff2f2fbSBram Moolenaar let input = '' 4194ff2f2fbSBram Moolenaar call feedkeys("q::GetInput b:test_\<Tab>\<CR>:q\<CR>", 'tx!') 4204ff2f2fbSBram Moolenaar call assert_equal('b:test_', input) 4214ff2f2fbSBram Moolenaar 422*a1198124Smityu 423*a1198124Smityu " Argument completion of buffer-local command 424*a1198124Smityu func s:ComplInCmdwin_GlobalCompletionList(a, l, p) 425*a1198124Smityu return ['global'] 426*a1198124Smityu endfunc 427*a1198124Smityu 428*a1198124Smityu func s:ComplInCmdwin_LocalCompletionList(a, l, p) 429*a1198124Smityu return ['local'] 430*a1198124Smityu endfunc 431*a1198124Smityu 432*a1198124Smityu func s:ComplInCmdwin_CheckCompletion(arg) 433*a1198124Smityu call assert_equal('local', a:arg) 434*a1198124Smityu endfunc 435*a1198124Smityu 436*a1198124Smityu com! -nargs=1 -complete=custom,<SID>ComplInCmdwin_GlobalCompletion 437*a1198124Smityu \ TestCommand call s:ComplInCmdwin_CheckCompletion(<q-args>) 438*a1198124Smityu com! -buffer -nargs=1 -complete=custom,<SID>ComplInCmdwin_LocalCompletion 439*a1198124Smityu \ TestCommand call s:ComplInCmdwin_CheckCompletion(<q-args>) 440*a1198124Smityu call feedkeys("q:iTestCommand \<Tab>\<CR>", 'tx!') 441*a1198124Smityu 442*a1198124Smityu com! -nargs=1 -complete=customlist,<SID>ComplInCmdwin_GlobalCompletionList 443*a1198124Smityu \ TestCommand call s:ComplInCmdwin_CheckCompletion(<q-args>) 444*a1198124Smityu com! -buffer -nargs=1 -complete=customlist,<SID>ComplInCmdwin_LocalCompletionList 445*a1198124Smityu \ TestCommand call s:ComplInCmdwin_CheckCompletion(<q-args>) 446*a1198124Smityu 447*a1198124Smityu call feedkeys("q:iTestCommand \<Tab>\<CR>", 'tx!') 448*a1198124Smityu 449*a1198124Smityu func! s:ComplInCmdwin_CheckCompletion(arg) 450*a1198124Smityu call assert_equal('global', a:arg) 451*a1198124Smityu endfunc 452*a1198124Smityu new 453*a1198124Smityu call feedkeys("q:iTestCommand \<Tab>\<CR>", 'tx!') 454*a1198124Smityu quit 455*a1198124Smityu 456*a1198124Smityu delfunc s:ComplInCmdwin_GlobalCompletion 457*a1198124Smityu delfunc s:ComplInCmdwin_LocalCompletion 458*a1198124Smityu delfunc s:ComplInCmdwin_GlobalCompletionList 459*a1198124Smityu delfunc s:ComplInCmdwin_LocalCompletionList 460*a1198124Smityu delfunc s:ComplInCmdwin_CheckCompletion 461*a1198124Smityu 462*a1198124Smityu delcom -buffer TestCommand 463f03e3283SBram Moolenaar delcom TestCommand 464f03e3283SBram Moolenaar delcom GetInput 4654ff2f2fbSBram Moolenaar unlet w:test_winvar 4664ff2f2fbSBram Moolenaar unlet b:test_bufvar 467f03e3283SBram Moolenaar set wildmenu& wildchar& 468f03e3283SBram Moolenaarendfunc 469ac3150d3SBram Moolenaar 470ac3150d3SBram Moolenaar" Test for insert path completion with completeslash option 471ac3150d3SBram Moolenaarfunc Test_ins_completeslash() 47250f91d22SBram Moolenaar CheckMSWindows 473ac3150d3SBram Moolenaar 474ac3150d3SBram Moolenaar call mkdir('Xdir') 475ac3150d3SBram Moolenaar let orig_shellslash = &shellslash 476ac3150d3SBram Moolenaar set cpt& 477ac3150d3SBram Moolenaar new 478ac3150d3SBram Moolenaar 479ac3150d3SBram Moolenaar set noshellslash 480ac3150d3SBram Moolenaar 481ac3150d3SBram Moolenaar set completeslash= 482ac3150d3SBram Moolenaar exe "normal oXd\<C-X>\<C-F>" 483ac3150d3SBram Moolenaar call assert_equal('Xdir\', getline('.')) 484ac3150d3SBram Moolenaar 485ac3150d3SBram Moolenaar set completeslash=backslash 486ac3150d3SBram Moolenaar exe "normal oXd\<C-X>\<C-F>" 487ac3150d3SBram Moolenaar call assert_equal('Xdir\', getline('.')) 488ac3150d3SBram Moolenaar 489ac3150d3SBram Moolenaar set completeslash=slash 490ac3150d3SBram Moolenaar exe "normal oXd\<C-X>\<C-F>" 491ac3150d3SBram Moolenaar call assert_equal('Xdir/', getline('.')) 492ac3150d3SBram Moolenaar 493ac3150d3SBram Moolenaar set shellslash 494ac3150d3SBram Moolenaar 495ac3150d3SBram Moolenaar set completeslash= 496ac3150d3SBram Moolenaar exe "normal oXd\<C-X>\<C-F>" 497ac3150d3SBram Moolenaar call assert_equal('Xdir/', getline('.')) 498ac3150d3SBram Moolenaar 499ac3150d3SBram Moolenaar set completeslash=backslash 500ac3150d3SBram Moolenaar exe "normal oXd\<C-X>\<C-F>" 501ac3150d3SBram Moolenaar call assert_equal('Xdir\', getline('.')) 502ac3150d3SBram Moolenaar 503ac3150d3SBram Moolenaar set completeslash=slash 504ac3150d3SBram Moolenaar exe "normal oXd\<C-X>\<C-F>" 505ac3150d3SBram Moolenaar call assert_equal('Xdir/', getline('.')) 506ac3150d3SBram Moolenaar %bw! 507ac3150d3SBram Moolenaar call delete('Xdir', 'rf') 508ac3150d3SBram Moolenaar 50950f91d22SBram Moolenaar set noshellslash 51050f91d22SBram Moolenaar set completeslash=slash 51150f91d22SBram Moolenaar call assert_true(stridx(globpath(&rtp, 'syntax/*.vim', 1, 1)[0], '\') != -1) 51250f91d22SBram Moolenaar 513ac3150d3SBram Moolenaar let &shellslash = orig_shellslash 51450f91d22SBram Moolenaar set completeslash= 515ac3150d3SBram Moolenaarendfunc 516ac3150d3SBram Moolenaar 517d0e1b710SBram Moolenaarfunc Test_pum_stopped_by_timer() 518d0e1b710SBram Moolenaar CheckScreendump 519d0e1b710SBram Moolenaar 520d0e1b710SBram Moolenaar let lines =<< trim END 521d0e1b710SBram Moolenaar call setline(1, ['hello', 'hullo', 'heeee', '']) 522d0e1b710SBram Moolenaar func StartCompl() 523d0e1b710SBram Moolenaar call timer_start(100, { -> execute('stopinsert') }) 524d0e1b710SBram Moolenaar call feedkeys("Gah\<C-N>") 525d0e1b710SBram Moolenaar endfunc 526d0e1b710SBram Moolenaar END 527d0e1b710SBram Moolenaar 528d0e1b710SBram Moolenaar call writefile(lines, 'Xpumscript') 529d0e1b710SBram Moolenaar let buf = RunVimInTerminal('-S Xpumscript', #{rows: 12}) 530d0e1b710SBram Moolenaar call term_sendkeys(buf, ":call StartCompl()\<CR>") 531d0e1b710SBram Moolenaar call TermWait(buf, 200) 532d0e1b710SBram Moolenaar call term_sendkeys(buf, "k") 533d0e1b710SBram Moolenaar call VerifyScreenDump(buf, 'Test_pum_stopped_by_timer', {}) 534d0e1b710SBram Moolenaar 535d0e1b710SBram Moolenaar call StopVimInTerminal(buf) 536d0e1b710SBram Moolenaar call delete('Xpumscript') 537d0e1b710SBram Moolenaarendfunc 538d0e1b710SBram Moolenaar 53909dd2bb3SBram Moolenaarfunc Test_pum_with_folds_two_tabs() 54009dd2bb3SBram Moolenaar CheckScreendump 54109dd2bb3SBram Moolenaar 54209dd2bb3SBram Moolenaar let lines =<< trim END 54309dd2bb3SBram Moolenaar set fdm=marker 54409dd2bb3SBram Moolenaar call setline(1, ['" x {{{1', '" a some text']) 54509dd2bb3SBram Moolenaar call setline(3, range(&lines)->map({_, val -> '" a' .. val})) 54609dd2bb3SBram Moolenaar norm! zm 54709dd2bb3SBram Moolenaar tab sp 54809dd2bb3SBram Moolenaar call feedkeys('2Gzv', 'xt') 54909dd2bb3SBram Moolenaar call feedkeys("0fa", 'xt') 55009dd2bb3SBram Moolenaar END 55109dd2bb3SBram Moolenaar 55209dd2bb3SBram Moolenaar call writefile(lines, 'Xpumscript') 55309dd2bb3SBram Moolenaar let buf = RunVimInTerminal('-S Xpumscript', #{rows: 10}) 5546a2c5a7dSBram Moolenaar call TermWait(buf, 50) 55509dd2bb3SBram Moolenaar call term_sendkeys(buf, "a\<C-N>") 55609dd2bb3SBram Moolenaar call VerifyScreenDump(buf, 'Test_pum_with_folds_two_tabs', {}) 55709dd2bb3SBram Moolenaar 55809dd2bb3SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 55909dd2bb3SBram Moolenaar call StopVimInTerminal(buf) 56009dd2bb3SBram Moolenaar call delete('Xpumscript') 56109dd2bb3SBram Moolenaarendfunc 5625e5a98d7SBram Moolenaar 5635e5a98d7SBram Moolenaarfunc Test_pum_with_preview_win() 5645e5a98d7SBram Moolenaar CheckScreendump 5655e5a98d7SBram Moolenaar 5665e5a98d7SBram Moolenaar let lines =<< trim END 5675e5a98d7SBram Moolenaar funct Omni_test(findstart, base) 5685e5a98d7SBram Moolenaar if a:findstart 5695e5a98d7SBram Moolenaar return col(".") - 1 5705e5a98d7SBram Moolenaar endif 5715e5a98d7SBram Moolenaar return [#{word: "one", info: "1info"}, #{word: "two", info: "2info"}, #{word: "three", info: "3info"}] 5725e5a98d7SBram Moolenaar endfunc 5735e5a98d7SBram Moolenaar set omnifunc=Omni_test 5745e5a98d7SBram Moolenaar set completeopt+=longest 5755e5a98d7SBram Moolenaar END 5765e5a98d7SBram Moolenaar 5775e5a98d7SBram Moolenaar call writefile(lines, 'Xpreviewscript') 5785e5a98d7SBram Moolenaar let buf = RunVimInTerminal('-S Xpreviewscript', #{rows: 12}) 5796a2c5a7dSBram Moolenaar call TermWait(buf, 50) 5805e5a98d7SBram Moolenaar call term_sendkeys(buf, "Gi\<C-X>\<C-O>") 5816a2c5a7dSBram Moolenaar call TermWait(buf, 100) 5825e5a98d7SBram Moolenaar call term_sendkeys(buf, "\<C-N>") 5835e5a98d7SBram Moolenaar call VerifyScreenDump(buf, 'Test_pum_with_preview_win', {}) 5845e5a98d7SBram Moolenaar 5855e5a98d7SBram Moolenaar call term_sendkeys(buf, "\<Esc>") 5865e5a98d7SBram Moolenaar call StopVimInTerminal(buf) 5875e5a98d7SBram Moolenaar call delete('Xpreviewscript') 5885e5a98d7SBram Moolenaarendfunc 589830c1afcSBram Moolenaar 590830c1afcSBram Moolenaar" Test for inserting the tag search pattern in insert mode 591830c1afcSBram Moolenaarfunc Test_ins_compl_tag_sft() 592830c1afcSBram Moolenaar call writefile([ 593830c1afcSBram Moolenaar \ "!_TAG_FILE_ENCODING\tutf-8\t//", 594830c1afcSBram Moolenaar \ "first\tXfoo\t/^int first() {}$/", 595830c1afcSBram Moolenaar \ "second\tXfoo\t/^int second() {}$/", 596830c1afcSBram Moolenaar \ "third\tXfoo\t/^int third() {}$/"], 597830c1afcSBram Moolenaar \ 'Xtags') 598830c1afcSBram Moolenaar set tags=Xtags 599830c1afcSBram Moolenaar let code =<< trim [CODE] 600830c1afcSBram Moolenaar int first() {} 601830c1afcSBram Moolenaar int second() {} 602830c1afcSBram Moolenaar int third() {} 603830c1afcSBram Moolenaar [CODE] 604830c1afcSBram Moolenaar call writefile(code, 'Xfoo') 605830c1afcSBram Moolenaar 606830c1afcSBram Moolenaar enew 607830c1afcSBram Moolenaar set showfulltag 608830c1afcSBram Moolenaar exe "normal isec\<C-X>\<C-]>\<C-N>\<CR>" 609830c1afcSBram Moolenaar call assert_equal('int second() {}', getline(1)) 610830c1afcSBram Moolenaar set noshowfulltag 611830c1afcSBram Moolenaar 612830c1afcSBram Moolenaar call delete('Xtags') 613830c1afcSBram Moolenaar call delete('Xfoo') 614830c1afcSBram Moolenaar set tags& 615830c1afcSBram Moolenaar %bwipe! 616830c1afcSBram Moolenaarendfunc 617ee4e0c1eSBram Moolenaar 618ee4e0c1eSBram Moolenaar" Test for 'completefunc' deleting text 619ee4e0c1eSBram Moolenaarfunc Test_completefunc_error() 620ee4e0c1eSBram Moolenaar new 621ad48e6c1SBram Moolenaar " delete text when called for the first time 622ee4e0c1eSBram Moolenaar func CompleteFunc(findstart, base) 623ee4e0c1eSBram Moolenaar if a:findstart == 1 624ee4e0c1eSBram Moolenaar normal dd 625ee4e0c1eSBram Moolenaar return col('.') - 1 626ee4e0c1eSBram Moolenaar endif 627ee4e0c1eSBram Moolenaar return ['a', 'b'] 628ee4e0c1eSBram Moolenaar endfunc 629ee4e0c1eSBram Moolenaar set completefunc=CompleteFunc 630ee4e0c1eSBram Moolenaar call setline(1, ['', 'abcd', '']) 6313eb6bd9cSBram Moolenaar call assert_fails('exe "normal 2G$a\<C-X>\<C-U>"', 'E578:') 632ad48e6c1SBram Moolenaar 633ad48e6c1SBram Moolenaar " delete text when called for the second time 634ad48e6c1SBram Moolenaar func CompleteFunc2(findstart, base) 635ad48e6c1SBram Moolenaar if a:findstart == 1 636ad48e6c1SBram Moolenaar return col('.') - 1 637ad48e6c1SBram Moolenaar endif 638ad48e6c1SBram Moolenaar normal dd 639ad48e6c1SBram Moolenaar return ['a', 'b'] 640ad48e6c1SBram Moolenaar endfunc 641ad48e6c1SBram Moolenaar set completefunc=CompleteFunc2 642ad48e6c1SBram Moolenaar call setline(1, ['', 'abcd', '']) 6436adb9ea0SBram Moolenaar call assert_fails('exe "normal 2G$a\<C-X>\<C-U>"', 'E578:') 644ad48e6c1SBram Moolenaar 64597202d95SBram Moolenaar " Jump to a different window from the complete function 64628976e2aSBram Moolenaar func CompleteFunc3(findstart, base) 64797202d95SBram Moolenaar if a:findstart == 1 64897202d95SBram Moolenaar return col('.') - 1 64997202d95SBram Moolenaar endif 65097202d95SBram Moolenaar wincmd p 65197202d95SBram Moolenaar return ['a', 'b'] 65297202d95SBram Moolenaar endfunc 65328976e2aSBram Moolenaar set completefunc=CompleteFunc3 65497202d95SBram Moolenaar new 65528976e2aSBram Moolenaar call assert_fails('exe "normal a\<C-X>\<C-U>"', 'E565:') 65697202d95SBram Moolenaar close! 65797202d95SBram Moolenaar 65897202d95SBram Moolenaar set completefunc& 65997202d95SBram Moolenaar delfunc CompleteFunc 66028976e2aSBram Moolenaar delfunc CompleteFunc2 66128976e2aSBram Moolenaar delfunc CompleteFunc3 66228976e2aSBram Moolenaar close! 66397202d95SBram Moolenaarendfunc 66497202d95SBram Moolenaar 665f9ab52e1SBram Moolenaar" Test for returning non-string values from 'completefunc' 666f9ab52e1SBram Moolenaarfunc Test_completefunc_invalid_data() 667f9ab52e1SBram Moolenaar new 668f9ab52e1SBram Moolenaar func! CompleteFunc(findstart, base) 669f9ab52e1SBram Moolenaar if a:findstart == 1 670f9ab52e1SBram Moolenaar return col('.') - 1 671f9ab52e1SBram Moolenaar endif 672f9ab52e1SBram Moolenaar return [{}, '', 'moon'] 673f9ab52e1SBram Moolenaar endfunc 674f9ab52e1SBram Moolenaar set completefunc=CompleteFunc 675f9ab52e1SBram Moolenaar exe "normal i\<C-X>\<C-U>" 676f9ab52e1SBram Moolenaar call assert_equal('moon', getline(1)) 677f9ab52e1SBram Moolenaar set completefunc& 678f9ab52e1SBram Moolenaar close! 679f9ab52e1SBram Moolenaarendfunc 680f9ab52e1SBram Moolenaar 681ad48e6c1SBram Moolenaar" Test for errors in using complete() function 682ad48e6c1SBram Moolenaarfunc Test_complete_func_error() 683ad48e6c1SBram Moolenaar call assert_fails('call complete(1, ["a"])', 'E785:') 684ad48e6c1SBram Moolenaar func ListColors() 685ad48e6c1SBram Moolenaar call complete(col('.'), "blue") 686ad48e6c1SBram Moolenaar endfunc 687ad48e6c1SBram Moolenaar call assert_fails('exe "normal i\<C-R>=ListColors()\<CR>"', 'E474:') 688ad48e6c1SBram Moolenaar func ListMonths() 689ad48e6c1SBram Moolenaar call complete(col('.'), test_null_list()) 690ad48e6c1SBram Moolenaar endfunc 691ad48e6c1SBram Moolenaar call assert_fails('exe "normal i\<C-R>=ListMonths()\<CR>"', 'E474:') 692ad48e6c1SBram Moolenaar delfunc ListColors 693ad48e6c1SBram Moolenaar delfunc ListMonths 694ad48e6c1SBram Moolenaar call assert_fails('call complete_info({})', 'E714:') 695f9ab52e1SBram Moolenaar call assert_equal([], complete_info(['items']).items) 696ad48e6c1SBram Moolenaarendfunc 697ad48e6c1SBram Moolenaar 698224a5f17SBram Moolenaar" Test for completing words following a completed word in a line 699224a5f17SBram Moolenaarfunc Test_complete_wrapscan() 700224a5f17SBram Moolenaar " complete words from another buffer 701224a5f17SBram Moolenaar new 702224a5f17SBram Moolenaar call setline(1, ['one two', 'three four']) 703224a5f17SBram Moolenaar new 704224a5f17SBram Moolenaar setlocal complete=w 705224a5f17SBram Moolenaar call feedkeys("itw\<C-N>\<C-X>\<C-N>\<C-X>\<C-N>\<C-X>\<C-N>", 'xt') 706224a5f17SBram Moolenaar call assert_equal('two three four', getline(1)) 707224a5f17SBram Moolenaar close! 708224a5f17SBram Moolenaar " complete words from the current buffer 709224a5f17SBram Moolenaar setlocal complete=. 710224a5f17SBram Moolenaar %d 711224a5f17SBram Moolenaar call setline(1, ['one two', '']) 712224a5f17SBram Moolenaar call cursor(2, 1) 713224a5f17SBram Moolenaar call feedkeys("ion\<C-N>\<C-X>\<C-N>\<C-X>\<C-N>\<C-X>\<C-N>", 'xt') 714224a5f17SBram Moolenaar call assert_equal('one two one two', getline(2)) 715224a5f17SBram Moolenaar close! 716224a5f17SBram Moolenaarendfunc 717224a5f17SBram Moolenaar 718f9ab52e1SBram Moolenaar" Test for completing special characters 719f9ab52e1SBram Moolenaarfunc Test_complete_special_chars() 720f9ab52e1SBram Moolenaar new 721f9ab52e1SBram Moolenaar call setline(1, 'int .*[-\^$ func float') 722f9ab52e1SBram Moolenaar call feedkeys("oin\<C-X>\<C-P>\<C-X>\<C-P>\<C-X>\<C-P>", 'xt') 723f9ab52e1SBram Moolenaar call assert_equal('int .*[-\^$ func float', getline(2)) 724f9ab52e1SBram Moolenaar close! 725f9ab52e1SBram Moolenaarendfunc 726f9ab52e1SBram Moolenaar 727f9ab52e1SBram Moolenaar" Test for completion when text is wrapped across lines. 728f9ab52e1SBram Moolenaarfunc Test_complete_across_line() 729f9ab52e1SBram Moolenaar new 730f9ab52e1SBram Moolenaar call setline(1, ['red green blue', 'one two three']) 731f9ab52e1SBram Moolenaar setlocal textwidth=20 732f9ab52e1SBram Moolenaar exe "normal 2G$a re\<C-X>\<C-P>\<C-X>\<C-P>\<C-X>\<C-P>\<C-X>\<C-P>" 733f9ab52e1SBram Moolenaar call assert_equal(['one two three red', 'green blue one'], getline(2, '$')) 734f9ab52e1SBram Moolenaar close! 735f9ab52e1SBram Moolenaarendfunc 736f9ab52e1SBram Moolenaar 737f9ab52e1SBram Moolenaar" Test for using CTRL-L to add one character when completing matching 738f9ab52e1SBram Moolenaarfunc Test_complete_add_onechar() 739f9ab52e1SBram Moolenaar new 740f9ab52e1SBram Moolenaar call setline(1, ['wool', 'woodwork']) 741f9ab52e1SBram Moolenaar call feedkeys("Gowoo\<C-P>\<C-P>\<C-P>\<C-L>f", 'xt') 742f9ab52e1SBram Moolenaar call assert_equal('woof', getline(3)) 743f9ab52e1SBram Moolenaar 744f9ab52e1SBram Moolenaar " use 'ignorecase' and backspace to erase characters from the prefix string 745f9ab52e1SBram Moolenaar " and then add letters using CTRL-L 746f9ab52e1SBram Moolenaar %d 747f9ab52e1SBram Moolenaar set ignorecase backspace=2 748f9ab52e1SBram Moolenaar setlocal complete=. 749f9ab52e1SBram Moolenaar call setline(1, ['workhorse', 'workload']) 750f9ab52e1SBram Moolenaar normal Go 751f9ab52e1SBram Moolenaar exe "normal aWOR\<C-P>\<bs>\<bs>\<bs>\<bs>\<bs>\<bs>\<C-L>r\<C-L>\<C-L>" 752f9ab52e1SBram Moolenaar call assert_equal('workh', getline(3)) 753f9ab52e1SBram Moolenaar set ignorecase& backspace& 754f9ab52e1SBram Moolenaar close! 755f9ab52e1SBram Moolenaarendfunc 756f9ab52e1SBram Moolenaar 757f9ab52e1SBram Moolenaar" Test insert completion with 'cindent' (adjust the indent) 758f9ab52e1SBram Moolenaarfunc Test_complete_with_cindent() 759f9ab52e1SBram Moolenaar new 760f9ab52e1SBram Moolenaar setlocal cindent 761f9ab52e1SBram Moolenaar call setline(1, ['if (i == 1)', " j = 2;"]) 762f9ab52e1SBram Moolenaar exe "normal Go{\<CR>i\<C-X>\<C-L>\<C-X>\<C-L>\<CR>}" 763f9ab52e1SBram Moolenaar call assert_equal(['{', "\tif (i == 1)", "\t\tj = 2;", '}'], getline(3, '$')) 764f9ab52e1SBram Moolenaar 765f9ab52e1SBram Moolenaar %d 766f9ab52e1SBram Moolenaar call setline(1, ['when while', '{', '']) 767f9ab52e1SBram Moolenaar setlocal cinkeys+==while 768f9ab52e1SBram Moolenaar exe "normal Giwh\<C-P> " 769f9ab52e1SBram Moolenaar call assert_equal("\twhile ", getline('$')) 770f9ab52e1SBram Moolenaar close! 771f9ab52e1SBram Moolenaarendfunc 772f9ab52e1SBram Moolenaar 773f9ab52e1SBram Moolenaar" Test for <CTRL-X> <CTRL-V> completion. Complete commands and functions 774f9ab52e1SBram Moolenaarfunc Test_complete_cmdline() 775f9ab52e1SBram Moolenaar new 776f9ab52e1SBram Moolenaar exe "normal icaddb\<C-X>\<C-V>" 777f9ab52e1SBram Moolenaar call assert_equal('caddbuffer', getline(1)) 778f9ab52e1SBram Moolenaar exe "normal ocall getqf\<C-X>\<C-V>" 779f9ab52e1SBram Moolenaar call assert_equal('call getqflist(', getline(2)) 780f9ab52e1SBram Moolenaar exe "normal oabcxyz(\<C-X>\<C-V>" 781f9ab52e1SBram Moolenaar call assert_equal('abcxyz(', getline(3)) 782dca29d9cSzeertzjq com! -buffer TestCommand1 echo 'TestCommand1' 783dca29d9cSzeertzjq com! -buffer TestCommand2 echo 'TestCommand2' 784dca29d9cSzeertzjq write TestCommand1Test 785dca29d9cSzeertzjq write TestCommand2Test 786dca29d9cSzeertzjq " Test repeating <CTRL-X> <CTRL-V> and switching to another CTRL-X mode 787dca29d9cSzeertzjq exe "normal oT\<C-X>\<C-V>\<C-X>\<C-V>\<C-X>\<C-F>\<Esc>" 788dca29d9cSzeertzjq call assert_equal('TestCommand2Test', getline(4)) 789dca29d9cSzeertzjq call delete('TestCommand1Test') 790dca29d9cSzeertzjq call delete('TestCommand2Test') 791dca29d9cSzeertzjq delcom TestCommand1 792dca29d9cSzeertzjq delcom TestCommand2 793dca29d9cSzeertzjq close! 794dca29d9cSzeertzjqendfunc 795dca29d9cSzeertzjq 796dca29d9cSzeertzjq" Test for <CTRL-X> <CTRL-Z> stopping completion without changing the match 797dca29d9cSzeertzjqfunc Test_complete_stop() 798dca29d9cSzeertzjq new 799dca29d9cSzeertzjq func Save_mode1() 800dca29d9cSzeertzjq let g:mode1 = mode(1) 801dca29d9cSzeertzjq return '' 802dca29d9cSzeertzjq endfunc 803dca29d9cSzeertzjq func Save_mode2() 804dca29d9cSzeertzjq let g:mode2 = mode(1) 805dca29d9cSzeertzjq return '' 806dca29d9cSzeertzjq endfunc 807dca29d9cSzeertzjq inoremap <F1> <C-R>=Save_mode1()<CR> 808dca29d9cSzeertzjq inoremap <F2> <C-R>=Save_mode2()<CR> 809dca29d9cSzeertzjq call setline(1, ['aaa bbb ccc ']) 810dca29d9cSzeertzjq exe "normal A\<C-N>\<C-P>\<F1>\<C-X>\<C-Z>\<F2>\<Esc>" 811dca29d9cSzeertzjq call assert_equal('ic', g:mode1) 812dca29d9cSzeertzjq call assert_equal('i', g:mode2) 813dca29d9cSzeertzjq call assert_equal('aaa bbb ccc ', getline(1)) 814dca29d9cSzeertzjq exe "normal A\<C-N>\<Down>\<F1>\<C-X>\<C-Z>\<F2>\<Esc>" 815dca29d9cSzeertzjq call assert_equal('ic', g:mode1) 816dca29d9cSzeertzjq call assert_equal('i', g:mode2) 817dca29d9cSzeertzjq call assert_equal('aaa bbb ccc aaa', getline(1)) 818dca29d9cSzeertzjq set completeopt+=noselect 819dca29d9cSzeertzjq exe "normal A \<C-N>\<Down>\<Down>\<C-L>\<C-L>\<F1>\<C-X>\<C-Z>\<F2>\<Esc>" 820dca29d9cSzeertzjq call assert_equal('ic', g:mode1) 821dca29d9cSzeertzjq call assert_equal('i', g:mode2) 822dca29d9cSzeertzjq call assert_equal('aaa bbb ccc aaa bb', getline(1)) 823dca29d9cSzeertzjq set completeopt& 824dca29d9cSzeertzjq exe "normal A d\<C-N>\<F1>\<C-X>\<C-Z>\<F2>\<Esc>" 825dca29d9cSzeertzjq call assert_equal('ic', g:mode1) 826dca29d9cSzeertzjq call assert_equal('i', g:mode2) 827dca29d9cSzeertzjq call assert_equal('aaa bbb ccc aaa bb d', getline(1)) 828dca29d9cSzeertzjq com! -buffer TestCommand1 echo 'TestCommand1' 829dca29d9cSzeertzjq com! -buffer TestCommand2 echo 'TestCommand2' 830dca29d9cSzeertzjq exe "normal oT\<C-X>\<C-V>\<C-X>\<C-V>\<F1>\<C-X>\<C-Z>\<F2>\<Esc>" 831dca29d9cSzeertzjq call assert_equal('ic', g:mode1) 832dca29d9cSzeertzjq call assert_equal('i', g:mode2) 833dca29d9cSzeertzjq call assert_equal('TestCommand2', getline(2)) 834dca29d9cSzeertzjq delcom TestCommand1 835dca29d9cSzeertzjq delcom TestCommand2 836dca29d9cSzeertzjq unlet g:mode1 837dca29d9cSzeertzjq unlet g:mode2 838dca29d9cSzeertzjq iunmap <F1> 839dca29d9cSzeertzjq iunmap <F2> 840dca29d9cSzeertzjq delfunc Save_mode1 841dca29d9cSzeertzjq delfunc Save_mode2 842f9ab52e1SBram Moolenaar close! 8438f187fc6SBram Moolenaarendfunc 8448f187fc6SBram Moolenaar 8458f187fc6SBram Moolenaarfunc Test_issue_7021() 8468f187fc6SBram Moolenaar CheckMSWindows 8478f187fc6SBram Moolenaar 8488f187fc6SBram Moolenaar let orig_shellslash = &shellslash 8498f187fc6SBram Moolenaar set noshellslash 8508f187fc6SBram Moolenaar 8518f187fc6SBram Moolenaar set completeslash=slash 8528f187fc6SBram Moolenaar call assert_false(expand('~') =~ '/') 8538f187fc6SBram Moolenaar 8548f187fc6SBram Moolenaar let &shellslash = orig_shellslash 8558f187fc6SBram Moolenaar set completeslash= 856f9ab52e1SBram Moolenaarendfunc 857f9ab52e1SBram Moolenaar 858cc233589SBram Moolenaar" Test to ensure 'Scanning...' messages are not recorded in messages history 859cc233589SBram Moolenaarfunc Test_z1_complete_no_history() 860cc233589SBram Moolenaar new 861cc233589SBram Moolenaar messages clear 862cc233589SBram Moolenaar let currmess = execute('messages') 863cc233589SBram Moolenaar setlocal dictionary=README.txt 864cc233589SBram Moolenaar exe "normal owh\<C-X>\<C-K>" 865cc233589SBram Moolenaar exe "normal owh\<C-N>" 866cc233589SBram Moolenaar call assert_equal(currmess, execute('messages')) 867cc233589SBram Moolenaar close! 868cc233589SBram Moolenaarendfunc 869cc233589SBram Moolenaar 870ee4e0c1eSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 871