changeset 7350:5ac8ee7bf4ff v7.4.980

commit https://github.com/vim/vim/commit/57d7971b5f1621071176eea81cdb0d1fc50c925d Author: Bram Moolenaar <Bram@vim.org> Date: Mon Dec 28 14:04:47 2015 +0100 patch 7.4.980 Problem: Tests for :cdo, :ldo, etc. are outdated. Solution: Add new style tests for these commands. (Yegappan Lakshmanan)
author Christian Brabandt <cb@256bit.org>
date Mon, 28 Dec 2015 14:15:04 +0100
parents f2709b360452
children bd4f7190716f
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 src/version.c
diffstat 10 files changed, 210 insertions(+), 182 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -41,7 +41,6 @@ SCRIPTS = test1.out test3.out test4.out 
 		test_autocmd_option.out \
 		test_autoformat_join.out \
 		test_breakindent.out \
-		test_cdo.out \
 		test_changelist.out \
 		test_charsearch.out \
 		test_close_count.out \
@@ -197,7 +196,6 @@ test_argument_count.out: test_argument_c
 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
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -40,7 +40,6 @@ SCRIPTS =	test3.out test4.out test5.out 
 		test_autocmd_option.out \
 		test_autoformat_join.out \
 		test_breakindent.out \
-		test_cdo.out \
 		test_changelist.out \
 		test_charsearch.out \
 		test_close_count.out \
--- a/src/testdir/Make_ming.mak
+++ b/src/testdir/Make_ming.mak
@@ -62,7 +62,6 @@ SCRIPTS =	test3.out test4.out test5.out 
 		test_autocmd_option.out \
 		test_autoformat_join.out \
 		test_breakindent.out \
-		test_cdo.out \
 		test_changelist.out \
 		test_charsearch.out \
 		test_close_count.out \
--- a/src/testdir/Make_os2.mak
+++ b/src/testdir/Make_os2.mak
@@ -42,7 +42,6 @@ SCRIPTS = test1.out test3.out test4.out 
 		test_autocmd_option.out \
 		test_autoformat_join.out \
 		test_breakindent.out \
-		test_cdo.out \
 		test_changelist.out \
 		test_charsearch.out \
 		test_close_count.out \
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -101,7 +101,6 @@ SCRIPT = test1.out  test2.out  test3.out
 	 test_autocmd_option.out \
 	 test_autoformat_join.out \
 	 test_breakindent.out \
-	 test_cdo.out \
 	 test_changelist.out \
 	 test_charsearch.out \
 	 test_close_count.out \
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -41,7 +41,6 @@ SCRIPTS = test1.out test2.out test3.out 
 		test_autocmd_option.out \
 		test_autoformat_join.out \
 		test_breakindent.out \
-		test_cdo.out \
 		test_changelist.out \
 		test_charsearch.out \
 		test_close_count.out \
@@ -72,6 +71,7 @@ SCRIPTS = test1.out test2.out test3.out 
 		test_writefile.out
 
 NEW_TESTS = test_assert.res \
+	    test_cdo.res \
 	    test_alot.res
 
 SCRIPTS_GUI = test16.out
@@ -173,4 +173,4 @@ RUN_VIMTEST = VIMRUNTIME=$(SCRIPTSOURCE)
 newtests: $(NEW_TESTS)
 
 .vim.res:
-	$(RUN_VIMTEST) -u runtest.vim $*.vim
+	$(RUN_VIMTEST) -S runtest.vim $*.vim
deleted file mode 100644
--- a/src/testdir/test_cdo.in
+++ /dev/null
@@ -1,108 +0,0 @@
-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
-
deleted file mode 100644
--- a/src/testdir/test_cdo.ok
+++ /dev/null
@@ -1,66 +0,0 @@
-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
-
new file mode 100644
--- /dev/null
+++ b/src/testdir/test_cdo.vim
@@ -0,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 '<filename> <linenum>L <column>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
--- a/src/version.c
+++ b/src/version.c
@@ -742,6 +742,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    980,
+/**/
     979,
 /**/
     978,