tests: Migrate legacy test 94 #2218

This commit is contained in:
David Bürgin 2015-03-22 00:47:39 +01:00 committed by Justin M. Keyes
parent c56c035576
commit d2d99454e6
4 changed files with 154 additions and 115 deletions

View File

@ -27,7 +27,7 @@ SCRIPTS := test_autoformat_join.out \
test76.out test78.out test79.out test80.out \ test76.out test78.out test79.out test80.out \
test82.out test83.out test85.out \ test82.out test83.out test85.out \
test86.out test87.out test88.out \ test86.out test87.out test88.out \
test92.out test93.out test94.out \ test92.out test93.out \
test96.out test99.out \ test96.out test99.out \
test_listlbr.out \ test_listlbr.out \
test_breakindent.out test_breakindent.out

View File

@ -1,94 +0,0 @@
Test for Visual mode and operators
Tests for the two kinds of operations: Those executed with Visual mode
followed by an operator and those executed via Operator-pending mode. Also
part of the test are mappings, counts, and repetition with the . command.
Test cases:
- Visual modes (v V CTRL-V) followed by an operator; count; repeating
- Visual mode maps; count; repeating
- Simple
- With an Ex command (custom text object)
- Operator-pending mode maps
- Simple
- With Ex command moving the cursor
- With Ex command and Visual selection (custom text object)
- Patch 7.3.879: Properly abort Ex command in Operator-pending mode
STARTTEST
:so small.vim
:
:" User functions
:function MoveToCap()
: call search('\u', 'W')
:endfunction
:function SelectInCaps()
: let [line1, col1] = searchpos('\u', 'bcnW')
: let [line2, col2] = searchpos('.\u', 'nW')
: call setpos("'<", [0, line1, col1, 0])
: call setpos("'>", [0, line2, col2, 0])
: normal! gv
:endfunction
:
:" Visual modes followed by operator
/^apple
lvld.l3vd.:
/^line 1
Vcnewlinej.j2Vd.:
/^xxxx
jlc l.l2c----l.:
:
:" Visual mode maps (movement and text object)
:vnoremap W /\u/s-1<CR>
:vnoremap iW :<C-U>call SelectInCaps()<CR>
/^Kiwi
vWcNol.fD2vd.:
/^Jambu
llviWc-l.l2vdl.:
:
:" Operator-pending mode maps (movement and text object)
:onoremap W /\u/<CR>
:onoremap <Leader>W :<C-U>call MoveToCap()<CR>
:onoremap iW :<C-U>call SelectInCaps()<CR>
/^Pineapple
cW-l.l2.l.:
/^Juniper
g?\WfD.:
/^Lemon
yiWPlciWNewfr.:
:
:" Patch 7.3.879: Properly abort Operator-pending mode for "dv:<Esc>" etc.
/^zzzz
dV: dv: :set noma | let v:errmsg = ''
d: :set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed'
dv:dV::set noma | let v:errmsg = ''
d::set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok'
:/^start:/+2,$w! test.out
:q!
ENDTEST
start:
apple banana cherry
line 1 line 1
line 2 line 2
line 3 line 3
line 4 line 4
line 5 line 5
line 6 line 6
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
KiwiRaspberryDateWatermelonPeach
JambuRambutanBananaTangerineMango
PineappleQuinceLoganberryOrangeGrapefruitKiwiZ
JuniperDurianZ
LemonNectarineZ
zzzz
zzzz

View File

@ -1,20 +0,0 @@
a y
newline
newline
--------x
--------x
xxxx--------x
xxxx--------x
NoNoberryach
--ago
----Z
WhavcreQhevnaZ
LemonNewNewZ
zzz
ok
ok

View File

