mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
tests: Migrate legacy test 94 #2218
This commit is contained in:
parent
c56c035576
commit
d2d99454e6
@ -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
|
||||||
|
@ -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
|
|
@ -1,20 +0,0 @@
|
|||||||
a y
|
|
||||||
|
|
||||||
newline
|
|
||||||
newline
|
|
||||||
|
|
||||||
--------x
|
|
||||||
--------x
|
|
||||||
xxxx--------x
|
|
||||||
xxxx--------x
|
|
||||||
|
|
||||||
NoNoberryach
|
|
||||||
--ago
|
|
||||||
|
|
||||||
----Z
|
|
||||||
WhavcreQhevnaZ
|
|
||||||
LemonNewNewZ
|
|
||||||
|
|
||||||
zzz
|
|
||||||
ok
|
|
||||||
ok
|
|
153
test/functional/legacy/094_visual_mode_operators_spec.lua
Normal file
153
test/functional/legacy/094_visual_mode_operators_spec.lua
Normal 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)
|
Loading…
Reference in New Issue
Block a user