To: vim_dev@googlegroups.com Subject: Patch 7.4.980 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.4.980 Problem: Tests for :cdo, :ldo, etc. are outdated. Solution: Add new style tests for these commands. (Yegappan Lakshmanan) Files: src/testdir/Make_amiga.mak, src/testdir/Make_dos.mak, src/testdir/Make_ming.mak, src/testdir/Make_os2.mak, src/testdir/Make_vms.mms, src/testdir/Makefile, src/testdir/test_cdo.in, src/testdir/test_cdo.ok, src/testdir/test_cdo.vim *** ../vim-7.4.979/src/testdir/Make_amiga.mak 2015-12-03 16:54:21.970106719 +0100 --- src/testdir/Make_amiga.mak 2015-12-28 13:53:35.147680085 +0100 *************** *** 41,47 **** test_autocmd_option.out \ test_autoformat_join.out \ test_breakindent.out \ - test_cdo.out \ test_changelist.out \ test_charsearch.out \ test_close_count.out \ --- 41,46 ---- *************** *** 197,203 **** test_autocmd_option.out: test_autocmd_option.in test_autoformat_join.out: test_autoformat_join.in test_breakindent.out: test_breakindent.in - test_cdo.out: test_cdo.in test_changelist.out: test_changelist.in test_charsearch.out: test_charsearch.in test_close_count.out: test_close_count.in --- 196,201 ---- *** ../vim-7.4.979/src/testdir/Make_dos.mak 2015-12-03 16:54:21.970106719 +0100 --- src/testdir/Make_dos.mak 2015-12-28 13:53:35.147680085 +0100 *************** *** 40,46 **** test_autocmd_option.out \ test_autoformat_join.out \ test_breakindent.out \ - test_cdo.out \ test_changelist.out \ test_charsearch.out \ test_close_count.out \ --- 40,45 ---- *** ../vim-7.4.979/src/testdir/Make_ming.mak 2015-12-03 16:54:21.970106719 +0100 --- src/testdir/Make_ming.mak 2015-12-28 13:53:35.147680085 +0100 *************** *** 62,68 **** test_autocmd_option.out \ test_autoformat_join.out \ test_breakindent.out \ - test_cdo.out \ test_changelist.out \ test_charsearch.out \ test_close_count.out \ --- 62,67 ---- *** ../vim-7.4.979/src/testdir/Make_os2.mak 2015-12-03 16:54:21.970106719 +0100 --- src/testdir/Make_os2.mak 2015-12-28 13:53:35.147680085 +0100 *************** *** 42,48 **** test_autocmd_option.out \ test_autoformat_join.out \ test_breakindent.out \ - test_cdo.out \ test_changelist.out \ test_charsearch.out \ test_close_count.out \ --- 42,47 ---- *** ../vim-7.4.979/src/testdir/Make_vms.mms 2015-12-03 16:54:21.970106719 +0100 --- src/testdir/Make_vms.mms 2015-12-28 13:53:35.151680041 +0100 *************** *** 101,107 **** test_autocmd_option.out \ test_autoformat_join.out \ test_breakindent.out \ - test_cdo.out \ test_changelist.out \ test_charsearch.out \ test_close_count.out \ --- 101,106 ---- *** ../vim-7.4.979/src/testdir/Makefile 2015-12-05 20:56:52.805365468 +0100 --- src/testdir/Makefile 2015-12-28 14:03:09.501457529 +0100 *************** *** 41,47 **** test_autocmd_option.out \ test_autoformat_join.out \ test_breakindent.out \ - test_cdo.out \ test_changelist.out \ test_charsearch.out \ test_close_count.out \ --- 41,46 ---- *************** *** 72,77 **** --- 71,77 ---- test_writefile.out NEW_TESTS = test_assert.res \ + test_cdo.res \ test_alot.res SCRIPTS_GUI = test16.out *************** *** 173,176 **** newtests: $(NEW_TESTS) .vim.res: ! $(RUN_VIMTEST) -u runtest.vim $*.vim --- 173,176 ---- newtests: $(NEW_TESTS) .vim.res: ! $(RUN_VIMTEST) -S runtest.vim $*.vim *** ../vim-7.4.979/src/testdir/test_cdo.in 2015-12-19 15:15:49.888288506 +0100 --- src/testdir/test_cdo.in 1970-01-01 01:00:00.000000000 +0100 *************** *** 1,108 **** - Tests for the :cdo, :cfdo, :ldo and :lfdo commands - - STARTTEST - :so small.vim - :lang mess C - :if !has('quickfix') | e! test.ok | wq! test.out | endif - - :call writefile(["Line1", "Line2", "Line3"], 'Xtestfile1') - :call writefile(["Line1", "Line2", "Line3"], 'Xtestfile2') - :call writefile(["Line1", "Line2", "Line3"], 'Xtestfile3') - - :function RunTests(cchar) - : let nl="\n" - - : enew - : " Try with an empty list - : exe a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - - : " Populate the list and then try - : exe a:cchar . "getexpr ['non-error 1', 'Xtestfile1:1:3:Line1', 'non-error 2', 'Xtestfile2:2:2:Line2', 'non-error 3', 'Xtestfile3:3:1:Line3']" - : exe a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - - : " Run command only on selected error lines - : enew - : exe "2,3" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : " Boundary condition tests - : enew - : exe "1,1" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : enew - : exe "3" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : " Range test commands - : enew - : exe "%" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : enew - : exe "1,$" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : enew - : exe a:cchar . 'prev' - : exe "." . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : " Invalid error lines test - : enew - : exe "27" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe "4,5" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - - : " Run commands from an unsaved buffer - : let v:errmsg='' - : enew - : setlocal modified - : exe "2,2" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : if v:errmsg =~# 'No write since last change' - : let g:result .= 'Unsaved file change test passed' . nl - : else - : let g:result .= 'Unsaved file change test failed' . nl - : endif - - : " If the executed command fails, then the operation should be aborted - : enew! - : let subst_count = 0 - : exe a:cchar . "do s/Line/xLine/ | let subst_count += 1" - : if subst_count == 1 && getline('.') == 'xLine1' - : let g:result .= 'Abort command on error test passed' . nl - : else - : let g:result .= 'Abort command on error test failed' . nl - : endif - - : exe "2,2" . a:cchar . "do! let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - - : " List with no valid error entries - : edit! +2 Xtestfile1 - : exe a:cchar . "getexpr ['non-error 1', 'non-error 2', 'non-error 3']" - : exe a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe "2" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : let v:errmsg='' - : exe "%" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe "1,$" . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe "." . a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : let g:result .= v:errmsg - - : " List with only one valid entry - : exe a:cchar . "getexpr ['Xtestfile3:3:1:Line3']" - : exe a:cchar . "do let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - - : " Tests for :cfdo and :lfdo commands - : exe a:cchar . "getexpr ['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']" - : exe a:cchar . "fdo let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe "3" . a:cchar . "fdo let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe "2,3" . a:cchar . "fdo let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe "%" . a:cchar . "fdo let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe "1,$" . a:cchar . "fdo let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - : exe a:cchar . 'pfile' - : exe "." . a:cchar . "fdo let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - - : " List with only one valid entry - : exe a:cchar . "getexpr ['Xtestfile2:2:5:Line2']" - : exe a:cchar . "fdo let g:result .= expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' . nl" - :endfunction - - :let result='' - :" Tests for the :cdo quickfix list command - :call RunTests('c') - :let result .= "\n" - :" Tests for the :ldo location list command - :call RunTests('l') - - :edit! test.out - :0put =result - :wq! - ENDTEST - --- 0 ---- *** ../vim-7.4.979/src/testdir/test_cdo.ok 2015-09-08 18:46:04.349233550 +0200 --- src/testdir/test_cdo.ok 1970-01-01 01:00:00.000000000 +0100 *************** *** 1,66 **** - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile1 1L 3C - Xtestfile3 3L 1C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile2 2L 2C - Unsaved file change test passed - Abort command on error test passed - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 2L 3C - Xtestfile3 2L 3C - Xtestfile2 2L 2C - Xtestfile3 2L 3C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 2L 3C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 2L 3C - Xtestfile2 2L 2C - Xtestfile2 2L 5C - - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile1 1L 3C - Xtestfile3 3L 1C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile2 2L 2C - Unsaved file change test passed - Abort command on error test passed - Xtestfile2 2L 2C - Xtestfile3 3L 1C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 2L 3C - Xtestfile3 2L 3C - Xtestfile2 2L 2C - Xtestfile3 2L 3C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 2L 3C - Xtestfile1 1L 3C - Xtestfile2 2L 2C - Xtestfile3 2L 3C - Xtestfile2 2L 2C - Xtestfile2 2L 5C - --- 0 ---- *** ../vim-7.4.979/src/testdir/test_cdo.vim 2015-12-28 14:01:47.630345168 +0100 --- src/testdir/test_cdo.vim 2015-12-28 13:53:35.151680041 +0100 *************** *** 0 **** --- 1,206 ---- + " Tests for the :cdo, :cfdo, :ldo and :lfdo commands + + lang mess C + if !has('quickfix') + finish + endif + + " Create the files used by the tests + function SetUp() + call writefile(["Line1", "Line2", "Line3"], 'Xtestfile1') + call writefile(["Line1", "Line2", "Line3"], 'Xtestfile2') + call writefile(["Line1", "Line2", "Line3"], 'Xtestfile3') + endfunction + + " Remove the files used by the tests + function TearDown() + call delete('Xtestfile1') + call delete('Xtestfile2') + call delete('Xtestfile3') + endfunction + + " Returns the current line in ' L C' format + function GetRuler() + return expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C' + endfunction + + " Tests for the :cdo and :ldo commands + function XdoTests(cchar) + enew + + " Shortcuts for calling the cdo and ldo commands + let Xdo = a:cchar . 'do' + let Xgetexpr = a:cchar . 'getexpr' + let Xprev = a:cchar. 'prev' + let XdoCmd = Xdo . ' call add(l, GetRuler())' + + " Try with an empty list + let l = [] + exe XdoCmd + call assert_equal([], l) + + " Populate the list and then try + exe Xgetexpr . " ['non-error 1', 'Xtestfile1:1:3:Line1', 'non-error 2', 'Xtestfile2:2:2:Line2', 'non-error 3', 'Xtestfile3:3:1:Line3']" + + let l = [] + exe XdoCmd + call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l) + + " Run command only on selected error lines + let l = [] + enew + exe "2,3" . XdoCmd + call assert_equal(['Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l) + + " Boundary condition tests + let l = [] + enew + exe "1,1" . XdoCmd + call assert_equal(['Xtestfile1 1L 3C'], l) + + let l = [] + enew + exe "3" . XdoCmd + call assert_equal(['Xtestfile3 3L 1C'], l) + + " Range test commands + let l = [] + enew + exe "%" . XdoCmd + call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l) + + let l = [] + enew + exe "1,$" . XdoCmd + call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l) + + let l = [] + enew + exe Xprev + exe "." . XdoCmd + call assert_equal(['Xtestfile2 2L 2C'], l) + + let l = [] + enew + exe "+" . XdoCmd + call assert_equal(['Xtestfile3 3L 1C'], l) + + " Invalid error lines test + let l = [] + enew + exe "silent! 27" . XdoCmd + exe "silent! 4,5" . XdoCmd + call assert_equal([], l) + + " Run commands from an unsaved buffer + let v:errmsg='' + let l = [] + enew + setlocal modified + exe "silent! 2,2" . XdoCmd + if v:errmsg !~# 'No write since last change' + call add(v:errors, 'Unsaved file change test failed') + endif + + " If the executed command fails, then the operation should be aborted + enew! + let subst_count = 0 + exe "silent!" . Xdo . " s/Line/xLine/ | let subst_count += 1" + if subst_count != 1 || getline('.') != 'xLine1' + call add(v:errors, 'Abort command on error test failed') + endif + + let l = [] + exe "2,2" . Xdo . "! call add(l, GetRuler())" + call assert_equal(['Xtestfile2 2L 2C'], l) + + " List with no valid error entries + let l = [] + edit! +2 Xtestfile1 + exe Xgetexpr . " ['non-error 1', 'non-error 2', 'non-error 3']" + exe XdoCmd + call assert_equal([], l) + exe "silent! 2" . XdoCmd + call assert_equal([], l) + let v:errmsg='' + exe "%" . XdoCmd + exe "1,$" . XdoCmd + exe "." . XdoCmd + call assert_equal('', v:errmsg) + + " List with only one valid entry + let l = [] + exe Xgetexpr . " ['Xtestfile3:3:1:Line3']" + exe XdoCmd + call assert_equal(['Xtestfile3 3L 1C'], l) + + endfunction + + " Tests for the :cfdo and :lfdo commands + function XfdoTests(cchar) + enew + + " Shortcuts for calling the cfdo and lfdo commands + let Xfdo = a:cchar . 'fdo' + let Xgetexpr = a:cchar . 'getexpr' + let XfdoCmd = Xfdo . ' call add(l, GetRuler())' + let Xpfile = a:cchar. 'pfile' + + " Clear the quickfix/location list + exe Xgetexpr . " []" + + " Try with an empty list + let l = [] + exe XfdoCmd + call assert_equal([], l) + + " Populate the list and then try + 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']" + + let l = [] + exe XfdoCmd + call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l) + + " Run command only on selected error lines + let l = [] + exe "2,3" . XfdoCmd + call assert_equal(['Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l) + + " Boundary condition tests + let l = [] + exe "3" . XfdoCmd + call assert_equal(['Xtestfile3 2L 3C'], l) + + " Range test commands + let l = [] + exe "%" . XfdoCmd + call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l) + + let l = [] + exe "1,$" . XfdoCmd + call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l) + + let l = [] + exe Xpfile + exe "." . XfdoCmd + call assert_equal(['Xtestfile2 2L 2C'], l) + + " List with only one valid entry + let l = [] + exe Xgetexpr . " ['Xtestfile2:2:5:Line2']" + exe XfdoCmd + call assert_equal(['Xtestfile2 2L 5C'], l) + + endfunction + + " Tests for cdo and cfdo + function Test_cdo() + call XdoTests('c') + call XfdoTests('c') + endfunction + + " Tests for ldo and lfdo + function Test_ldo() + call XdoTests('l') + call XfdoTests('l') + endfunction *** ../vim-7.4.979/src/version.c 2015-12-19 15:28:14.112228963 +0100 --- src/version.c 2015-12-28 13:56:48.765585829 +0100 *************** *** 743,744 **** --- 743,746 ---- { /* Add new patch number below this line */ + /**/ + 980, /**/ -- GUARD #1: Where'd you get the coconut? ARTHUR: We found them. GUARD #1: Found them? In Mercea? The coconut's tropical! ARTHUR: What do you mean? GUARD #1: Well, this is a temperate zone. The Quest for the Holy Grail (Monty Python) /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ an exciting new programming language -- http://www.Zimbu.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///