@ -0,0 +1,153 @@
-- Test for Visual mode and operators.
--
-- Tests for the two kinds of operations: Those executed with Visual mode
-- followed by an operator and those executed via Operator-pending mode. Also
-- part of the test are mappings, counts, and repetition with the . command.
local helpers = require('test.functional.helpers')
local feed, insert, source = helpers.feed, helpers.insert, helpers.source
local clear, execute, expect = helpers.clear, helpers.execute, helpers.expect
-- Vim script user functions needed for some of the test cases.
local function source_user_functions()
source([[
function MoveToCap()
call search('\u', 'W')
endfunction
function SelectInCaps()
let [line1, col1] = searchpos('\u', 'bcnW')
let [line2, col2] = searchpos('.\u', 'nW')
call setpos("'<", [0, line1, col1, 0])
call setpos("'>", [0, line2, col2, 0])
normal! gv
endfunction
]])
end
describe('Visual mode and operator', function()
before_each(function()
clear()
source_user_functions()
end)
it('simple change in Visual mode', function()
insert([[
apple banana cherry
line 1 line 1
line 2 line 2
line 3 line 3
line 4 line 4
line 5 line 5
line 6 line 6
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxx]])
-- Exercise characterwise Visual mode plus operator, with count and repeat.
execute('/^apple')
feed('lvld.l3vd.')
-- Same in linewise Visual mode.
execute('/^line 1')
feed('Vcnewline<esc>j.j2Vd.')
-- Same in blockwise Visual mode.
execute('/^xxxx')
feed('<c-v>jlc <esc>l.l2<c-v>c----<esc>l.')
-- Assert buffer contents.
expect([[
a y
newline
newline
--------x
--------x
xxxx--------x
xxxx--------x]])
end)
it('Visual mode mapping', function()
insert([[
KiwiRaspberryDateWatermelonPeach
JambuRambutanBananaTangerineMango]])
-- Set up Visual mode mappings.
execute('vnoremap W /\\u/s-1<CR>')
execute('vnoremap iW :<C-U>call SelectInCaps()<CR>')
-- Do a simple change using the simple vmap, also with count and repeat.
execute('/^Kiwi')
feed('vWcNo<esc>l.fD2vd.')
-- Same, using the vmap that maps to an Ex command.
execute('/^Jambu')
feed('llviWc-<esc>l.l2vdl.')
-- Assert buffer contents.
expect([[
NoNoberryach
--ago]])
end)
it('Operator-pending mode mapping', function()
insert([[
PineappleQuinceLoganberryOrangeGrapefruitKiwiZ
JuniperDurianZ
LemonNectarineZ]])
-- Set up Operator-pending mode mappings.
execute('onoremap W /\\u/<CR>')
execute('onoremap <Leader>W :<C-U>call MoveToCap()<CR>')
execute('onoremap iW :<C-U>call SelectInCaps()<CR>')
-- Do a simple change using the simple omap, also with count and repeat.
execute('/^Pineapple')
feed('cW-<esc>l.l2.l.')
-- Same, using the omap that maps to an Ex command to move the cursor.
execute('/^Juniper')
feed('g?\\WfD.')
-- Same, using the omap that uses Ex and Visual mode (custom text object).
execute('/^Lemon')
feed('yiWPlciWNew<esc>fr.')
-- Assert buffer contents.
expect([[
----Z
WhavcreQhevnaZ
LemonNewNewZ]])
end)
-- Vim patch 7.3.879 addressed a bug where typing ":" (the start of an Ex
-- command) in Operator-pending mode couldn't be aborted with Escape, the
-- change operation implied by the operator was always executed.
it('patch 7.3.879', function()
insert([[
zzzz
zzzz]])
-- Start a change operation consisting of operator plus Ex command, like
-- "dV:..." etc., then either
-- - complete the operation by pressing Enter: as a result the buffer is
-- changed, taking into account the v/V/<c-v> modifier given; or
-- - abort the operation by pressing Escape: no change to the buffer is
-- carried out.
execute('/^zzzz')
feed([[dV:<cr>dv:<cr>:set noma | let v:errmsg = ''<cr>]])
feed([[d:<cr>:set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed'<cr>]])
feed([[dv:<esc>dV:<esc>:set noma | let v:errmsg = ''<cr>]])
feed([[d:<esc>:set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok'<cr>]])
-- Assert buffer contents.
expect([[
zzz
ok
ok]])
end)
end)