157d7971bSBram Moolenaar" Tests for the :cdo, :cfdo, :ldo and :lfdo commands 257d7971bSBram Moolenaar 38c5a278fSBram Moolenaarsource check.vim 48c5a278fSBram MoolenaarCheckFeature quickfix 557d7971bSBram Moolenaar 657d7971bSBram Moolenaar" Create the files used by the tests 7bfe13cccSBram Moolenaarfunc SetUp() 857d7971bSBram Moolenaar call writefile(["Line1", "Line2", "Line3"], 'Xtestfile1') 957d7971bSBram Moolenaar call writefile(["Line1", "Line2", "Line3"], 'Xtestfile2') 1057d7971bSBram Moolenaar call writefile(["Line1", "Line2", "Line3"], 'Xtestfile3') 11*14798ab9SBram Moolenaarendfunc 1257d7971bSBram Moolenaar 1357d7971bSBram Moolenaar" Remove the files used by the tests 14*14798ab9SBram Moolenaarfunc TearDown() 1557d7971bSBram Moolenaar call delete('Xtestfile1') 1657d7971bSBram Moolenaar call delete('Xtestfile2') 1757d7971bSBram Moolenaar call delete('Xtestfile3') 18*14798ab9SBram Moolenaarendfunc 1957d7971bSBram Moolenaar 2057d7971bSBram Moolenaar" Returns the current line in '<filename> <linenum>L <column>C' format 21*14798ab9SBram Moolenaarfunc GetRuler() 2257d7971bSBram Moolenaar return expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' 23*14798ab9SBram Moolenaarendfunc 2457d7971bSBram Moolenaar 2557d7971bSBram Moolenaar" Tests for the :cdo and :ldo commands 26*14798ab9SBram Moolenaarfunc XdoTests(cchar) 2757d7971bSBram Moolenaar enew 2857d7971bSBram Moolenaar 2957d7971bSBram Moolenaar " Shortcuts for calling the cdo and ldo commands 3057d7971bSBram Moolenaar let Xdo = a:cchar . 'do' 3157d7971bSBram Moolenaar let Xgetexpr = a:cchar . 'getexpr' 3257d7971bSBram Moolenaar let Xprev = a:cchar. 'prev' 3357d7971bSBram Moolenaar let XdoCmd = Xdo . ' call add(l, GetRuler())' 3457d7971bSBram Moolenaar 3557d7971bSBram Moolenaar " Try with an empty list 3657d7971bSBram Moolenaar let l = [] 3757d7971bSBram Moolenaar exe XdoCmd 3857d7971bSBram Moolenaar call assert_equal([], l) 3957d7971bSBram Moolenaar 4057d7971bSBram Moolenaar " Populate the list and then try 4157d7971bSBram Moolenaar exe Xgetexpr . " ['non-error 1', 'Xtestfile1:1:3:Line1', 'non-error 2', 'Xtestfile2:2:2:Line2', 'non-error 3', 'Xtestfile3:3:1:Line3']" 4257d7971bSBram Moolenaar 4357d7971bSBram Moolenaar let l = [] 4457d7971bSBram Moolenaar exe XdoCmd 4557d7971bSBram Moolenaar call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l) 4657d7971bSBram Moolenaar 4757d7971bSBram Moolenaar " Run command only on selected error lines 4857d7971bSBram Moolenaar let l = [] 4957d7971bSBram Moolenaar enew 5057d7971bSBram Moolenaar exe "2,3" . XdoCmd 5157d7971bSBram Moolenaar call assert_equal(['Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l) 5257d7971bSBram Moolenaar 5357d7971bSBram Moolenaar " Boundary condition tests 5457d7971bSBram Moolenaar let l = [] 5557d7971bSBram Moolenaar enew 5657d7971bSBram Moolenaar exe "1,1" . XdoCmd 5757d7971bSBram Moolenaar call assert_equal(['Xtestfile1 1L 3C'], l) 5857d7971bSBram Moolenaar 5957d7971bSBram Moolenaar let l = [] 6057d7971bSBram Moolenaar enew 6157d7971bSBram Moolenaar exe "3" . XdoCmd 6257d7971bSBram Moolenaar call assert_equal(['Xtestfile3 3L 1C'], l) 6357d7971bSBram Moolenaar 6457d7971bSBram Moolenaar " Range test commands 6557d7971bSBram Moolenaar let l = [] 6657d7971bSBram Moolenaar enew 6757d7971bSBram Moolenaar exe "%" . XdoCmd 6857d7971bSBram Moolenaar call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l) 6957d7971bSBram Moolenaar 7057d7971bSBram Moolenaar let l = [] 7157d7971bSBram Moolenaar enew 7257d7971bSBram Moolenaar exe "1,$" . XdoCmd 7357d7971bSBram Moolenaar call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l) 7457d7971bSBram Moolenaar 7557d7971bSBram Moolenaar let l = [] 7657d7971bSBram Moolenaar enew 7757d7971bSBram Moolenaar exe Xprev 7857d7971bSBram Moolenaar exe "." . XdoCmd 7957d7971bSBram Moolenaar call assert_equal(['Xtestfile2 2L 2C'], l) 8057d7971bSBram Moolenaar 8157d7971bSBram Moolenaar let l = [] 8257d7971bSBram Moolenaar enew 8357d7971bSBram Moolenaar exe "+" . XdoCmd 8457d7971bSBram Moolenaar call assert_equal(['Xtestfile3 3L 1C'], l) 8557d7971bSBram Moolenaar 8657d7971bSBram Moolenaar " Invalid error lines test 8757d7971bSBram Moolenaar let l = [] 8857d7971bSBram Moolenaar enew 8957d7971bSBram Moolenaar exe "silent! 27" . XdoCmd 9057d7971bSBram Moolenaar exe "silent! 4,5" . XdoCmd 9157d7971bSBram Moolenaar call assert_equal([], l) 9257d7971bSBram Moolenaar 9357d7971bSBram Moolenaar " Run commands from an unsaved buffer 9457d7971bSBram Moolenaar let v:errmsg='' 9557d7971bSBram Moolenaar let l = [] 9657d7971bSBram Moolenaar enew 9757d7971bSBram Moolenaar setlocal modified 9857d7971bSBram Moolenaar exe "silent! 2,2" . XdoCmd 9957d7971bSBram Moolenaar if v:errmsg !~# 'No write since last change' 10057d7971bSBram Moolenaar call add(v:errors, 'Unsaved file change test failed') 10157d7971bSBram Moolenaar endif 10257d7971bSBram Moolenaar 10357d7971bSBram Moolenaar " If the executed command fails, then the operation should be aborted 10457d7971bSBram Moolenaar enew! 10557d7971bSBram Moolenaar let subst_count = 0 10657d7971bSBram Moolenaar exe "silent!" . Xdo . " s/Line/xLine/ | let subst_count += 1" 10757d7971bSBram Moolenaar if subst_count != 1 || getline('.') != 'xLine1' 10857d7971bSBram Moolenaar call add(v:errors, 'Abort command on error test failed') 10957d7971bSBram Moolenaar endif 11057d7971bSBram Moolenaar 11157d7971bSBram Moolenaar let l = [] 11257d7971bSBram Moolenaar exe "2,2" . Xdo . "! call add(l, GetRuler())" 11357d7971bSBram Moolenaar call assert_equal(['Xtestfile2 2L 2C'], l) 11457d7971bSBram Moolenaar 11557d7971bSBram Moolenaar " List with no valid error entries 11657d7971bSBram Moolenaar let l = [] 11757d7971bSBram Moolenaar edit! +2 Xtestfile1 11857d7971bSBram Moolenaar exe Xgetexpr . " ['non-error 1', 'non-error 2', 'non-error 3']" 11957d7971bSBram Moolenaar exe XdoCmd 12057d7971bSBram Moolenaar call assert_equal([], l) 12157d7971bSBram Moolenaar exe "silent! 2" . XdoCmd 12257d7971bSBram Moolenaar call assert_equal([], l) 12357d7971bSBram Moolenaar let v:errmsg='' 12457d7971bSBram Moolenaar exe "%" . XdoCmd 12557d7971bSBram Moolenaar exe "1,$" . XdoCmd 12657d7971bSBram Moolenaar exe "." . XdoCmd 12757d7971bSBram Moolenaar call assert_equal('', v:errmsg) 12857d7971bSBram Moolenaar 12957d7971bSBram Moolenaar " List with only one valid entry 13057d7971bSBram Moolenaar let l = [] 13157d7971bSBram Moolenaar exe Xgetexpr . " ['Xtestfile3:3:1:Line3']" 13257d7971bSBram Moolenaar exe XdoCmd 13357d7971bSBram Moolenaar call assert_equal(['Xtestfile3 3L 1C'], l) 13457d7971bSBram Moolenaar 135*14798ab9SBram Moolenaarendfunc 13657d7971bSBram Moolenaar 13757d7971bSBram Moolenaar" Tests for the :cfdo and :lfdo commands 138*14798ab9SBram Moolenaarfunc XfdoTests(cchar) 13957d7971bSBram Moolenaar enew 14057d7971bSBram Moolenaar 14157d7971bSBram Moolenaar " Shortcuts for calling the cfdo and lfdo commands 14257d7971bSBram Moolenaar let Xfdo = a:cchar . 'fdo' 14357d7971bSBram Moolenaar let Xgetexpr = a:cchar . 'getexpr' 14457d7971bSBram Moolenaar let XfdoCmd = Xfdo . ' call add(l, GetRuler())' 14557d7971bSBram Moolenaar let Xpfile = a:cchar. 'pfile' 14657d7971bSBram Moolenaar 14757d7971bSBram Moolenaar " Clear the quickfix/location list 14857d7971bSBram Moolenaar exe Xgetexpr . " []" 14957d7971bSBram Moolenaar 15057d7971bSBram Moolenaar " Try with an empty list 15157d7971bSBram Moolenaar let l = [] 15257d7971bSBram Moolenaar exe XfdoCmd 15357d7971bSBram Moolenaar call assert_equal([], l) 15457d7971bSBram Moolenaar 15557d7971bSBram Moolenaar " Populate the list and then try 15657d7971bSBram Moolenaar exe Xgetexpr . " ['non-error 1', 'Xtestfile1:1:3:Line1', 'Xtestfile1:2:1:Line2', 'non-error 2', 'Xtestfile2:2:2:Line2', 'non-error 3', 'Xtestfile3:2:3:Line2', 'Xtestfile3:3:1:Line3']" 15757d7971bSBram Moolenaar 15857d7971bSBram Moolenaar let l = [] 15957d7971bSBram Moolenaar exe XfdoCmd 16057d7971bSBram Moolenaar call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l) 16157d7971bSBram Moolenaar 16257d7971bSBram Moolenaar " Run command only on selected error lines 16357d7971bSBram Moolenaar let l = [] 16457d7971bSBram Moolenaar exe "2,3" . XfdoCmd 16557d7971bSBram Moolenaar call assert_equal(['Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l) 16657d7971bSBram Moolenaar 16757d7971bSBram Moolenaar " Boundary condition tests 16857d7971bSBram Moolenaar let l = [] 16957d7971bSBram Moolenaar exe "3" . XfdoCmd 17057d7971bSBram Moolenaar call assert_equal(['Xtestfile3 2L 3C'], l) 17157d7971bSBram Moolenaar 17257d7971bSBram Moolenaar " Range test commands 17357d7971bSBram Moolenaar let l = [] 17457d7971bSBram Moolenaar exe "%" . XfdoCmd 17557d7971bSBram Moolenaar call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l) 17657d7971bSBram Moolenaar 17757d7971bSBram Moolenaar let l = [] 17857d7971bSBram Moolenaar exe "1,$" . XfdoCmd 17957d7971bSBram Moolenaar call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l) 18057d7971bSBram Moolenaar 18157d7971bSBram Moolenaar let l = [] 18257d7971bSBram Moolenaar exe Xpfile 18357d7971bSBram Moolenaar exe "." . XfdoCmd 18457d7971bSBram Moolenaar call assert_equal(['Xtestfile2 2L 2C'], l) 18557d7971bSBram Moolenaar 18657d7971bSBram Moolenaar " List with only one valid entry 18757d7971bSBram Moolenaar let l = [] 18857d7971bSBram Moolenaar exe Xgetexpr . " ['Xtestfile2:2:5:Line2']" 18957d7971bSBram Moolenaar exe XfdoCmd 19057d7971bSBram Moolenaar call assert_equal(['Xtestfile2 2L 5C'], l) 19157d7971bSBram Moolenaar 192*14798ab9SBram Moolenaarendfunc 19357d7971bSBram Moolenaar 19457d7971bSBram Moolenaar" Tests for cdo and cfdo 195*14798ab9SBram Moolenaarfunc Test_cdo() 19657d7971bSBram Moolenaar call XdoTests('c') 19757d7971bSBram Moolenaar call XfdoTests('c') 198*14798ab9SBram Moolenaarendfunc 19957d7971bSBram Moolenaar 20057d7971bSBram Moolenaar" Tests for ldo and lfdo 201*14798ab9SBram Moolenaarfunc Test_ldo() 20257d7971bSBram Moolenaar call XdoTests('l') 20357d7971bSBram Moolenaar call XfdoTests('l') 204*14798ab9SBram Moolenaarendfunc 205*14798ab9SBram Moolenaar 206*14798ab9SBram Moolenaar" Test for making 'shm' doesn't interfere with the output. 207*14798ab9SBram Moolenaarfunc Test_cdo_print() 208*14798ab9SBram Moolenaar enew | only! 209*14798ab9SBram Moolenaar cgetexpr ["Xtestfile1:1:Line1", "Xtestfile2:1:Line1", "Xtestfile3:1:Line1"] 210*14798ab9SBram Moolenaar cdo print 211*14798ab9SBram Moolenaar call assert_equal('Line1', Screenline(&lines)) 212*14798ab9SBram Moolenaar call assert_equal('Line1', Screenline(&lines - 3)) 213*14798ab9SBram Moolenaar call assert_equal('Line1', Screenline(&lines - 6)) 214*14798ab9SBram Moolenaarendfunc 215*14798ab9SBram Moolenaar 216*14798ab9SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 217