mirror of
https://github.com/neovim/neovim.git
synced 2024-12-26 14:11:15 -07:00
ff470bb853
It is otherwise impossible to determine which test failed sanitizer/valgrind check. test/functional/helpers.lua module return was changed so that tests which do not provide after_each function to get new check will automatically fail.
227 lines
6.4 KiB
Lua
227 lines
6.4 KiB
Lua
-- Tests for the :cdo, :cfdo, :ldo and :lfdo commands
|
|
|
|
local helpers = require('test.functional.helpers')(after_each)
|
|
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)
|