aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2016-01-17 22:51:06 -0500
committerJustin M. Keyes <justinkz@gmail.com>2016-01-17 22:51:06 -0500
commit1a958345e29fd72865c2eb0fc8db7f2f1919834b (patch)
tree752bfd326c3f76546e28783553a77b5438c256f0
parent5f33f581a75fde1c6422943d705c607c07f50a6b (diff)
parent6f88dca92d24d91414a43f7e765e02abd89d779d (diff)
downloadrneovim-1a958345e29fd72865c2eb0fc8db7f2f1919834b.tar.gz
rneovim-1a958345e29fd72865c2eb0fc8db7f2f1919834b.tar.bz2
rneovim-1a958345e29fd72865c2eb0fc8db7f2f1919834b.zip
Merge pull request #3981 from watiko/vim-7.4.991
Vim 7.4.9{78,80,81,91}
-rw-r--r--src/nvim/testdir/Makefile8
-rw-r--r--src/nvim/testdir/runtest.vim34
-rw-r--r--src/nvim/testdir/test_cdo.in107
-rw-r--r--src/nvim/testdir/test_cdo.ok66
-rw-r--r--src/nvim/version.c8
-rw-r--r--test/functional/legacy/cdo_spec.lua226
6 files changed, 259 insertions, 190 deletions
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index b4292dbd4b..bc245b21f4 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -29,7 +29,6 @@ SCRIPTS := test_eval.out \
test_charsearch.out \
test_close_count.out \
test_command_count.out \
- test_cdo.out \
NEW_TESTS =
@@ -97,6 +96,7 @@ clean:
*.rej \
*.orig \
test.log \
+ messages \
$(RM_ON_RUN) \
$(RM_ON_START) \
valgrind.* \
@@ -149,7 +149,7 @@ test1.out: .gdbinit test1.in
test49.out: test49.vim
nolog:
- -rm -f test.log
+ -rm -f test.log messages
# New style of tests uses Vim script with assert calls. These are easier
@@ -160,9 +160,9 @@ RUN_VIMTEST = VIMRUNTIME=$(SCRIPTSOURCE); export VIMRUNTIME; $(VALGRIND) $(VIMPR
newtests: newtestssilent
@/bin/sh -c "if test -f messages && grep -q 'FAILED' messages; then \
cat messages && cat test.log; \
- fi" \
+ fi"
newtestssilent: $(NEW_TESTS)
%.res: %.vim .gdbinit
- $(RUN_VIMTEST) -u runtest.vim $*.vim
+ $(RUN_VIMTEST) -u NONE -S runtest.vim $*.vim
diff --git a/src/nvim/testdir/runtest.vim b/src/nvim/testdir/runtest.vim
index 0dc142eb97..8314a45d0c 100644
--- a/src/nvim/testdir/runtest.vim
+++ b/src/nvim/testdir/runtest.vim
@@ -21,9 +21,7 @@
" It will be called after each Test_ function.
" Without the +eval feature we can't run these tests, bail out.
-if 0
- quit!
-endif
+so small.vim
" Check that the screen size is at least 24 x 80 characters.
if &lines < 24 || &columns < 80
@@ -38,7 +36,16 @@ endif
" Source the test script. First grab the file name, in case the script
" navigates away.
let testname = expand('%')
-source %
+let done = 0
+let fail = 0
+let errors = []
+let messages = []
+try
+ source %
+catch
+ let fail += 1
+ call add(errors, 'Caught exception: ' . v:exception . ' @ ' . v:throwpoint)
+endtry
" Locate Test_ functions and execute them.
redir @q
@@ -46,14 +53,12 @@ function /^Test_
redir END
let tests = split(substitute(@q, 'function \(\k*()\)', '\1', 'g'))
-let done = 0
-let fail = 0
-let errors = []
for test in tests
if exists("*SetUp")
call SetUp()
endif
+ call add(messages, 'Executing ' . test)
let done += 1
try
exe 'call ' . test
@@ -89,9 +94,20 @@ if len(errors) > 0
write
endif
-echo 'Executed ' . done . (done > 1 ? ' tests': ' test')
+let message = 'Executed ' . done . (done > 1 ? ' tests': ' test')
+echo message
+call add(messages, message)
if fail > 0
- echo fail . ' FAILED'
+ let message = fail . ' FAILED'
+ echo message
+ call add(messages, message)
endif
+" Append messages to "messages"
+split messages
+call append(line('$'), '')
+call append(line('$'), 'From ' . testname . ':')
+call append(line('$'), messages)
+write
+
qall!
diff --git a/src/nvim/testdir/test_cdo.in b/src/nvim/testdir/test_cdo.in
deleted file mode 100644
index fb80ea1164..0000000000
--- a/src/nvim/testdir/test_cdo.in
+++ /dev/null
@@ -1,107 +0,0 @@
-Tests for the :cdo, :cfdo, :ldo and :lfdo commands
-
-STARTTEST
-:so small.vim
-: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/nvim/testdir/test_cdo.ok b/src/nvim/testdir/test_cdo.ok
deleted file mode 100644
index ddcff4bbb8..0000000000
--- a/src/nvim/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/nvim/version.c b/src/nvim/version.c
index 1d98afaaa1..8c9faac0c3 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -133,7 +133,7 @@ static int included_patches[] = {
// 994 NA
// 993,
// 992 NA
- // 991,
+ 991,
// 990 NA
989,
// 988 NA
@@ -143,10 +143,10 @@ static int included_patches[] = {
// 984,
// 983,
// 982 NA
- // 981,
- // 980,
+ 981,
+ 980,
// 979 NA
- // 978,
+ 978,
// 977,
// 976 NA
975,
diff --git a/test/functional/legacy/cdo_spec.lua b/test/functional/legacy/cdo_spec.lua
new file mode 100644
index 0000000000..4b313ede3f
--- /dev/null
+++ b/test/functional/legacy/cdo_spec.lua
@@ -0,0 +1,226 @@
+-- Tests for the :cdo, :cfdo, :ldo and :lfdo commands
+
+local helpers = require('test.functional.helpers')
+local nvim, clear = helpers.meths, helpers.clear
+local call, feed = helpers.call, helpers.feed
+local source, eq = helpers.source, helpers.eq
+
+local function expected_empty()
+ eq({}, nvim.get_vvar('errors'))
+end
+
+describe('cdo', function()
+ before_each(function()
+ clear()
+
+ call('writefile', {'Line1', 'Line2', 'Line3'}, 'Xtestfile1')
+ call('writefile', {'Line1', 'Line2', 'Line3'}, 'Xtestfile2')
+ call('writefile', {'Line1', 'Line2', 'Line3'}, 'Xtestfile3')
+
+ source([=[
+ " 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
+ ]=])
+ end)
+
+ after_each(function()
+ os.remove('Xtestfile1')
+ os.remove('Xtestfile2')
+ os.remove('Xtestfile3')
+ end)
+
+ it('works for :cdo', function()
+ -- call('XdoTests', 'c')
+ feed(":call XdoTests('c')<CR><C-l>")
+ expected_empty()
+ end)
+
+ it('works for :cfdo', function()
+ -- call('XfdoTests', 'c')
+ feed(":call XfdoTests('c')<CR><C-l>")
+ expected_empty()
+ end)
+
+ it('works for :ldo', function()
+ -- call('XdoTests', 'l')
+ feed(":call XdoTests('l')<CR><C-l>")
+ expected_empty()
+ end)
+
+ it('works for :lfdo', function()
+ -- call('XfdoTests', 'l')
+ feed(":call XfdoTests('l')<CR><C-l>")
+ expected_empty()
+ end)
+end)