view src/testdir/test_cdo.in @ 7111:57c354f0115c v7.4.867

commit https://github.com/vim/vim/commit/9534680731ea342c2fed01a812559958923480da Author: Bram Moolenaar <Bram@vim.org> Date: Tue Sep 15 15:57:29 2015 +0200 patch 7.4.867 Problem: Can't build on MS-Windows. (Taro Muraoka) Solution: Adjust #ifdef.
author Christian Brabandt <cb@256bit.org>
date Tue, 15 Sep 2015 16:00:04 +0200
parents 64e30831fa42
children e88aee1842ba
line wrap: on
line source

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