aboutsummaryrefslogtreecommitdiff
path: root/test/functional/legacy/039_visual_block_mode_commands_spec.lua
diff options
context:
space:
mode:
authorwatiko <service@mail.watiko.net>2016-01-19 22:06:15 +0900
committerwatiko <service@mail.watiko.net>2016-01-21 14:05:02 +0900
commit5fa082fa85cc96c1389a786570dff2e5da09e221 (patch)
treed0ca5b38f72bc50dd32a7a8636f0b222d9067372 /test/functional/legacy/039_visual_block_mode_commands_spec.lua
parentc90784836bdeac173f9ff6f12f6a81a8b2e49e2d (diff)
downloadrneovim-5fa082fa85cc96c1389a786570dff2e5da09e221.tar.gz
rneovim-5fa082fa85cc96c1389a786570dff2e5da09e221.tar.bz2
rneovim-5fa082fa85cc96c1389a786570dff2e5da09e221.zip
tests: Migrate legacy test 39.
Diffstat (limited to 'test/functional/legacy/039_visual_block_mode_commands_spec.lua')
-rw-r--r--test/functional/legacy/039_visual_block_mode_commands_spec.lua234
1 files changed, 234 insertions, 0 deletions
diff --git a/test/functional/legacy/039_visual_block_mode_commands_spec.lua b/test/functional/legacy/039_visual_block_mode_commands_spec.lua
new file mode 100644
index 0000000000..55db9169fa
--- /dev/null
+++ b/test/functional/legacy/039_visual_block_mode_commands_spec.lua
@@ -0,0 +1,234 @@
+-- Test Visual block mode commands
+-- And test "U" in Visual mode, also on German sharp S.
+
+local helpers = require('test.functional.helpers')
+local nvim, eq = helpers.meths, helpers.eq
+local insert, feed = helpers.insert, helpers.feed
+local clear, expect = helpers.clear, helpers.expect
+local source, execute = helpers.source, helpers.execute
+
+describe('Visual block mode', function()
+
+ before_each(function()
+ clear()
+
+ execute('set ts&vi sw&vi sts&vi noet') -- Vim compatible
+ end)
+
+ it('should shift, insert, replace and change a block', function()
+ insert([[
+ abcdefghijklm
+ abcdefghijklm
+ abcdefghijklm
+ abcdefghijklm
+ abcdefghijklm]])
+
+ feed('gg')
+ -- Test shift-right of a block
+ feed('jllll<C-v>jj>wll<C-v>jlll><CR>')
+ -- Test shift-left of a block
+ feed('G$hhhh<C-v>kk<lt>')
+ -- Test block-insert
+ feed('Gkl<C-v>kkkIxyz<ESC>')
+ -- Test block-replace
+ feed('Gllll<C-v>kkklllrq')
+ -- Test block-change
+ feed('G$khhh<C-v>hhkkcmno<ESC>')
+
+ expect([[
+ axyzbcdefghijklm
+ axyzqqqq mno ghijklm
+ axyzqqqqef mno ghijklm
+ axyzqqqqefgmnoklm
+ abcdqqqqijklm]])
+ end)
+
+ it('should insert a block using cursor keys for movement', function()
+ insert([[
+ aaaaaa
+ bbbbbb
+ cccccc
+ dddddd
+
+ xaaa
+ bbbb
+ cccc
+ dddd]])
+
+ execute('/^aa')
+ feed('l<C-v>jjjlllI<Right><Right> <ESC>')
+ execute('/xaaa$')
+ feed('<C-v>jjjI<lt>><Left>p<ESC>')
+
+ expect([[
+ aaa aaa
+ bbb bbb
+ ccc ccc
+ ddd ddd
+
+ <p>xaaa
+ <p>bbbb
+ <p>cccc
+ <p>dddd]])
+ end)
+
+ it('should create a block', function()
+ insert([[
+ A23
+ 4567
+
+ B23
+ 4567
+
+ C23
+ 4567]])
+
+ -- Test for Visual block was created with the last <C-v>$.
+ execute('/^A23$/')
+ feed('l<C-v>j$Aab<ESC>')
+ -- Test for Visual block was created with the middle <C-v>$ (1).
+ execute('/^B23$/')
+ feed('l<C-v>j$hAab<ESC>')
+ -- Test for Visual block was created with the middle <C-v>$ (2).
+ execute('/^C23$/')
+ feed('l<C-v>j$hhAab<ESC>')
+
+ expect([[
+ A23ab
+ 4567ab
+
+ B23 ab
+ 4567ab
+
+ C23ab
+ 456ab7]])
+ end)
+
+ it('should insert and append a block when virtualedit=all', function()
+ insert([[
+ line1
+ line2
+ line3
+ ]])
+
+ -- Test for Visual block insert when virtualedit=all and utf-8 encoding.
+ execute('set ve=all')
+ execute('/\t\tline')
+ feed('07l<C-v>jjIx<ESC>')
+
+ expect([[
+ x line1
+ x line2
+ x line3
+ ]])
+
+ -- Test for Visual block append when virtualedit=all.
+ feed('012l<C-v>jjAx<ESC>')
+
+ expect([[
+ x x line1
+ x x line2
+ x x line3
+ ]])
+ end)
+
+ it('should make a selected part uppercase', function()
+ -- GUe must uppercase a whole word, also when ß changes to SS.
+ feed('Gothe youtußeuu end<ESC>Ypk0wgUe<CR>')
+ -- GUfx must uppercase until x, inclusive.
+ feed('O- youßtußexu -<ESC>0fogUfx<CR>')
+ -- VU must uppercase a whole line.
+ feed('YpkVU<CR>')
+ -- Same, when it's the last line in the buffer.
+ feed('YPGi111<ESC>VUddP<CR>')
+ -- Uppercase two lines.
+ feed('Oblah di<CR>')
+ feed('doh dut<ESC>VkUj<CR>')
+ -- Uppercase part of two lines.
+ feed('ddppi333<ESC>k0i222<esc>fyllvjfuUk<CR>')
+
+ expect([[
+
+ the YOUTUSSEUU end
+ - yOUSSTUSSEXu -
+ THE YOUTUSSEUU END
+ 111THE YOUTUSSEUU END
+ BLAH DI
+ DOH DUT
+ 222the yoUTUSSEUU END
+ 333THE YOUTUßeuu end]])
+ end)
+
+ it('should replace using Enter or NL', function()
+ -- Visual replace using Enter or NL.
+ feed('G3o123456789<ESC>2k05l<C-v>2jr<CR>')
+ feed('G3o98765<ESC>2k02l<C-v>2jr<C-v><CR>')
+ feed('G3o123456789<ESC>2k05l<C-v>2jr<CR>')
+ feed('G3o98765<ESC>2k02l<C-v>2jr<C-v><Nul>')
+
+ local expected = [[
+
+ 12345
+ 789
+ 12345
+ 789
+ 12345
+ 789
+ 98<CR>65
+ 98<CR>65
+ 98<CR>65
+ 12345
+ 789
+ 12345
+ 789
+ 12345
+ 789
+ 98<Nul>65
+ 98<Nul>65
+ 98<Nul>65]]
+ expected = expected:gsub('<CR>', '\r')
+ expected = expected:gsub('<Nul>', '\x00')
+
+ expect(expected)
+ end)
+
+ it('should treat cursor position correctly when virtualedit=block', function()
+ insert([[
+ 12345
+ 789
+ 98765]])
+
+ -- Test cursor position. When virtualedit=block and Visual block mode and $gj.
+ execute('set ve=block')
+ feed('G2l')
+ feed('2k<C-v>$gj<ESC>')
+ execute([[let cpos=getpos("'>")]])
+ local cpos = nvim.get_var('cpos')
+ local expected = {
+ col = 4,
+ off = 0
+ }
+ local actual = {
+ col = cpos[3],
+ off = cpos[4]
+ }
+
+ eq(expected, actual)
+ end)
+
+ it('should replace spaces in front of the block with tabs', function()
+ insert([[
+ #define BO_ALL 0x0001
+ #define BO_BS 0x0002
+ #define BO_CRSR 0x0004]])
+
+ -- Block_insert when replacing spaces in front of the block with tabs.
+ execute('set ts=8 sts=4 sw=4')
+ feed('ggf0<C-v>2jI<TAB><ESC>')
+
+ expect([[
+ #define BO_ALL 0x0001
+ #define BO_BS 0x0002
+ #define BO_CRSR 0x0004]])
+ end)
+end)