xref: /vim-8.2.3635/src/testdir/test_cdo.vim (revision 14798ab9)
157d7971bSBram Moolenaar" Tests for the :cdo, :cfdo, :ldo and :lfdo commands
257d7971bSBram Moolenaar
38c5a278fSBram Moolenaarsource check.vim
48c5a278fSBram MoolenaarCheckFeature quickfix
557d7971bSBram Moolenaar
657d7971bSBram Moolenaar" Create the files used by the tests
7bfe13cccSBram Moolenaarfunc SetUp()
857d7971bSBram Moolenaar  call writefile(["Line1", "Line2", "Line3"], 'Xtestfile1')
957d7971bSBram Moolenaar  call writefile(["Line1", "Line2", "Line3"], 'Xtestfile2')
1057d7971bSBram Moolenaar  call writefile(["Line1", "Line2", "Line3"], 'Xtestfile3')
11*14798ab9SBram Moolenaarendfunc
1257d7971bSBram Moolenaar
1357d7971bSBram Moolenaar" Remove the files used by the tests
14*14798ab9SBram Moolenaarfunc TearDown()
1557d7971bSBram Moolenaar  call delete('Xtestfile1')
1657d7971bSBram Moolenaar  call delete('Xtestfile2')
1757d7971bSBram Moolenaar  call delete('Xtestfile3')
18*14798ab9SBram Moolenaarendfunc
1957d7971bSBram Moolenaar
2057d7971bSBram Moolenaar" Returns the current line in '<filename> <linenum>L <column>C' format
21*14798ab9SBram Moolenaarfunc GetRuler()
2257d7971bSBram Moolenaar  return expand('%') . ' ' . line('.') . 'L' . ' ' . col('.') . 'C'
23*14798ab9SBram Moolenaarendfunc
2457d7971bSBram Moolenaar
2557d7971bSBram Moolenaar" Tests for the :cdo and :ldo commands
26*14798ab9SBram Moolenaarfunc XdoTests(cchar)
2757d7971bSBram Moolenaar  enew
2857d7971bSBram Moolenaar
2957d7971bSBram Moolenaar  " Shortcuts for calling the cdo and ldo commands
3057d7971bSBram Moolenaar  let Xdo = a:cchar . 'do'
3157d7971bSBram Moolenaar  let Xgetexpr = a:cchar . 'getexpr'
3257d7971bSBram Moolenaar  let Xprev = a:cchar. 'prev'
3357d7971bSBram Moolenaar  let XdoCmd = Xdo . ' call add(l, GetRuler())'
3457d7971bSBram Moolenaar
3557d7971bSBram Moolenaar  " Try with an empty list
3657d7971bSBram Moolenaar  let l = []
3757d7971bSBram Moolenaar  exe XdoCmd
3857d7971bSBram Moolenaar  call assert_equal([], l)
3957d7971bSBram Moolenaar
4057d7971bSBram Moolenaar  " Populate the list and then try
4157d7971bSBram Moolenaar  exe Xgetexpr . " ['non-error 1', 'Xtestfile1:1:3:Line1', 'non-error 2', 'Xtestfile2:2:2:Line2', 'non-error 3', 'Xtestfile3:3:1:Line3']"
4257d7971bSBram Moolenaar
4357d7971bSBram Moolenaar  let l = []
4457d7971bSBram Moolenaar  exe XdoCmd
4557d7971bSBram Moolenaar  call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l)
4657d7971bSBram Moolenaar
4757d7971bSBram Moolenaar  " Run command only on selected error lines
4857d7971bSBram Moolenaar  let l = []
4957d7971bSBram Moolenaar  enew
5057d7971bSBram Moolenaar  exe "2,3" . XdoCmd
5157d7971bSBram Moolenaar  call assert_equal(['Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l)
5257d7971bSBram Moolenaar
5357d7971bSBram Moolenaar  " Boundary condition tests
5457d7971bSBram Moolenaar  let l = []
5557d7971bSBram Moolenaar  enew
5657d7971bSBram Moolenaar  exe "1,1" . XdoCmd
5757d7971bSBram Moolenaar  call assert_equal(['Xtestfile1 1L 3C'], l)
5857d7971bSBram Moolenaar
5957d7971bSBram Moolenaar  let l = []
6057d7971bSBram Moolenaar  enew
6157d7971bSBram Moolenaar  exe "3" . XdoCmd
6257d7971bSBram Moolenaar  call assert_equal(['Xtestfile3 3L 1C'], l)
6357d7971bSBram Moolenaar
6457d7971bSBram Moolenaar  " Range test commands
6557d7971bSBram Moolenaar  let l = []
6657d7971bSBram Moolenaar  enew
6757d7971bSBram Moolenaar  exe "%" . XdoCmd
6857d7971bSBram Moolenaar  call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l)
6957d7971bSBram Moolenaar
7057d7971bSBram Moolenaar  let l = []
7157d7971bSBram Moolenaar  enew
7257d7971bSBram Moolenaar  exe "1,$" . XdoCmd
7357d7971bSBram Moolenaar  call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 3L 1C'], l)
7457d7971bSBram Moolenaar
7557d7971bSBram Moolenaar  let l = []
7657d7971bSBram Moolenaar  enew
7757d7971bSBram Moolenaar  exe Xprev
7857d7971bSBram Moolenaar  exe "." . XdoCmd
7957d7971bSBram Moolenaar  call assert_equal(['Xtestfile2 2L 2C'], l)
8057d7971bSBram Moolenaar
8157d7971bSBram Moolenaar  let l = []
8257d7971bSBram Moolenaar  enew
8357d7971bSBram Moolenaar  exe "+" . XdoCmd
8457d7971bSBram Moolenaar  call assert_equal(['Xtestfile3 3L 1C'], l)
8557d7971bSBram Moolenaar
8657d7971bSBram Moolenaar  " Invalid error lines test
8757d7971bSBram Moolenaar  let l = []
8857d7971bSBram Moolenaar  enew
8957d7971bSBram Moolenaar  exe "silent! 27" . XdoCmd
9057d7971bSBram Moolenaar  exe "silent! 4,5" . XdoCmd
9157d7971bSBram Moolenaar  call assert_equal([], l)
9257d7971bSBram Moolenaar
9357d7971bSBram Moolenaar  " Run commands from an unsaved buffer
9457d7971bSBram Moolenaar  let v:errmsg=''
9557d7971bSBram Moolenaar  let l = []
9657d7971bSBram Moolenaar  enew
9757d7971bSBram Moolenaar  setlocal modified
9857d7971bSBram Moolenaar  exe "silent! 2,2" . XdoCmd
9957d7971bSBram Moolenaar  if v:errmsg !~# 'No write since last change'
10057d7971bSBram Moolenaar    call add(v:errors, 'Unsaved file change test failed')
10157d7971bSBram Moolenaar  endif
10257d7971bSBram Moolenaar
10357d7971bSBram Moolenaar  " If the executed command fails, then the operation should be aborted
10457d7971bSBram Moolenaar  enew!
10557d7971bSBram Moolenaar  let subst_count = 0
10657d7971bSBram Moolenaar  exe "silent!" . Xdo . " s/Line/xLine/ | let subst_count += 1"
10757d7971bSBram Moolenaar  if subst_count != 1 || getline('.') != 'xLine1'
10857d7971bSBram Moolenaar    call add(v:errors, 'Abort command on error test failed')
10957d7971bSBram Moolenaar  endif
11057d7971bSBram Moolenaar
11157d7971bSBram Moolenaar  let l = []
11257d7971bSBram Moolenaar  exe "2,2" . Xdo . "! call add(l, GetRuler())"
11357d7971bSBram Moolenaar  call assert_equal(['Xtestfile2 2L 2C'], l)
11457d7971bSBram Moolenaar
11557d7971bSBram Moolenaar  " List with no valid error entries
11657d7971bSBram Moolenaar  let l = []
11757d7971bSBram Moolenaar  edit! +2 Xtestfile1
11857d7971bSBram Moolenaar  exe Xgetexpr . " ['non-error 1', 'non-error 2', 'non-error 3']"
11957d7971bSBram Moolenaar  exe XdoCmd
12057d7971bSBram Moolenaar  call assert_equal([], l)
12157d7971bSBram Moolenaar  exe "silent! 2" . XdoCmd
12257d7971bSBram Moolenaar  call assert_equal([], l)
12357d7971bSBram Moolenaar  let v:errmsg=''
12457d7971bSBram Moolenaar  exe "%" . XdoCmd
12557d7971bSBram Moolenaar  exe "1,$" . XdoCmd
12657d7971bSBram Moolenaar  exe "." . XdoCmd
12757d7971bSBram Moolenaar  call assert_equal('', v:errmsg)
12857d7971bSBram Moolenaar
12957d7971bSBram Moolenaar  " List with only one valid entry
13057d7971bSBram Moolenaar  let l = []
13157d7971bSBram Moolenaar  exe Xgetexpr . " ['Xtestfile3:3:1:Line3']"
13257d7971bSBram Moolenaar  exe XdoCmd
13357d7971bSBram Moolenaar  call assert_equal(['Xtestfile3 3L 1C'], l)
13457d7971bSBram Moolenaar
135*14798ab9SBram Moolenaarendfunc
13657d7971bSBram Moolenaar
13757d7971bSBram Moolenaar" Tests for the :cfdo and :lfdo commands
138*14798ab9SBram Moolenaarfunc XfdoTests(cchar)
13957d7971bSBram Moolenaar  enew
14057d7971bSBram Moolenaar
14157d7971bSBram Moolenaar  " Shortcuts for calling the cfdo and lfdo commands
14257d7971bSBram Moolenaar  let Xfdo = a:cchar . 'fdo'
14357d7971bSBram Moolenaar  let Xgetexpr = a:cchar . 'getexpr'
14457d7971bSBram Moolenaar  let XfdoCmd = Xfdo . ' call add(l, GetRuler())'
14557d7971bSBram Moolenaar  let Xpfile = a:cchar. 'pfile'
14657d7971bSBram Moolenaar
14757d7971bSBram Moolenaar  " Clear the quickfix/location list
14857d7971bSBram Moolenaar  exe Xgetexpr . " []"
14957d7971bSBram Moolenaar
15057d7971bSBram Moolenaar  " Try with an empty list
15157d7971bSBram Moolenaar  let l = []
15257d7971bSBram Moolenaar  exe XfdoCmd
15357d7971bSBram Moolenaar  call assert_equal([], l)
15457d7971bSBram Moolenaar
15557d7971bSBram Moolenaar  " Populate the list and then try
15657d7971bSBram Moolenaar  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']"
15757d7971bSBram Moolenaar
15857d7971bSBram Moolenaar  let l = []
15957d7971bSBram Moolenaar  exe XfdoCmd
16057d7971bSBram Moolenaar  call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l)
16157d7971bSBram Moolenaar
16257d7971bSBram Moolenaar  " Run command only on selected error lines
16357d7971bSBram Moolenaar  let l = []
16457d7971bSBram Moolenaar  exe "2,3" . XfdoCmd
16557d7971bSBram Moolenaar  call assert_equal(['Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l)
16657d7971bSBram Moolenaar
16757d7971bSBram Moolenaar  " Boundary condition tests
16857d7971bSBram Moolenaar  let l = []
16957d7971bSBram Moolenaar  exe "3" . XfdoCmd
17057d7971bSBram Moolenaar  call assert_equal(['Xtestfile3 2L 3C'], l)
17157d7971bSBram Moolenaar
17257d7971bSBram Moolenaar  " Range test commands
17357d7971bSBram Moolenaar  let l = []
17457d7971bSBram Moolenaar  exe "%" . XfdoCmd
17557d7971bSBram Moolenaar  call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l)
17657d7971bSBram Moolenaar
17757d7971bSBram Moolenaar  let l = []
17857d7971bSBram Moolenaar  exe "1,$" . XfdoCmd
17957d7971bSBram Moolenaar  call assert_equal(['Xtestfile1 1L 3C', 'Xtestfile2 2L 2C', 'Xtestfile3 2L 3C'], l)
18057d7971bSBram Moolenaar
18157d7971bSBram Moolenaar  let l = []
18257d7971bSBram Moolenaar  exe Xpfile
18357d7971bSBram Moolenaar  exe "." . XfdoCmd
18457d7971bSBram Moolenaar  call assert_equal(['Xtestfile2 2L 2C'], l)
18557d7971bSBram Moolenaar
18657d7971bSBram Moolenaar  " List with only one valid entry
18757d7971bSBram Moolenaar  let l = []
18857d7971bSBram Moolenaar  exe Xgetexpr . " ['Xtestfile2:2:5:Line2']"
18957d7971bSBram Moolenaar  exe XfdoCmd
19057d7971bSBram Moolenaar  call assert_equal(['Xtestfile2 2L 5C'], l)
19157d7971bSBram Moolenaar
192*14798ab9SBram Moolenaarendfunc
19357d7971bSBram Moolenaar
19457d7971bSBram Moolenaar" Tests for cdo and cfdo
195*14798ab9SBram Moolenaarfunc Test_cdo()
19657d7971bSBram Moolenaar  call XdoTests('c')
19757d7971bSBram Moolenaar  call XfdoTests('c')
198*14798ab9SBram Moolenaarendfunc
19957d7971bSBram Moolenaar
20057d7971bSBram Moolenaar" Tests for ldo and lfdo
201*14798ab9SBram Moolenaarfunc Test_ldo()
20257d7971bSBram Moolenaar  call XdoTests('l')
20357d7971bSBram Moolenaar  call XfdoTests('l')
204*14798ab9SBram Moolenaarendfunc
205*14798ab9SBram Moolenaar
206*14798ab9SBram Moolenaar" Test for making 'shm' doesn't interfere with the output.
207*14798ab9SBram Moolenaarfunc Test_cdo_print()
208*14798ab9SBram Moolenaar  enew | only!
209*14798ab9SBram Moolenaar  cgetexpr ["Xtestfile1:1:Line1", "Xtestfile2:1:Line1", "Xtestfile3:1:Line1"]
210*14798ab9SBram Moolenaar  cdo print
211*14798ab9SBram Moolenaar  call assert_equal('Line1', Screenline(&lines))
212*14798ab9SBram Moolenaar  call assert_equal('Line1', Screenline(&lines - 3))
213*14798ab9SBram Moolenaar  call assert_equal('Line1', Screenline(&lines - 6))
214*14798ab9SBram Moolenaarendfunc
215*14798ab9SBram Moolenaar
216*14798ab9SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
217