mirror of
https://github.com/neovim/neovim.git
synced 2025-10-04 17:06:30 +00:00
Merge pull request #3981 from watiko/vim-7.4.991
Vim 7.4.9{78,80,81,91}
This commit is contained in:
@@ -29,7 +29,6 @@ SCRIPTS := test_eval.out \
|
|||||||
test_charsearch.out \
|
test_charsearch.out \
|
||||||
test_close_count.out \
|
test_close_count.out \
|
||||||
test_command_count.out \
|
test_command_count.out \
|
||||||
test_cdo.out \
|
|
||||||
|
|
||||||
NEW_TESTS =
|
NEW_TESTS =
|
||||||
|
|
||||||
@@ -97,6 +96,7 @@ clean:
|
|||||||
*.rej \
|
*.rej \
|
||||||
*.orig \
|
*.orig \
|
||||||
test.log \
|
test.log \
|
||||||
|
messages \
|
||||||
$(RM_ON_RUN) \
|
$(RM_ON_RUN) \
|
||||||
$(RM_ON_START) \
|
$(RM_ON_START) \
|
||||||
valgrind.* \
|
valgrind.* \
|
||||||
@@ -149,7 +149,7 @@ test1.out: .gdbinit test1.in
|
|||||||
test49.out: test49.vim
|
test49.out: test49.vim
|
||||||
|
|
||||||
nolog:
|
nolog:
|
||||||
-rm -f test.log
|
-rm -f test.log messages
|
||||||
|
|
||||||
|
|
||||||
# New style of tests uses Vim script with assert calls. These are easier
|
# 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
|
newtests: newtestssilent
|
||||||
@/bin/sh -c "if test -f messages && grep -q 'FAILED' messages; then \
|
@/bin/sh -c "if test -f messages && grep -q 'FAILED' messages; then \
|
||||||
cat messages && cat test.log; \
|
cat messages && cat test.log; \
|
||||||
fi" \
|
fi"
|
||||||
|
|
||||||
newtestssilent: $(NEW_TESTS)
|
newtestssilent: $(NEW_TESTS)
|
||||||
|
|
||||||
%.res: %.vim .gdbinit
|
%.res: %.vim .gdbinit
|
||||||
$(RUN_VIMTEST) -u runtest.vim $*.vim
|
$(RUN_VIMTEST) -u NONE -S runtest.vim $*.vim
|
||||||
|
@@ -21,9 +21,7 @@
|
|||||||
" It will be called after each Test_ function.
|
" It will be called after each Test_ function.
|
||||||
|
|
||||||
" Without the +eval feature we can't run these tests, bail out.
|
" Without the +eval feature we can't run these tests, bail out.
|
||||||
if 0
|
so small.vim
|
||||||
quit!
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Check that the screen size is at least 24 x 80 characters.
|
" Check that the screen size is at least 24 x 80 characters.
|
||||||
if &lines < 24 || &columns < 80
|
if &lines < 24 || &columns < 80
|
||||||
@@ -38,7 +36,16 @@ endif
|
|||||||
" Source the test script. First grab the file name, in case the script
|
" Source the test script. First grab the file name, in case the script
|
||||||
" navigates away.
|
" navigates away.
|
||||||
let testname = expand('%')
|
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.
|
" Locate Test_ functions and execute them.
|
||||||
redir @q
|
redir @q
|
||||||
@@ -46,14 +53,12 @@ function /^Test_
|
|||||||
redir END
|
redir END
|
||||||
let tests = split(substitute(@q, 'function \(\k*()\)', '\1', 'g'))
|
let tests = split(substitute(@q, 'function \(\k*()\)', '\1', 'g'))
|
||||||
|
|
||||||
let done = 0
|
|
||||||
let fail = 0
|
|
||||||
let errors = []
|
|
||||||
for test in tests
|
for test in tests
|
||||||
if exists("*SetUp")
|
if exists("*SetUp")
|
||||||
call SetUp()
|
call SetUp()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call add(messages, 'Executing ' . test)
|
||||||
let done += 1
|
let done += 1
|
||||||
try
|
try
|
||||||
exe 'call ' . test
|
exe 'call ' . test
|
||||||
@@ -89,9 +94,20 @@ if len(errors) > 0
|
|||||||
write
|
write
|
||||||
endif
|
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
|
if fail > 0
|
||||||
echo fail . ' FAILED'
|
let message = fail . ' FAILED'
|
||||||
|
echo message
|
||||||
|
call add(messages, message)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Append messages to "messages"
|
||||||
|
split messages
|
||||||
|
call append(line('$'), '')
|
||||||
|
call append(line('$'), 'From ' . testname . ':')
|
||||||
|
call append(line('$'), messages)
|
||||||
|
write
|
||||||
|
|
||||||
qall!
|
qall!
|
||||||
|
@@ -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
|
|
||||||
|
|
@@ -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
|
|
||||||
|
|
@@ -133,7 +133,7 @@ static int included_patches[] = {
|
|||||||
// 994 NA
|
// 994 NA
|
||||||
// 993,
|
// 993,
|
||||||
// 992 NA
|
// 992 NA
|
||||||
// 991,
|
991,
|
||||||
// 990 NA
|
// 990 NA
|
||||||
989,
|
989,
|
||||||
// 988 NA
|
// 988 NA
|
||||||
@@ -143,10 +143,10 @@ static int included_patches[] = {
|
|||||||
// 984,
|
// 984,
|
||||||
// 983,
|
// 983,
|
||||||
// 982 NA
|
// 982 NA
|
||||||
// 981,
|
981,
|
||||||
// 980,
|
980,
|
||||||
// 979 NA
|
// 979 NA
|
||||||
// 978,
|
978,
|
||||||
// 977,
|
// 977,
|
||||||
// 976 NA
|
// 976 NA
|
||||||
975,
|
975,
|
||||||
|
226
test/functional/legacy/cdo_spec.lua
Normal file
226
test/functional/legacy/cdo_spec.lua
Normal file
@@ -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)
|
Reference in New Issue
Block a user