From d2d99454e63c0e6649fddd52bbd9a10d27c2e347 Mon Sep 17 00:00:00 2001 From: David Bürgin <676c7473@gmail.com> Date: Sun, 22 Mar 2015 00:47:39 +0100 Subject: tests: Migrate legacy test 94 #2218 --- .../legacy/094_visual_mode_operators_spec.lua | 153 +++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 test/functional/legacy/094_visual_mode_operators_spec.lua (limited to 'test/functional') 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) -- cgit