From d2d99454e63c0e6649fddd52bbd9a10d27c2e347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BCrgin?= <676c7473@gmail.com> Date: Sun, 22 Mar 2015 00:47:39 +0100 Subject: [PATCH] tests: Migrate legacy test 94 #2218 --- src/nvim/testdir/Makefile | 2 +- src/nvim/testdir/test94.in | 94 ----------- src/nvim/testdir/test94.ok | 20 --- .../legacy/094_visual_mode_operators_spec.lua | 153 ++++++++++++++++++ 4 files changed, 154 insertions(+), 115 deletions(-) delete mode 100644 src/nvim/testdir/test94.in delete mode 100644 src/nvim/testdir/test94.ok create mode 100644 test/functional/legacy/094_visual_mode_operators_spec.lua diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile index 8e0f853446..70e6f8ee4c 100644 --- a/src/nvim/testdir/Makefile +++ b/src/nvim/testdir/Makefile @@ -27,7 +27,7 @@ SCRIPTS := test_autoformat_join.out \ test76.out test78.out test79.out test80.out \ test82.out test83.out test85.out \ test86.out test87.out test88.out \ - test92.out test93.out test94.out \ + test92.out test93.out \ test96.out test99.out \ test_listlbr.out \ test_breakindent.out diff --git a/src/nvim/testdir/test94.in b/src/nvim/testdir/test94.in deleted file mode 100644 index a8b46112d2..0000000000 --- a/src/nvim/testdir/test94.in +++ /dev/null @@ -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 -:vnoremap iW :call SelectInCaps() -/^Kiwi -vWcNol.fD2vd.: -/^Jambu -llviWc-l.l2vdl.: -: -:" Operator-pending mode maps (movement and text object) -:onoremap W /\u/ -:onoremap W :call MoveToCap() -:onoremap iW :call SelectInCaps() -/^Pineapple -cW-l.l2.l.: -/^Juniper -g?\WfD.: -/^Lemon -yiWPlciWNewfr.: -: -:" Patch 7.3.879: Properly abort Operator-pending mode for "dv:" 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 diff --git a/src/nvim/testdir/test94.ok b/src/nvim/testdir/test94.ok deleted file mode 100644 index 3996f2a3a4..0000000000 --- a/src/nvim/testdir/test94.ok +++ /dev/null @@ -1,20 +0,0 @@ -a y - -newline -newline - - --------x - --------x -xxxx--------x -xxxx--------x - -NoNoberryach ---ago - -----Z -WhavcreQhevnaZ -LemonNewNewZ - -zzz -ok -ok diff --git a/test/functional/legacy/094_visual_mode_operators_spec.lua b/test/functional/legacy/094_visual_mode_operators_spec.lua new file mode 100644 index 0000000000..c4aebe4ecc --- /dev/null +++ b/test/functional/legacy/094_visual_mode_operators_spec.lua @@ -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('Vcnewlinej.j2Vd.') + + -- Same in blockwise Visual mode. + execute('/^xxxx') + feed('jlc l.l2c----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') + execute('vnoremap iW :call SelectInCaps()') + + -- Do a simple change using the simple vmap, also with count and repeat. + execute('/^Kiwi') + feed('vWcNol.fD2vd.') + + -- Same, using the vmap that maps to an Ex command. + execute('/^Jambu') + feed('llviWc-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/') + execute('onoremap W :call MoveToCap()') + execute('onoremap iW :call SelectInCaps()') + + -- Do a simple change using the simple omap, also with count and repeat. + execute('/^Pineapple') + feed('cW-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('yiWPlciWNewfr.') + + -- 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/ modifier given; or + -- - abort the operation by pressing Escape: no change to the buffer is + -- carried out. + execute('/^zzzz') + feed([[dV:dv::set noma | let v:errmsg = '']]) + feed([[d::set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed']]) + feed([[dv:dV::set noma | let v:errmsg = '']]) + feed([[d::set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok']]) + + -- Assert buffer contents. + expect([[ + zzz + ok + ok]]) + end) +end)