summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2015-12-28 14:04:47 +0100
committerBram Moolenaar <Bram@vim.org>2015-12-28 14:04:47 +0100
commit57d7971b5f1621071176eea81cdb0d1fc50c925d (patch)
tree62bacd1dbe901df3d3d34981e181fed39b4bf0b2
parent4a8c2cfc56b9affc36934aa0f20d8cfd2b1511c8 (diff)
downloadvim-git-57d7971b5f1621071176eea81cdb0d1fc50c925d.tar.gz
patch 7.4.980v7.4.980
Problem: Tests for :cdo, :ldo, etc. are outdated. Solution: Add new style tests for these commands. (Yegappan Lakshmanan)
-rw-r--r--src/testdir/Make_amiga.mak2
-rw-r--r--src/testdir/Make_dos.mak1
-rw-r--r--src/testdir/Make_ming.mak1
-rw-r--r--src/testdir/Make_os2.mak1
-rw-r--r--src/testdir/Make_vms.mms1
-rw-r--r--src/testdir/Makefile4
-rw-r--r--src/testdir/test_cdo.in108
-rw-r--r--src/testdir/test_cdo.ok66
-rw-r--r--src/testdir/test_cdo.vim206
-rw-r--r--src/version.c2
10 files changed, 210 insertions, 182 deletions
diff --git a/src/testdir/Make_amiga.mak b/src/testdir/Make_amiga.mak
index d60f1a1bb..250209b59 100644
--- a/src/testdir/Make_amiga.mak
+++ b/src/testdir/Make_amiga.mak
@@ -41,7 +41,6 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.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_count.in
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
diff --git a/src/testdir/Make_dos.mak b/src/testdir/Make_dos.mak
index 8dbe97e2f..5b16874a1 100644
--- a/src/testdir/Make_dos.mak
+++ b/src/testdir/Make_dos.mak
@@ -40,7 +40,6 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.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 \
diff --git a/src/testdir/Make_ming.mak b/src/testdir/Make_ming.mak
index a7c98ee8d..fc9bd93d7 100644
--- a/src/testdir/Make_ming.mak
+++ b/src/testdir/Make_ming.mak
@@ -62,7 +62,6 @@ SCRIPTS = test3.out test4.out test5.out test6.out test7.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 \
diff --git a/src/testdir/Make_os2.mak b/src/testdir/Make_os2.mak
index 926411b64..8ba54f218 100644
--- a/src/testdir/Make_os2.mak
+++ b/src/testdir/Make_os2.mak
@@ -42,7 +42,6 @@ SCRIPTS = test1.out test3.out test4.out test5.out test6.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 \
diff --git a/src/testdir/Make_vms.mms b/src/testdir/Make_vms.mms
index 990ae5f57..70ba14876 100644
--- a/src/testdir/Make_vms.mms
+++ b/src/testdir/Make_vms.mms
@@ -101,7 +101,6 @@ SCRIPT = test1.out test2.out 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 \
diff --git a/src/testdir/Makefile b/src/testdir/Makefile
index 83350aa63..cb0ec4596 100644
--- a/src/testdir/Makefile
+++ b/src/testdir/Makefile
@@ -41,7 +41,6 @@ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.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 test4.out test5.out test6.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); export VIMRUNTIME; $(VALGRIND) $(VIMPR
newtests: $(NEW_TESTS)
.vim.res:
- $(RUN_VIMTEST) -u runtest.vim $*.vim
+ $(RUN_VIMTEST) -S runtest.vim $*.vim
diff --git a/src/testdir/test_cdo.in b/src/testdir/test_cdo.in
deleted file mode 100644
index 087cd2ea9..000000000
--- 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
-
diff --git a/src/testdir/test_cdo.ok b/src/testdir/test_cdo.ok
deleted file mode 100644
index ddcff4bbb..000000000
--- 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
-
diff --git a/src/testdir/test_cdo.vim b/src/testdir/test_cdo.vim
new file mode 100644
index 000000000..10cd97c31
--- /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
diff --git a/src/version.c b/src/version.c
index f949e6427..262876e2b 100644
--- 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,