171136db1SBram Moolenaar" Tests for register operations
271136db1SBram Moolenaar
354c8d229SBram Moolenaarsource check.vim
411a5b19aSBram Moolenaarsource view_util.vim
554c8d229SBram Moolenaar
671136db1SBram Moolenaar" This test must be executed first to check for empty and unset registers.
771136db1SBram Moolenaarfunc Test_aaa_empty_reg_test()
871136db1SBram Moolenaar  call assert_fails('normal @@', 'E748:')
971136db1SBram Moolenaar  call assert_fails('normal @%', 'E354:')
1071136db1SBram Moolenaar  call assert_fails('normal @#', 'E354:')
1171136db1SBram Moolenaar  call assert_fails('normal @!', 'E354:')
1271136db1SBram Moolenaar  call assert_fails('normal @:', 'E30:')
1371136db1SBram Moolenaar  call assert_fails('normal @.', 'E29:')
146f1f0ca3SBram Moolenaar  call assert_fails('put /', 'E35:')
156f1f0ca3SBram Moolenaar  call assert_fails('put .', 'E29:')
1671136db1SBram Moolenaarendfunc
17e45deb79SBram Moolenaar
18e45deb79SBram Moolenaarfunc Test_yank_shows_register()
19e45deb79SBram Moolenaar    enew
20e45deb79SBram Moolenaar    set report=0
21e45deb79SBram Moolenaar    call setline(1, ['foo', 'bar'])
22e45deb79SBram Moolenaar    " Line-wise
23e45deb79SBram Moolenaar    exe 'norm! yy'
24e45deb79SBram Moolenaar    call assert_equal('1 line yanked', v:statusmsg)
25e45deb79SBram Moolenaar    exe 'norm! "zyy'
26e45deb79SBram Moolenaar    call assert_equal('1 line yanked into "z', v:statusmsg)
27e45deb79SBram Moolenaar    exe 'norm! yj'
28e45deb79SBram Moolenaar    call assert_equal('2 lines yanked', v:statusmsg)
29e45deb79SBram Moolenaar    exe 'norm! "zyj'
30e45deb79SBram Moolenaar    call assert_equal('2 lines yanked into "z', v:statusmsg)
31e45deb79SBram Moolenaar
32e45deb79SBram Moolenaar    " Block-wise
33e45deb79SBram Moolenaar    exe "norm! \<C-V>y"
34e45deb79SBram Moolenaar    call assert_equal('block of 1 line yanked', v:statusmsg)
35e45deb79SBram Moolenaar    exe "norm! \<C-V>\"zy"
36e45deb79SBram Moolenaar    call assert_equal('block of 1 line yanked into "z', v:statusmsg)
37e45deb79SBram Moolenaar    exe "norm! \<C-V>jy"
38e45deb79SBram Moolenaar    call assert_equal('block of 2 lines yanked', v:statusmsg)
39e45deb79SBram Moolenaar    exe "norm! \<C-V>j\"zy"
40e45deb79SBram Moolenaar    call assert_equal('block of 2 lines yanked into "z', v:statusmsg)
41e45deb79SBram Moolenaar
42e45deb79SBram Moolenaar    bwipe!
43e45deb79SBram Moolenaarendfunc
447ce551f3SBram Moolenaar
457ce551f3SBram Moolenaarfunc Test_display_registers()
467ce551f3SBram Moolenaar    e file1
477ce551f3SBram Moolenaar    e file2
487ce551f3SBram Moolenaar    call setline(1, ['foo', 'bar'])
497ce551f3SBram Moolenaar    /bar
507ce551f3SBram Moolenaar    exe 'norm! y2l"axx'
517ce551f3SBram Moolenaar    call feedkeys("i\<C-R>=2*4\n\<esc>")
527ce551f3SBram Moolenaar    call feedkeys(":ls\n", 'xt')
537ce551f3SBram Moolenaar
547ce551f3SBram Moolenaar    let a = execute('display')
557ce551f3SBram Moolenaar    let b = execute('registers')
567ce551f3SBram Moolenaar
577ce551f3SBram Moolenaar    call assert_equal(a, b)
583691f1eeSBram Moolenaar    call assert_match('^\nType Name Content\n'
593691f1eeSBram Moolenaar          \ .         '  c  ""   a\n'
603691f1eeSBram Moolenaar          \ .         '  c  "0   ba\n'
613691f1eeSBram Moolenaar          \ .         '  c  "a   b\n'
627ce551f3SBram Moolenaar          \ .         '.*'
633691f1eeSBram Moolenaar          \ .         '  c  "-   a\n'
647ce551f3SBram Moolenaar          \ .         '.*'
653691f1eeSBram Moolenaar          \ .         '  c  ":   ls\n'
663691f1eeSBram Moolenaar          \ .         '  c  "%   file2\n'
673691f1eeSBram Moolenaar          \ .         '  c  "#   file1\n'
683691f1eeSBram Moolenaar          \ .         '  c  "/   bar\n'
693691f1eeSBram Moolenaar          \ .         '  c  "=   2\*4', a)
707ce551f3SBram Moolenaar
717ce551f3SBram Moolenaar    let a = execute('registers a')
723691f1eeSBram Moolenaar    call assert_match('^\nType Name Content\n'
733691f1eeSBram Moolenaar          \ .         '  c  "a   b', a)
747ce551f3SBram Moolenaar
757ce551f3SBram Moolenaar    let a = execute('registers :')
763691f1eeSBram Moolenaar    call assert_match('^\nType Name Content\n'
773691f1eeSBram Moolenaar          \ .         '  c  ":   ls', a)
787ce551f3SBram Moolenaar
797ce551f3SBram Moolenaar    bwipe!
807ce551f3SBram Moolenaarendfunc
819d7fdd40SBram Moolenaar
829d7fdd40SBram Moolenaarfunc Test_register_one()
839d7fdd40SBram Moolenaar  " delete a line goes into register one
849d7fdd40SBram Moolenaar  new
859d7fdd40SBram Moolenaar  call setline(1, "one")
869d7fdd40SBram Moolenaar  normal dd
879d7fdd40SBram Moolenaar  call assert_equal("one\n", @1)
889d7fdd40SBram Moolenaar
899d7fdd40SBram Moolenaar  " delete a word does not change register one, does change "-
909d7fdd40SBram Moolenaar  call setline(1, "two")
919d7fdd40SBram Moolenaar  normal de
929d7fdd40SBram Moolenaar  call assert_equal("one\n", @1)
939d7fdd40SBram Moolenaar  call assert_equal("two", @-)
949d7fdd40SBram Moolenaar
959d7fdd40SBram Moolenaar  " delete a word with a register does not change register one
969d7fdd40SBram Moolenaar  call setline(1, "three")
979d7fdd40SBram Moolenaar  normal "ade
989d7fdd40SBram Moolenaar  call assert_equal("three", @a)
999d7fdd40SBram Moolenaar  call assert_equal("one\n", @1)
1009d7fdd40SBram Moolenaar
1019d7fdd40SBram Moolenaar  " delete a word with register DOES change register one with one of a list of
1029d7fdd40SBram Moolenaar  " operators
1039d7fdd40SBram Moolenaar  " %
1049d7fdd40SBram Moolenaar  call setline(1, ["(12)3"])
1059d7fdd40SBram Moolenaar  normal "ad%
1069d7fdd40SBram Moolenaar  call assert_equal("(12)", @a)
1079d7fdd40SBram Moolenaar  call assert_equal("(12)", @1)
1089d7fdd40SBram Moolenaar
1099d7fdd40SBram Moolenaar  " (
1109d7fdd40SBram Moolenaar  call setline(1, ["first second"])
1119d7fdd40SBram Moolenaar  normal $"ad(
1129d7fdd40SBram Moolenaar  call assert_equal("first secon", @a)
1139d7fdd40SBram Moolenaar  call assert_equal("first secon", @1)
1149d7fdd40SBram Moolenaar
1159d7fdd40SBram Moolenaar  " )
1169d7fdd40SBram Moolenaar  call setline(1, ["First Second."])
1179d7fdd40SBram Moolenaar  normal gg0"ad)
1189d7fdd40SBram Moolenaar  call assert_equal("First Second.", @a)
1199d7fdd40SBram Moolenaar  call assert_equal("First Second.", @1)
1209d7fdd40SBram Moolenaar
1219d7fdd40SBram Moolenaar  " `
1229d7fdd40SBram Moolenaar  call setline(1, ["start here."])
1239d7fdd40SBram Moolenaar  normal gg0fhmx0"ad`x
1249d7fdd40SBram Moolenaar  call assert_equal("start ", @a)
1259d7fdd40SBram Moolenaar  call assert_equal("start ", @1)
1269d7fdd40SBram Moolenaar
1279d7fdd40SBram Moolenaar  " /
1289d7fdd40SBram Moolenaar  call setline(1, ["searchX"])
1299d7fdd40SBram Moolenaar  exe "normal gg0\"ad/X\<CR>"
1309d7fdd40SBram Moolenaar  call assert_equal("search", @a)
1319d7fdd40SBram Moolenaar  call assert_equal("search", @1)
1329d7fdd40SBram Moolenaar
1339d7fdd40SBram Moolenaar  " ?
1349d7fdd40SBram Moolenaar  call setline(1, ["Ysearch"])
1359d7fdd40SBram Moolenaar  exe "normal gg$\"ad?Y\<CR>"
1369d7fdd40SBram Moolenaar  call assert_equal("Ysearc", @a)
1379d7fdd40SBram Moolenaar  call assert_equal("Ysearc", @1)
1389d7fdd40SBram Moolenaar
1399d7fdd40SBram Moolenaar  " n
1409d7fdd40SBram Moolenaar  call setline(1, ["Ynext"])
1419d7fdd40SBram Moolenaar  normal gg$"adn
1429d7fdd40SBram Moolenaar  call assert_equal("Ynex", @a)
1439d7fdd40SBram Moolenaar  call assert_equal("Ynex", @1)
1449d7fdd40SBram Moolenaar
1459d7fdd40SBram Moolenaar  " N
1469d7fdd40SBram Moolenaar  call setline(1, ["prevY"])
1479d7fdd40SBram Moolenaar  normal gg0"adN
1489d7fdd40SBram Moolenaar  call assert_equal("prev", @a)
1499d7fdd40SBram Moolenaar  call assert_equal("prev", @1)
1509d7fdd40SBram Moolenaar
1519d7fdd40SBram Moolenaar  " }
1529d7fdd40SBram Moolenaar  call setline(1, ["one", ""])
1539d7fdd40SBram Moolenaar  normal gg0"ad}
1549d7fdd40SBram Moolenaar  call assert_equal("one\n", @a)
1559d7fdd40SBram Moolenaar  call assert_equal("one\n", @1)
1569d7fdd40SBram Moolenaar
1579d7fdd40SBram Moolenaar  " {
1589d7fdd40SBram Moolenaar  call setline(1, ["", "two"])
1599d7fdd40SBram Moolenaar  normal 2G$"ad{
1609d7fdd40SBram Moolenaar  call assert_equal("\ntw", @a)
1619d7fdd40SBram Moolenaar  call assert_equal("\ntw", @1)
1629d7fdd40SBram Moolenaar
1639d7fdd40SBram Moolenaar  bwipe!
1649d7fdd40SBram Moolenaarendfunc
1656edbbd81SBram Moolenaar
16611a5b19aSBram Moolenaarfunc Test_recording_status_in_ex_line()
16711a5b19aSBram Moolenaar  norm qx
16811a5b19aSBram Moolenaar  redraw!
16911a5b19aSBram Moolenaar  call assert_equal('recording @x', Screenline(&lines))
17011a5b19aSBram Moolenaar  set shortmess=q
17111a5b19aSBram Moolenaar  redraw!
17211a5b19aSBram Moolenaar  call assert_equal('recording', Screenline(&lines))
17311a5b19aSBram Moolenaar  set shortmess&
17411a5b19aSBram Moolenaar  norm q
17511a5b19aSBram Moolenaar  redraw!
17611a5b19aSBram Moolenaar  call assert_equal('', Screenline(&lines))
17711a5b19aSBram Moolenaarendfunc
17811a5b19aSBram Moolenaar
1796edbbd81SBram Moolenaar" Check that replaying a typed sequence does not use an Esc and following
1806edbbd81SBram Moolenaar" characters as an escape sequence.
1816edbbd81SBram Moolenaarfunc Test_recording_esc_sequence()
1826edbbd81SBram Moolenaar  new
18355d81cd2SBram Moolenaar  try
1846edbbd81SBram Moolenaar    let save_F2 = &t_F2
18555d81cd2SBram Moolenaar  catch
18655d81cd2SBram Moolenaar  endtry
1876edbbd81SBram Moolenaar  let t_F2 = "\<Esc>OQ"
1886edbbd81SBram Moolenaar  call feedkeys("qqiTest\<Esc>", "xt")
1896edbbd81SBram Moolenaar  call feedkeys("OQuirk\<Esc>q", "xt")
1906edbbd81SBram Moolenaar  call feedkeys("Go\<Esc>@q", "xt")
1916edbbd81SBram Moolenaar  call assert_equal(['Quirk', 'Test', 'Quirk', 'Test'], getline(1, 4))
1926edbbd81SBram Moolenaar  bwipe!
19355d81cd2SBram Moolenaar  if exists('save_F2')
194a5e44600SBram Moolenaar    let &t_F2 = save_F2
195037c54f2SBram Moolenaar  else
196037c54f2SBram Moolenaar    set t_F2=
19755d81cd2SBram Moolenaar  endif
1986edbbd81SBram Moolenaarendfunc
19971136db1SBram Moolenaar
20071136db1SBram Moolenaar" Test for executing the last used register (@)
20171136db1SBram Moolenaarfunc Test_last_used_exec_reg()
20271136db1SBram Moolenaar  " Test for the @: command
20371136db1SBram Moolenaar  let a = ''
20471136db1SBram Moolenaar  call feedkeys(":let a ..= 'Vim'\<CR>", 'xt')
20571136db1SBram Moolenaar  normal @:
20671136db1SBram Moolenaar  call assert_equal('VimVim', a)
20771136db1SBram Moolenaar
20871136db1SBram Moolenaar  " Test for the @= command
20971136db1SBram Moolenaar  let x = ''
21071136db1SBram Moolenaar  let a = ":let x ..= 'Vim'\<CR>"
21171136db1SBram Moolenaar  exe "normal @=a\<CR>"
21271136db1SBram Moolenaar  normal @@
21371136db1SBram Moolenaar  call assert_equal('VimVim', x)
21471136db1SBram Moolenaar
21571136db1SBram Moolenaar  " Test for the @. command
21671136db1SBram Moolenaar  let a = ''
21771136db1SBram Moolenaar  call feedkeys("i:let a ..= 'Edit'\<CR>", 'xt')
21871136db1SBram Moolenaar  normal @.
21971136db1SBram Moolenaar  normal @@
22071136db1SBram Moolenaar  call assert_equal('EditEdit', a)
22171136db1SBram Moolenaar
2226f1f0ca3SBram Moolenaar  " Test for repeating the last command-line in visual mode
2236f1f0ca3SBram Moolenaar  call append(0, 'register')
2246f1f0ca3SBram Moolenaar  normal gg
2256f1f0ca3SBram Moolenaar  let @r = ''
2266f1f0ca3SBram Moolenaar  call feedkeys("v:yank R\<CR>", 'xt')
2276f1f0ca3SBram Moolenaar  call feedkeys("v@:", 'xt')
2286f1f0ca3SBram Moolenaar  call assert_equal("\nregister\nregister\n", @r)
2296f1f0ca3SBram Moolenaar
23071136db1SBram Moolenaar  enew!
23171136db1SBram Moolenaarendfunc
23271136db1SBram Moolenaar
23371136db1SBram Moolenaarfunc Test_get_register()
23471136db1SBram Moolenaar  enew
23571136db1SBram Moolenaar  edit Xfile1
23671136db1SBram Moolenaar  edit Xfile2
23771136db1SBram Moolenaar  call assert_equal('Xfile2', getreg('%'))
23871136db1SBram Moolenaar  call assert_equal('Xfile1', getreg('#'))
23971136db1SBram Moolenaar
24071136db1SBram Moolenaar  call feedkeys("iTwo\<Esc>", 'xt')
24171136db1SBram Moolenaar  call assert_equal('Two', getreg('.'))
24271136db1SBram Moolenaar  call assert_equal('', getreg('_'))
24371136db1SBram Moolenaar  call assert_beeps('normal ":yy')
24471136db1SBram Moolenaar  call assert_beeps('normal "%yy')
24571136db1SBram Moolenaar  call assert_beeps('normal ".yy')
24671136db1SBram Moolenaar
24771136db1SBram Moolenaar  call assert_equal('', getreg("\<C-F>"))
24871136db1SBram Moolenaar  call assert_equal('', getreg("\<C-W>"))
24971136db1SBram Moolenaar  call assert_equal('', getreg("\<C-L>"))
2500e05de46SBram Moolenaar  " Change the last used register to '"' for the next test
2510e05de46SBram Moolenaar  normal! ""yy
2520e05de46SBram Moolenaar  let @" = 'happy'
2530e05de46SBram Moolenaar  call assert_equal('happy', getreg())
2540e05de46SBram Moolenaar  call assert_equal('happy', getreg(''))
25571136db1SBram Moolenaar
25671136db1SBram Moolenaar  call assert_equal('', getregtype('!'))
2570e05de46SBram Moolenaar  call assert_fails('echo getregtype([])', 'E730:')
2580e05de46SBram Moolenaar  call assert_equal('v', getregtype())
2590e05de46SBram Moolenaar  call assert_equal('v', getregtype(''))
26071136db1SBram Moolenaar
2616f1f0ca3SBram Moolenaar  " Test for inserting an invalid register content
2626f1f0ca3SBram Moolenaar  call assert_beeps('exe "normal i\<C-R>!"')
2636f1f0ca3SBram Moolenaar
2646f1f0ca3SBram Moolenaar  " Test for inserting a register with multiple lines
2656f1f0ca3SBram Moolenaar  call deletebufline('', 1, '$')
2666f1f0ca3SBram Moolenaar  call setreg('r', ['a', 'b'])
2676f1f0ca3SBram Moolenaar  exe "normal i\<C-R>r"
2686f1f0ca3SBram Moolenaar  call assert_equal(['a', 'b', ''], getline(1, '$'))
2696f1f0ca3SBram Moolenaar
2706f1f0ca3SBram Moolenaar  " Test for inserting a multi-line register in the command line
2716f1f0ca3SBram Moolenaar  call feedkeys(":\<C-R>r\<Esc>", 'xt')
2726f1f0ca3SBram Moolenaar  call assert_equal("a\rb\r", histget(':', -1))
2736f1f0ca3SBram Moolenaar
27499fa7219SBram Moolenaar  call assert_fails('let r = getreg("=", [])', 'E745:')
27599fa7219SBram Moolenaar  call assert_fails('let r = getreg("=", 1, [])', 'E745:')
27671136db1SBram Moolenaar  enew!
277d1ad99b6SBram Moolenaar
278d1ad99b6SBram Moolenaar  " Using a register in operator-pending mode should fail
279d1ad99b6SBram Moolenaar  call assert_beeps('norm! c"')
28071136db1SBram Moolenaarendfunc
28171136db1SBram Moolenaar
28271136db1SBram Moolenaarfunc Test_set_register()
28371136db1SBram Moolenaar  call assert_fails("call setreg('#', 200)", 'E86:')
28434fcb697SYegappan Lakshmanan  call assert_fails("call setreg('a', test_unknown())", 'E908:')
28571136db1SBram Moolenaar
28671136db1SBram Moolenaar  edit Xfile_alt_1
28771136db1SBram Moolenaar  let b1 = bufnr('')
28871136db1SBram Moolenaar  edit Xfile_alt_2
28971136db1SBram Moolenaar  let b2 = bufnr('')
29071136db1SBram Moolenaar  edit Xfile_alt_3
29171136db1SBram Moolenaar  let b3 = bufnr('')
29271136db1SBram Moolenaar  call setreg('#', 'alt_1')
29371136db1SBram Moolenaar  call assert_equal('Xfile_alt_1', getreg('#'))
29471136db1SBram Moolenaar  call setreg('#', b2)
29571136db1SBram Moolenaar  call assert_equal('Xfile_alt_2', getreg('#'))
29671136db1SBram Moolenaar
29771136db1SBram Moolenaar  let ab = 'regwrite'
29871136db1SBram Moolenaar  call setreg('=', '')
29971136db1SBram Moolenaar  call setreg('=', 'a', 'a')
30071136db1SBram Moolenaar  call setreg('=', 'b', 'a')
30171136db1SBram Moolenaar  call assert_equal('regwrite', getreg('='))
30271136db1SBram Moolenaar
3034b96df5aSBram Moolenaar  " Test for setting a list of lines to special registers
3046f1f0ca3SBram Moolenaar  call setreg('/', [])
3056f1f0ca3SBram Moolenaar  call assert_equal('', @/)
3066f1f0ca3SBram Moolenaar  call setreg('=', [])
3076f1f0ca3SBram Moolenaar  call assert_equal('', @=)
3086f1f0ca3SBram Moolenaar  call assert_fails("call setreg('/', ['a', 'b'])", 'E883:')
3096f1f0ca3SBram Moolenaar  call assert_fails("call setreg('=', ['a', 'b'])", 'E883:')
3106f1f0ca3SBram Moolenaar  call assert_equal(0, setreg('_', ['a', 'b']))
3116f1f0ca3SBram Moolenaar
3126f1f0ca3SBram Moolenaar  " Test for recording to a invalid register
3136f1f0ca3SBram Moolenaar  call assert_beeps('normal q$')
3146f1f0ca3SBram Moolenaar
3156f1f0ca3SBram Moolenaar  " Appending to a register when recording
3166f1f0ca3SBram Moolenaar  call append(0, "text for clipboard test")
3176f1f0ca3SBram Moolenaar  normal gg
3186f1f0ca3SBram Moolenaar  call feedkeys('qrllq', 'xt')
3196f1f0ca3SBram Moolenaar  call feedkeys('qRhhq', 'xt')
3206f1f0ca3SBram Moolenaar  call assert_equal('llhh', getreg('r'))
3216f1f0ca3SBram Moolenaar
32254c8d229SBram Moolenaar  " Appending a list of characters to a register from different lines
32354c8d229SBram Moolenaar  let @r = ''
32454c8d229SBram Moolenaar  call append(0, ['abcdef', '123456'])
32554c8d229SBram Moolenaar  normal gg"ry3l
32654c8d229SBram Moolenaar  call cursor(2, 4)
32754c8d229SBram Moolenaar  normal "Ry3l
32854c8d229SBram Moolenaar  call assert_equal('abc456', @r)
32954c8d229SBram Moolenaar
33054c8d229SBram Moolenaar  " Test for gP with multiple lines selected using characterwise motion
33154c8d229SBram Moolenaar  %delete
33254c8d229SBram Moolenaar  call append(0, ['vim editor', 'vim editor'])
33354c8d229SBram Moolenaar  let @r = ''
33454c8d229SBram Moolenaar  exe "normal ggwy/vim /e\<CR>gP"
33554c8d229SBram Moolenaar  call assert_equal(['vim editor', 'vim editor', 'vim editor'], getline(1, 3))
33654c8d229SBram Moolenaar
33754c8d229SBram Moolenaar  " Test for gP with . register
33854c8d229SBram Moolenaar  %delete
33954c8d229SBram Moolenaar  normal iabc
34054c8d229SBram Moolenaar  normal ".gp
34154c8d229SBram Moolenaar  call assert_equal('abcabc', getline(1))
34254c8d229SBram Moolenaar  normal 0".gP
34354c8d229SBram Moolenaar  call assert_equal('abcabcabc', getline(1))
34454c8d229SBram Moolenaar
3450e05de46SBram Moolenaar  let @"=''
3460e05de46SBram Moolenaar  call setreg('', '1')
3470e05de46SBram Moolenaar  call assert_equal('1', @")
3480e05de46SBram Moolenaar  call setreg('@', '2')
3490e05de46SBram Moolenaar  call assert_equal('2', @")
3500e05de46SBram Moolenaar
35171136db1SBram Moolenaar  enew!
35271136db1SBram Moolenaarendfunc
35371136db1SBram Moolenaar
35454c8d229SBram Moolenaar" Test for clipboard registers (* and +)
35554c8d229SBram Moolenaarfunc Test_clipboard_regs()
35654c8d229SBram Moolenaar  CheckNotGui
35754c8d229SBram Moolenaar  CheckFeature clipboard_working
35854c8d229SBram Moolenaar
35954c8d229SBram Moolenaar  new
36054c8d229SBram Moolenaar  call append(0, "text for clipboard test")
36154c8d229SBram Moolenaar  normal gg"*yiw
36254c8d229SBram Moolenaar  call assert_equal('text', getreg('*'))
36354c8d229SBram Moolenaar  normal gg2w"+yiw
36454c8d229SBram Moolenaar  call assert_equal('clipboard', getreg('+'))
36554c8d229SBram Moolenaar
36654c8d229SBram Moolenaar  " Test for replacing the clipboard register contents
36754c8d229SBram Moolenaar  set clipboard=unnamed
36854c8d229SBram Moolenaar  let @* = 'food'
36954c8d229SBram Moolenaar  normal ggviw"*p
37054c8d229SBram Moolenaar  call assert_equal('text', getreg('*'))
37154c8d229SBram Moolenaar  call assert_equal('food for clipboard test', getline(1))
37254c8d229SBram Moolenaar  normal ggviw"*p
37354c8d229SBram Moolenaar  call assert_equal('food', getreg('*'))
37454c8d229SBram Moolenaar  call assert_equal('text for clipboard test', getline(1))
37554c8d229SBram Moolenaar
37654c8d229SBram Moolenaar  " Test for replacing the selection register contents
37754c8d229SBram Moolenaar  set clipboard=unnamedplus
37854c8d229SBram Moolenaar  let @+ = 'food'
37954c8d229SBram Moolenaar  normal ggviw"+p
38054c8d229SBram Moolenaar  call assert_equal('text', getreg('+'))
38154c8d229SBram Moolenaar  call assert_equal('food for clipboard test', getline(1))
38254c8d229SBram Moolenaar  normal ggviw"+p
38354c8d229SBram Moolenaar  call assert_equal('food', getreg('+'))
38454c8d229SBram Moolenaar  call assert_equal('text for clipboard test', getline(1))
38554c8d229SBram Moolenaar
38654c8d229SBram Moolenaar  " Test for auto copying visually selected text to clipboard register
38754c8d229SBram Moolenaar  call setline(1, "text for clipboard test")
38854c8d229SBram Moolenaar  let @* = ''
38954c8d229SBram Moolenaar  set clipboard=autoselect
39054c8d229SBram Moolenaar  normal ggwwviwy
39154c8d229SBram Moolenaar  call assert_equal('clipboard', @*)
39254c8d229SBram Moolenaar
39354c8d229SBram Moolenaar  " Test for auto copying visually selected text to selection register
39454c8d229SBram Moolenaar  let @+ = ''
39554c8d229SBram Moolenaar  set clipboard=autoselectplus
39654c8d229SBram Moolenaar  normal ggwviwy
39754c8d229SBram Moolenaar  call assert_equal('for', @+)
39854c8d229SBram Moolenaar
39954c8d229SBram Moolenaar  set clipboard&vim
40054c8d229SBram Moolenaar  bwipe!
40154c8d229SBram Moolenaarendfunc
40254c8d229SBram Moolenaar
40354c8d229SBram Moolenaar" Test for restarting the current mode (insert or virtual replace) after
40454c8d229SBram Moolenaar" executing the contents of a register
40554c8d229SBram Moolenaarfunc Test_put_reg_restart_mode()
40654c8d229SBram Moolenaar  new
40754c8d229SBram Moolenaar  call append(0, 'editor')
40854c8d229SBram Moolenaar  normal gg
40954c8d229SBram Moolenaar  let @r = "ivim \<Esc>"
41054c8d229SBram Moolenaar  call feedkeys("i\<C-O>@r\<C-R>=mode()\<CR>", 'xt')
41154c8d229SBram Moolenaar  call assert_equal('vimi editor', getline(1))
41254c8d229SBram Moolenaar
41354c8d229SBram Moolenaar  call setline(1, 'editor')
41454c8d229SBram Moolenaar  normal gg
41554c8d229SBram Moolenaar  call feedkeys("gR\<C-O>@r\<C-R>=mode()\<CR>", 'xt')
41654c8d229SBram Moolenaar  call assert_equal('vimReditor', getline(1))
41754c8d229SBram Moolenaar
41854c8d229SBram Moolenaar  bwipe!
41954c8d229SBram Moolenaarendfunc
42054c8d229SBram Moolenaar
421bc2b71d4SBram Moolenaar" Test for executing a register using :@ command
422bc2b71d4SBram Moolenaarfunc Test_execute_register()
423bc2b71d4SBram Moolenaar  call setreg('r', [])
424bc2b71d4SBram Moolenaar  call assert_beeps('@r')
425bc2b71d4SBram Moolenaar  let i = 1
426bc2b71d4SBram Moolenaar  let @q = 'let i+= 1'
427bc2b71d4SBram Moolenaar  @q
428bc2b71d4SBram Moolenaar  @
429bc2b71d4SBram Moolenaar  call assert_equal(3, i)
4301671f448SBram Moolenaar
4318a9bc95eSBram Moolenaar  " try to execute expression register and use a backspace to cancel it
4328a9bc95eSBram Moolenaar  new
4338a9bc95eSBram Moolenaar  call feedkeys("@=\<BS>ax\<CR>y", 'xt')
4348a9bc95eSBram Moolenaar  call assert_equal(['x', 'y'], getline(1, '$'))
4358a9bc95eSBram Moolenaar  close!
4368a9bc95eSBram Moolenaar
4371671f448SBram Moolenaar  " cannot execute a register in operator pending mode
4381671f448SBram Moolenaar  call assert_beeps('normal! c@r')
439bc2b71d4SBram Moolenaarendfunc
440bc2b71d4SBram Moolenaar
441bb861e29SBram Moolenaar" Test for getting register info
442bb861e29SBram Moolenaarfunc Test_get_reginfo()
443bb861e29SBram Moolenaar  enew
444bb861e29SBram Moolenaar  call setline(1, ['foo', 'bar'])
445bb861e29SBram Moolenaar
446bb861e29SBram Moolenaar  exe 'norm! "zyy'
447bb861e29SBram Moolenaar  let info = getreginfo('"')
448bb861e29SBram Moolenaar  call assert_equal('z', info.points_to)
449bb861e29SBram Moolenaar  call setreg('y', 'baz')
450bb861e29SBram Moolenaar  call assert_equal('z', getreginfo('').points_to)
451bb861e29SBram Moolenaar  call setreg('y', { 'isunnamed': v:true })
452bb861e29SBram Moolenaar  call assert_equal('y', getreginfo('"').points_to)
453bb861e29SBram Moolenaar
454bb861e29SBram Moolenaar  exe '$put'
455bb861e29SBram Moolenaar  call assert_equal(getreg('y'), getline(3))
456bb861e29SBram Moolenaar  call setreg('', 'qux')
457bb861e29SBram Moolenaar  call assert_equal('0', getreginfo('').points_to)
458bb861e29SBram Moolenaar  call setreg('x', 'quux')
459bb861e29SBram Moolenaar  call assert_equal('0', getreginfo('').points_to)
460bb861e29SBram Moolenaar
461bb861e29SBram Moolenaar  let info = getreginfo('')
462bb861e29SBram Moolenaar  call assert_equal(getreg('', 1, 1), info.regcontents)
463bb861e29SBram Moolenaar  call assert_equal(getregtype(''), info.regtype)
464bb861e29SBram Moolenaar
465bb861e29SBram Moolenaar  exe "norm! 0\<c-v>e" .. '"zy'
466bb861e29SBram Moolenaar  let info = getreginfo('z')
467bb861e29SBram Moolenaar  call assert_equal(getreg('z', 1, 1), info.regcontents)
468bb861e29SBram Moolenaar  call assert_equal(getregtype('z'), info.regtype)
469bb861e29SBram Moolenaar  call assert_equal(1, +info.isunnamed)
470bb861e29SBram Moolenaar
471bb861e29SBram Moolenaar  let info = getreginfo('"')
472bb861e29SBram Moolenaar  call assert_equal('z', info.points_to)
473bb861e29SBram Moolenaar
47434fcb697SYegappan Lakshmanan  let @a="a1b2"
47534fcb697SYegappan Lakshmanan  nnoremap <F2> <Cmd>let g:RegInfo = getreginfo()<CR>
47634fcb697SYegappan Lakshmanan  exe "normal \"a\<F2>"
47734fcb697SYegappan Lakshmanan  call assert_equal({'regcontents': ['a1b2'], 'isunnamed': v:false,
47834fcb697SYegappan Lakshmanan        \ 'regtype': 'v'}, g:RegInfo)
47934fcb697SYegappan Lakshmanan  nunmap <F2>
48034fcb697SYegappan Lakshmanan  unlet g:RegInfo
48134fcb697SYegappan Lakshmanan
482bb861e29SBram Moolenaar  bwipe!
483bb861e29SBram Moolenaarendfunc
484bb861e29SBram Moolenaar
485bb861e29SBram Moolenaar" Test for restoring register with dict from getreginfo
486bb861e29SBram Moolenaarfunc Test_set_register_dict()
487bb861e29SBram Moolenaar  enew!
488bb861e29SBram Moolenaar
489bb861e29SBram Moolenaar  call setreg('"', #{ regcontents: ['one', 'two'],
490bb861e29SBram Moolenaar        \ regtype: 'V', points_to: 'z' })
491bb861e29SBram Moolenaar  call assert_equal(['one', 'two'], getreg('"', 1, 1))
492bb861e29SBram Moolenaar  let info = getreginfo('"')
493bb861e29SBram Moolenaar  call assert_equal('z', info.points_to)
494bb861e29SBram Moolenaar  call assert_equal('V', info.regtype)
495bb861e29SBram Moolenaar  call assert_equal(1, +getreginfo('z').isunnamed)
496bb861e29SBram Moolenaar
497bb861e29SBram Moolenaar  call setreg('x', #{ regcontents: ['three', 'four'],
498bb861e29SBram Moolenaar        \ regtype: 'v', isunnamed: v:true })
499bb861e29SBram Moolenaar  call assert_equal(['three', 'four'], getreg('"', 1, 1))
500bb861e29SBram Moolenaar  let info = getreginfo('"')
501bb861e29SBram Moolenaar  call assert_equal('x', info.points_to)
502bb861e29SBram Moolenaar  call assert_equal('v', info.regtype)
503bb861e29SBram Moolenaar  call assert_equal(1, +getreginfo('x').isunnamed)
504bb861e29SBram Moolenaar
505bb861e29SBram Moolenaar  call setreg('y', #{ regcontents: 'five',
506bb861e29SBram Moolenaar        \ regtype: "\<c-v>", isunnamed: v:false })
507bb861e29SBram Moolenaar  call assert_equal("\<c-v>4", getreginfo('y').regtype)
508bb861e29SBram Moolenaar  call assert_equal(0, +getreginfo('y').isunnamed)
509bb861e29SBram Moolenaar  call assert_equal(['three', 'four'], getreg('"', 1, 1))
510bb861e29SBram Moolenaar  call assert_equal('x', getreginfo('"').points_to)
511bb861e29SBram Moolenaar
512bb861e29SBram Moolenaar  call setreg('"', #{ regcontents: 'six' })
513bb861e29SBram Moolenaar  call assert_equal('0', getreginfo('"').points_to)
514bb861e29SBram Moolenaar  call assert_equal(1, +getreginfo('0').isunnamed)
515bb861e29SBram Moolenaar  call assert_equal(['six'], getreginfo('0').regcontents)
516bb861e29SBram Moolenaar  call assert_equal(['six'], getreginfo('"').regcontents)
517bb861e29SBram Moolenaar
5187633fe59SBram Moolenaar  let @x = 'one'
5197633fe59SBram Moolenaar  call setreg('x', {})
5207633fe59SBram Moolenaar  call assert_equal(1, len(split(execute('reg x'), '\n')))
5217633fe59SBram Moolenaar
5227633fe59SBram Moolenaar  call assert_fails("call setreg('0', #{regtype: 'V'}, 'v')", 'E118:')
5237633fe59SBram Moolenaar  call assert_fails("call setreg('0', #{regtype: 'X'})", 'E475:')
5247633fe59SBram Moolenaar  call assert_fails("call setreg('0', #{regtype: 'vy'})", 'E475:')
5257633fe59SBram Moolenaar
526bb861e29SBram Moolenaar  bwipe!
527bb861e29SBram Moolenaarendfunc
528bb861e29SBram Moolenaar
529cc613031SBram Moolenaarfunc Test_v_register()
530cc613031SBram Moolenaar  enew
531cc613031SBram Moolenaar  call setline(1, 'nothing')
532cc613031SBram Moolenaar
533cc613031SBram Moolenaar  func s:Put()
534cc613031SBram Moolenaar    let s:register = v:register
535cc613031SBram Moolenaar    exec 'normal! "' .. v:register .. 'P'
536cc613031SBram Moolenaar  endfunc
537cc613031SBram Moolenaar  nnoremap <buffer> <plug>(test) :<c-u>call s:Put()<cr>
538cc613031SBram Moolenaar  nmap <buffer> S <plug>(test)
539cc613031SBram Moolenaar
540cc613031SBram Moolenaar  let @z = "testz\n"
541cc613031SBram Moolenaar  let @" = "test@\n"
542cc613031SBram Moolenaar
543cc613031SBram Moolenaar  let s:register = ''
544cc613031SBram Moolenaar  call feedkeys('"_ddS', 'mx')
545cc613031SBram Moolenaar  call assert_equal('test@', getline('.'))  " fails before 8.2.0929
546cc613031SBram Moolenaar  call assert_equal('"', s:register)        " fails before 8.2.0929
547cc613031SBram Moolenaar
548cc613031SBram Moolenaar  let s:register = ''
549cc613031SBram Moolenaar  call feedkeys('"zS', 'mx')
550cc613031SBram Moolenaar  call assert_equal('z', s:register)
551cc613031SBram Moolenaar
552cc613031SBram Moolenaar  let s:register = ''
553cc613031SBram Moolenaar  call feedkeys('"zSS', 'mx')
554cc613031SBram Moolenaar  call assert_equal('"', s:register)
555cc613031SBram Moolenaar
556cc613031SBram Moolenaar  let s:register = ''
557cc613031SBram Moolenaar  call feedkeys('"_S', 'mx')
558cc613031SBram Moolenaar  call assert_equal('_', s:register)
559cc613031SBram Moolenaar
560cc613031SBram Moolenaar  let s:register = ''
561cc613031SBram Moolenaar  normal "_ddS
562cc613031SBram Moolenaar  call assert_equal('"', s:register)        " fails before 8.2.0929
563cc613031SBram Moolenaar  call assert_equal('test@', getline('.'))  " fails before 8.2.0929
564cc613031SBram Moolenaar
565cc613031SBram Moolenaar  let s:register = ''
566cc613031SBram Moolenaar  execute 'normal "z:call' "s:Put()\n"
567cc613031SBram Moolenaar  call assert_equal('z', s:register)
568cc613031SBram Moolenaar  call assert_equal('testz', getline('.'))
569cc613031SBram Moolenaar
570cc613031SBram Moolenaar  " Test operator and omap
571cc613031SBram Moolenaar  let @b = 'testb'
572cc613031SBram Moolenaar  func s:OpFunc(...)
573cc613031SBram Moolenaar    let s:register2 = v:register
574cc613031SBram Moolenaar  endfunc
575cc613031SBram Moolenaar  set opfunc=s:OpFunc
576cc613031SBram Moolenaar
577cc613031SBram Moolenaar  normal "bg@l
578cc613031SBram Moolenaar  normal S
579cc613031SBram Moolenaar  call assert_equal('"', s:register)        " fails before 8.2.0929
580cc613031SBram Moolenaar  call assert_equal('b', s:register2)
581cc613031SBram Moolenaar
582cc613031SBram Moolenaar  func s:Motion()
583cc613031SBram Moolenaar    let s:register1 = v:register
584cc613031SBram Moolenaar    normal! l
585cc613031SBram Moolenaar  endfunc
586cc613031SBram Moolenaar  onoremap <buffer> Q :<c-u>call s:Motion()<cr>
587cc613031SBram Moolenaar
588cc613031SBram Moolenaar  normal "bg@Q
589cc613031SBram Moolenaar  normal S
590cc613031SBram Moolenaar  call assert_equal('"', s:register)
591cc613031SBram Moolenaar  call assert_equal('b', s:register1)
592cc613031SBram Moolenaar  call assert_equal('"', s:register2)
593cc613031SBram Moolenaar
594cc613031SBram Moolenaar  set opfunc&
595cc613031SBram Moolenaar  bwipe!
596cc613031SBram Moolenaarendfunc
597cc613031SBram Moolenaar
598856c1110SBram Moolenaar" Test for executing the contents of a register as an Ex command with line
599856c1110SBram Moolenaar" continuation.
600856c1110SBram Moolenaarfunc Test_execute_reg_as_ex_cmd()
601856c1110SBram Moolenaar  " Line continuation with just two lines
602856c1110SBram Moolenaar  let code =<< trim END
603856c1110SBram Moolenaar    let l = [
604856c1110SBram Moolenaar      \ 1]
605856c1110SBram Moolenaar  END
606856c1110SBram Moolenaar  let @r = code->join("\n")
607856c1110SBram Moolenaar  let l = []
608856c1110SBram Moolenaar  @r
609856c1110SBram Moolenaar  call assert_equal([1], l)
610856c1110SBram Moolenaar
611856c1110SBram Moolenaar  " Line continuation with more than two lines
612856c1110SBram Moolenaar  let code =<< trim END
613856c1110SBram Moolenaar    let l = [
614856c1110SBram Moolenaar      \ 1,
615856c1110SBram Moolenaar      \ 2,
616856c1110SBram Moolenaar      \ 3]
617856c1110SBram Moolenaar  END
618856c1110SBram Moolenaar  let @r = code->join("\n")
619856c1110SBram Moolenaar  let l = []
620856c1110SBram Moolenaar  @r
621856c1110SBram Moolenaar  call assert_equal([1, 2, 3], l)
622856c1110SBram Moolenaar
623856c1110SBram Moolenaar  " use comments interspersed with code
624856c1110SBram Moolenaar  let code =<< trim END
625856c1110SBram Moolenaar    let l = [
626856c1110SBram Moolenaar      "\ one
627856c1110SBram Moolenaar      \ 1,
628856c1110SBram Moolenaar      "\ two
629856c1110SBram Moolenaar      \ 2,
630856c1110SBram Moolenaar      "\ three
631856c1110SBram Moolenaar      \ 3]
632856c1110SBram Moolenaar  END
633856c1110SBram Moolenaar  let @r = code->join("\n")
634856c1110SBram Moolenaar  let l = []
635856c1110SBram Moolenaar  @r
636856c1110SBram Moolenaar  call assert_equal([1, 2, 3], l)
637856c1110SBram Moolenaar
638856c1110SBram Moolenaar  " use line continuation in the middle
639856c1110SBram Moolenaar  let code =<< trim END
640856c1110SBram Moolenaar    let a = "one"
641856c1110SBram Moolenaar    let l = [
642856c1110SBram Moolenaar      \ 1,
643856c1110SBram Moolenaar      \ 2]
644856c1110SBram Moolenaar    let b = "two"
645856c1110SBram Moolenaar  END
646856c1110SBram Moolenaar  let @r = code->join("\n")
647856c1110SBram Moolenaar  let l = []
648856c1110SBram Moolenaar  @r
649856c1110SBram Moolenaar  call assert_equal([1, 2], l)
650856c1110SBram Moolenaar  call assert_equal("one", a)
651856c1110SBram Moolenaar  call assert_equal("two", b)
652856c1110SBram Moolenaar
653856c1110SBram Moolenaar  " only one line with a \
654856c1110SBram Moolenaar  let @r = "\\let l = 1"
655856c1110SBram Moolenaar  call assert_fails('@r', 'E10:')
656856c1110SBram Moolenaar
657856c1110SBram Moolenaar  " only one line with a "\
658856c1110SBram Moolenaar  let @r = '   "\ let i = 1'
659856c1110SBram Moolenaar  @r
660856c1110SBram Moolenaar  call assert_false(exists('i'))
661856c1110SBram Moolenaar
662856c1110SBram Moolenaar  " first line also begins with a \
663856c1110SBram Moolenaar  let @r = "\\let l = [\n\\ 1]"
664856c1110SBram Moolenaar  call assert_fails('@r', 'E10:')
665856c1110SBram Moolenaar
666856c1110SBram Moolenaar  " Test with a large number of lines
667856c1110SBram Moolenaar  let @r = "let str = \n"
668856c1110SBram Moolenaar  let @r ..= repeat("  \\ 'abcdefghijklmnopqrstuvwxyz' ..\n", 312)
669856c1110SBram Moolenaar  let @r ..= '  \ ""'
670856c1110SBram Moolenaar  @r
671856c1110SBram Moolenaar  call assert_equal(repeat('abcdefghijklmnopqrstuvwxyz', 312), str)
672856c1110SBram Moolenaarendfunc
673856c1110SBram Moolenaar
67425fd2672SBram Moolenaar" Test for clipboard registers with ASCII NUL
67525fd2672SBram Moolenaarfunc Test_clipboard_nul()
67625fd2672SBram Moolenaar  CheckFeature clipboard_working
67725fd2672SBram Moolenaar  new
67825fd2672SBram Moolenaar
67925fd2672SBram Moolenaar  " Test for putting ASCII NUL into the clipboard
68025fd2672SBram Moolenaar  set clipboard=unnamed
68125fd2672SBram Moolenaar  call append(0, "\ntest")
68225fd2672SBram Moolenaar  normal ggyyp
68325fd2672SBram Moolenaar  call assert_equal("^@test^@", strtrans(getreg('*')))
68425fd2672SBram Moolenaar  call assert_equal(getline(1), getline(2))
68525fd2672SBram Moolenaar  let b = split(execute(":reg *"), "\n")
68625fd2672SBram Moolenaar  call assert_match('"\*\s*\^@test\^J',b[1])
68725fd2672SBram Moolenaar
68825fd2672SBram Moolenaar  set clipboard&vim
68925fd2672SBram Moolenaar  bwipe!
69025fd2672SBram Moolenaarendfunc
69125fd2672SBram Moolenaar
692ef85a9b2SBram Moolenaarfunc Test_ve_blockpaste()
693ef85a9b2SBram Moolenaar  new
694ef85a9b2SBram Moolenaar  set ve=all
695ef85a9b2SBram Moolenaar  0put =['QWERTZ','ASDFGH']
696ef85a9b2SBram Moolenaar  call cursor(1,1)
697ef85a9b2SBram Moolenaar  exe ":norm! \<C-V>3ljdP"
698ef85a9b2SBram Moolenaar  call assert_equal(1, col('.'))
699ef85a9b2SBram Moolenaar  call assert_equal(getline(1, 2), ['QWERTZ', 'ASDFGH'])
700ef85a9b2SBram Moolenaar  call cursor(1,1)
701ef85a9b2SBram Moolenaar  exe ":norm! \<C-V>3ljd"
702ef85a9b2SBram Moolenaar  call cursor(1,1)
703ef85a9b2SBram Moolenaar  norm! $3lP
704ef85a9b2SBram Moolenaar  call assert_equal(5, col('.'))
705ef85a9b2SBram Moolenaar  call assert_equal(getline(1, 2), ['TZ  QWER', 'GH  ASDF'])
706ef85a9b2SBram Moolenaar  set ve&vim
707ef85a9b2SBram Moolenaar  bwipe!
708ef85a9b2SBram Moolenaarendfunc
709ef85a9b2SBram Moolenaar
710032a2d05SBram Moolenaarfunc Test_insert_small_delete()
711032a2d05SBram Moolenaar  new
712032a2d05SBram Moolenaar  call setline(1, ['foo foobar bar'])
713032a2d05SBram Moolenaar  call cursor(1,1)
714032a2d05SBram Moolenaar  exe ":norm! ciw'\<C-R>-'"
7159f63a65fSBram Moolenaar  call assert_equal("'foo' foobar bar", getline(1))
716032a2d05SBram Moolenaar  exe ":norm! w.w."
7179f63a65fSBram Moolenaar  call assert_equal("'foo' 'foobar' 'bar'", getline(1))
718032a2d05SBram Moolenaar  bwipe!
719032a2d05SBram Moolenaarendfunc
720032a2d05SBram Moolenaar
721f4fcedc5SBram Moolenaar" Record in insert mode using CTRL-O
722f4fcedc5SBram Moolenaarfunc Test_record_in_insert_mode()
723f4fcedc5SBram Moolenaar  new
724f4fcedc5SBram Moolenaar  let @r = ''
725f4fcedc5SBram Moolenaar  call setline(1, ['foo'])
726f4fcedc5SBram Moolenaar  call feedkeys("i\<C-O>qrbaz\<C-O>q", 'xt')
727f4fcedc5SBram Moolenaar  call assert_equal('baz', @r)
728f4fcedc5SBram Moolenaar  bwipe!
729f4fcedc5SBram Moolenaarendfunc
730f4fcedc5SBram Moolenaar
731*78eb9cceSChristian Brabandt" Make sure that y_append is correctly reset
732*78eb9cceSChristian Brabandt" and the previous register is working as expected
733*78eb9cceSChristian Brabandtfunc Test_register_y_append_reset()
734*78eb9cceSChristian Brabandt  new
735*78eb9cceSChristian Brabandt  call setline(1, ['1',
736*78eb9cceSChristian Brabandt    \ '2 ----------------------------------------------------',
737*78eb9cceSChristian Brabandt    \ '3',
738*78eb9cceSChristian Brabandt    \ '4',
739*78eb9cceSChristian Brabandt    \ '5 ----------------------------------------------------',
740*78eb9cceSChristian Brabandt    \ '6',
741*78eb9cceSChristian Brabandt    \ '7',
742*78eb9cceSChristian Brabandt    \ '8 ----------------------------------------------------',
743*78eb9cceSChristian Brabandt    \ '9',
744*78eb9cceSChristian Brabandt    \ '10 aaaaaaa 4.',
745*78eb9cceSChristian Brabandt    \ '11 Game Dbl-Figures Leaders:',
746*78eb9cceSChristian Brabandt    \ '12 Player Pts FG% 3P% FT% RB AS BL ST TO PF EFF',
747*78eb9cceSChristian Brabandt    \ '13 bbbbbbbbb 12 (50 /0 /67 )/ 7/ 3/ 0/ 2/ 3/ 4/+15',
748*78eb9cceSChristian Brabandt    \ '14 cccccc 12 (57 /67 /100)/ 2/ 1/ 1/ 0/ 1/ 3/+12',
749*78eb9cceSChristian Brabandt    \ '15 ddddddd 10 (63 /0 /0 )/ 1/ 3/ 0/ 3/ 5/ 3/ +9',
750*78eb9cceSChristian Brabandt    \ '16 4 5-15 0-3 2-2 5-12 1-1 3-4 33.3 0.0 100 41.7 100 75 12 14',
751*78eb9cceSChristian Brabandt    \ '17 F 23-55 2-10 9-11 23-52 3-13 26-29 41.8 20 81.8 44.2 23.1 89.7 57 75',
752*78eb9cceSChristian Brabandt    \ '18 4 3 6 3 2 3 3 4 3 3 7 3 1 4 6 -1 -1 +2 -1 -2',
753*78eb9cceSChristian Brabandt    \ '19 F 13 19 5 10 4 17 22 9 14 32 13 4 20 17 -1 -13 -4 -3 -3 +5'])
754*78eb9cceSChristian Brabandt  11
755*78eb9cceSChristian Brabandt  exe "norm! \"a5dd"
756*78eb9cceSChristian Brabandt  norm! j
757*78eb9cceSChristian Brabandt  exe "norm! \"bY"
758*78eb9cceSChristian Brabandt  norm! 2j
759*78eb9cceSChristian Brabandt  exe "norm! \"BY"
760*78eb9cceSChristian Brabandt  norm! 4k
761*78eb9cceSChristian Brabandt  norm! 5dd
762*78eb9cceSChristian Brabandt  norm! 3k
763*78eb9cceSChristian Brabandt  " The next put should put the content of the unnamed register, not of
764*78eb9cceSChristian Brabandt  " register b!
765*78eb9cceSChristian Brabandt  norm! p
766*78eb9cceSChristian Brabandt  call assert_equal(['1',
767*78eb9cceSChristian Brabandt    \ '2 ----------------------------------------------------',
768*78eb9cceSChristian Brabandt    \ '3',
769*78eb9cceSChristian Brabandt    \ '4',
770*78eb9cceSChristian Brabandt    \ '5 ----------------------------------------------------',
771*78eb9cceSChristian Brabandt    \ '6',
772*78eb9cceSChristian Brabandt    \ '10 aaaaaaa 4.',
773*78eb9cceSChristian Brabandt    \ '16 4 5-15 0-3 2-2 5-12 1-1 3-4 33.3 0.0 100 41.7 100 75 12 14',
774*78eb9cceSChristian Brabandt    \ '17 F 23-55 2-10 9-11 23-52 3-13 26-29 41.8 20 81.8 44.2 23.1 89.7 57 75',
775*78eb9cceSChristian Brabandt    \ '18 4 3 6 3 2 3 3 4 3 3 7 3 1 4 6 -1 -1 +2 -1 -2',
776*78eb9cceSChristian Brabandt    \ '19 F 13 19 5 10 4 17 22 9 14 32 13 4 20 17 -1 -13 -4 -3 -3 +5',
777*78eb9cceSChristian Brabandt    \ '7',
778*78eb9cceSChristian Brabandt    \ '8 ----------------------------------------------------',
779*78eb9cceSChristian Brabandt    \ '9'], getline(1,'$'))
780*78eb9cceSChristian Brabandt  bwipe!
781*78eb9cceSChristian Brabandtendfunc
782*78eb9cceSChristian Brabandt
78371136db1SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
784