13324d0a8SBram Moolenaar" Tests for bracketed paste and other forms of pasting. 2076e5021SBram Moolenaar 3832615beSBram Moolenaar" Bracketed paste only works with "xterm". Not in GUI or Windows console. 48c5a278fSBram Moolenaarsource check.vim 58c5a278fSBram MoolenaarCheckNotMSWindows 68c5a278fSBram MoolenaarCheckNotGui 78c5a278fSBram Moolenaar 8076e5021SBram Moolenaarset term=xterm 9076e5021SBram Moolenaar 10a903472cSBram Moolenaarsource shared.vim 11a903472cSBram Moolenaar 12076e5021SBram Moolenaarfunc Test_paste_normal_mode() 13076e5021SBram Moolenaar new 14fd8983b0SBram Moolenaar " In first column text is inserted 15076e5021SBram Moolenaar call setline(1, ['a', 'b', 'c']) 16fd8983b0SBram Moolenaar call cursor(2, 1) 17076e5021SBram Moolenaar call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt') 18fd8983b0SBram Moolenaar call assert_equal('foo', getline(2)) 19fd8983b0SBram Moolenaar call assert_equal('barb', getline(3)) 20076e5021SBram Moolenaar call assert_equal('c', getline(4)) 21076e5021SBram Moolenaar 22fd8983b0SBram Moolenaar " When repeating text is appended 23076e5021SBram Moolenaar normal . 24076e5021SBram Moolenaar call assert_equal('barfoo', getline(3)) 25fd8983b0SBram Moolenaar call assert_equal('barb', getline(4)) 26076e5021SBram Moolenaar call assert_equal('c', getline(5)) 27076e5021SBram Moolenaar bwipe! 28fd8983b0SBram Moolenaar 29fd8983b0SBram Moolenaar " In second column text is appended 30fd8983b0SBram Moolenaar call setline(1, ['a', 'bbb', 'c']) 31fd8983b0SBram Moolenaar call cursor(2, 2) 32fd8983b0SBram Moolenaar call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt') 33fd8983b0SBram Moolenaar call assert_equal('bbfoo', getline(2)) 34fd8983b0SBram Moolenaar call assert_equal('barb', getline(3)) 35fd8983b0SBram Moolenaar call assert_equal('c', getline(4)) 36fd8983b0SBram Moolenaar 37fd8983b0SBram Moolenaar " In last column text is appended 38fd8983b0SBram Moolenaar call setline(1, ['a', 'bbb', 'c']) 39fd8983b0SBram Moolenaar call cursor(2, 3) 40fd8983b0SBram Moolenaar call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt') 41fd8983b0SBram Moolenaar call assert_equal('bbbfoo', getline(2)) 42fd8983b0SBram Moolenaar call assert_equal('bar', getline(3)) 43fd8983b0SBram Moolenaar call assert_equal('c', getline(4)) 44076e5021SBram Moolenaarendfunc 45076e5021SBram Moolenaar 46076e5021SBram Moolenaarfunc Test_paste_insert_mode() 47076e5021SBram Moolenaar new 48076e5021SBram Moolenaar call setline(1, ['a', 'b', 'c']) 49076e5021SBram Moolenaar 2 50076e5021SBram Moolenaar call feedkeys("i\<Esc>[200~foo\<CR>bar\<Esc>[201~ done\<Esc>", 'xt') 51076e5021SBram Moolenaar call assert_equal('foo', getline(2)) 52076e5021SBram Moolenaar call assert_equal('bar doneb', getline(3)) 53076e5021SBram Moolenaar call assert_equal('c', getline(4)) 54076e5021SBram Moolenaar 55076e5021SBram Moolenaar normal . 56076e5021SBram Moolenaar call assert_equal('bar donfoo', getline(3)) 57076e5021SBram Moolenaar call assert_equal('bar doneeb', getline(4)) 58076e5021SBram Moolenaar call assert_equal('c', getline(5)) 599e817c8aSBram Moolenaar 609e817c8aSBram Moolenaar set ai et tw=10 619e817c8aSBram Moolenaar call setline(1, ['a', ' b', 'c']) 629e817c8aSBram Moolenaar 2 639e817c8aSBram Moolenaar call feedkeys("A\<Esc>[200~foo\<CR> bar bar bar\<Esc>[201~\<Esc>", 'xt') 649e817c8aSBram Moolenaar call assert_equal(' bfoo', getline(2)) 659e817c8aSBram Moolenaar call assert_equal(' bar bar bar', getline(3)) 669e817c8aSBram Moolenaar call assert_equal('c', getline(4)) 679e817c8aSBram Moolenaar 689e817c8aSBram Moolenaar set ai& et& tw=0 69076e5021SBram Moolenaar bwipe! 70076e5021SBram Moolenaarendfunc 71076e5021SBram Moolenaar 723324d0a8SBram Moolenaarfunc Test_paste_clipboard() 7352992feaSBram Moolenaar CheckFeature clipboard_working 7452992feaSBram Moolenaar 753324d0a8SBram Moolenaar let @+ = "nasty\<Esc>:!ls\<CR>command" 763324d0a8SBram Moolenaar new 773324d0a8SBram Moolenaar exe "normal i\<C-R>+\<Esc>" 783324d0a8SBram Moolenaar call assert_equal("nasty\<Esc>:!ls\<CR>command", getline(1)) 793324d0a8SBram Moolenaar bwipe! 803324d0a8SBram Moolenaarendfunc 813324d0a8SBram Moolenaar 82845e0ee5SBram Moolenaar" bracketed paste in command line 83076e5021SBram Moolenaarfunc Test_paste_cmdline() 84076e5021SBram Moolenaar call feedkeys(":a\<Esc>[200~foo\<CR>bar\<Esc>[201~b\<Home>\"\<CR>", 'xt') 85076e5021SBram Moolenaar call assert_equal("\"afoo\<CR>barb", getreg(':')) 86076e5021SBram Moolenaarendfunc 87a1891848SBram Moolenaar 88845e0ee5SBram Moolenaar" bracketed paste in Ex-mode 89845e0ee5SBram Moolenaarfunc Test_paste_ex_mode() 90845e0ee5SBram Moolenaar unlet! foo 91845e0ee5SBram Moolenaar call feedkeys("Qlet foo=\"\<Esc>[200~foo\<CR>bar\<Esc>[201~\"\<CR>vi\<CR>", 'xt') 92845e0ee5SBram Moolenaar call assert_equal("foo\rbar", foo) 93845e0ee5SBram Moolenaarendfunc 94845e0ee5SBram Moolenaar 95845e0ee5SBram Moolenaarfunc Test_paste_onechar() 96845e0ee5SBram Moolenaar new 97845e0ee5SBram Moolenaar let @f='abc' 98845e0ee5SBram Moolenaar call feedkeys("i\<C-R>\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt') 99845e0ee5SBram Moolenaar call assert_equal("abc", getline(1)) 100845e0ee5SBram Moolenaar close! 101845e0ee5SBram Moolenaarendfunc 102845e0ee5SBram Moolenaar 103a1891848SBram Moolenaarfunc Test_paste_visual_mode() 104a1891848SBram Moolenaar new 105a1891848SBram Moolenaar call setline(1, 'here are some words') 106a1891848SBram Moolenaar call feedkeys("0fsve\<Esc>[200~more\<Esc>[201~", 'xt') 107a1891848SBram Moolenaar call assert_equal('here are more words', getline(1)) 108a1891848SBram Moolenaar call assert_equal('some', getreg('-')) 109a1891848SBram Moolenaar 110a1891848SBram Moolenaar " include last char in the line 111a1891848SBram Moolenaar call feedkeys("0fwve\<Esc>[200~noises\<Esc>[201~", 'xt') 112a1891848SBram Moolenaar call assert_equal('here are more noises', getline(1)) 113a1891848SBram Moolenaar call assert_equal('words', getreg('-')) 114a1891848SBram Moolenaar 115a1891848SBram Moolenaar " exclude last char in the line 116a1891848SBram Moolenaar call setline(1, 'some words!') 117a1891848SBram Moolenaar call feedkeys("0fwve\<Esc>[200~noises\<Esc>[201~", 'xt') 118a1891848SBram Moolenaar call assert_equal('some noises!', getline(1)) 119a1891848SBram Moolenaar call assert_equal('words', getreg('-')) 120a1891848SBram Moolenaar 121a1891848SBram Moolenaar " multi-line selection 122a1891848SBram Moolenaar call setline(1, ['some words', 'and more']) 123a1891848SBram Moolenaar call feedkeys("0fwvj0fd\<Esc>[200~letters\<Esc>[201~", 'xt') 124a1891848SBram Moolenaar call assert_equal('some letters more', getline(1)) 125a1891848SBram Moolenaar call assert_equal("words\nand", getreg('1')) 126a1891848SBram Moolenaar 127a1891848SBram Moolenaar bwipe! 128a1891848SBram Moolenaarendfunc 129d4aa83afSBram Moolenaar 130d4aa83afSBram Moolenaarfunc CheckCopyPaste() 131d4aa83afSBram Moolenaar call setline(1, ['copy this', '']) 132d4aa83afSBram Moolenaar normal 1G0"*y$ 133d4aa83afSBram Moolenaar normal j"*p 134d4aa83afSBram Moolenaar call assert_equal('copy this', getline(2)) 135d4aa83afSBram Moolenaarendfunc 136d4aa83afSBram Moolenaar 137d4aa83afSBram Moolenaarfunc Test_xrestore() 1386d91bcb4SBram Moolenaar CheckFeature xterm_clipboard 139*f08b0eb8SBram Moolenaar let g:test_is_flaky = 1 140*f08b0eb8SBram Moolenaar 141d4aa83afSBram Moolenaar let display = $DISPLAY 142d4aa83afSBram Moolenaar new 143d4aa83afSBram Moolenaar call CheckCopyPaste() 144d4aa83afSBram Moolenaar 145d4aa83afSBram Moolenaar xrestore 146d4aa83afSBram Moolenaar call CheckCopyPaste() 147d4aa83afSBram Moolenaar 148d4aa83afSBram Moolenaar exe "xrestore " .. display 149d4aa83afSBram Moolenaar call CheckCopyPaste() 150d4aa83afSBram Moolenaar 151d4aa83afSBram Moolenaar bwipe! 152d4aa83afSBram Moolenaarendfunc 153845e0ee5SBram Moolenaar 154f4fcedc5SBram Moolenaar" Test for 'pastetoggle' 155f4fcedc5SBram Moolenaarfunc Test_pastetoggle() 156f4fcedc5SBram Moolenaar new 157f4fcedc5SBram Moolenaar set pastetoggle=<F4> 158f4fcedc5SBram Moolenaar set nopaste 159f4fcedc5SBram Moolenaar call feedkeys("iHello\<F4>", 'xt') 160f4fcedc5SBram Moolenaar call assert_true(&paste) 161f4fcedc5SBram Moolenaar call feedkeys("i\<F4>", 'xt') 162f4fcedc5SBram Moolenaar call assert_false(&paste) 163f4fcedc5SBram Moolenaar call assert_equal('Hello', getline(1)) 1642d6d718dSYegappan Lakshmanan " command-line completion for 'pastetoggle' value 1652d6d718dSYegappan Lakshmanan call feedkeys(":set pastetoggle=\<Tab>\<C-B>\"\<CR>", 'xt') 1662d6d718dSYegappan Lakshmanan call assert_equal('"set pastetoggle=<F4>', @:) 167f4fcedc5SBram Moolenaar set pastetoggle& 168f4fcedc5SBram Moolenaar bwipe! 169f4fcedc5SBram Moolenaarendfunc 170f4fcedc5SBram Moolenaar 1712d6d718dSYegappan Lakshmanan" Test for restoring option values when 'paste' is disabled 1722d6d718dSYegappan Lakshmananfunc Test_paste_opt_restore() 1732d6d718dSYegappan Lakshmanan set autoindent expandtab ruler showmatch 1742d6d718dSYegappan Lakshmanan if has('rightleft') 1752d6d718dSYegappan Lakshmanan set revins hkmap 1762d6d718dSYegappan Lakshmanan endif 1772d6d718dSYegappan Lakshmanan set smarttab softtabstop=3 textwidth=27 wrapmargin=12 1782d6d718dSYegappan Lakshmanan if has('vartabs') 1792d6d718dSYegappan Lakshmanan set varsofttabstop=10,20 1802d6d718dSYegappan Lakshmanan endif 1812d6d718dSYegappan Lakshmanan 1822d6d718dSYegappan Lakshmanan " enabling 'paste' should reset the above options 1832d6d718dSYegappan Lakshmanan set paste 1842d6d718dSYegappan Lakshmanan call assert_false(&autoindent) 1852d6d718dSYegappan Lakshmanan call assert_false(&expandtab) 1862d6d718dSYegappan Lakshmanan if has('rightleft') 1872d6d718dSYegappan Lakshmanan call assert_false(&revins) 1882d6d718dSYegappan Lakshmanan call assert_false(&hkmap) 1892d6d718dSYegappan Lakshmanan endif 1902d6d718dSYegappan Lakshmanan call assert_false(&ruler) 1912d6d718dSYegappan Lakshmanan call assert_false(&showmatch) 1922d6d718dSYegappan Lakshmanan call assert_false(&smarttab) 1932d6d718dSYegappan Lakshmanan call assert_equal(0, &softtabstop) 1942d6d718dSYegappan Lakshmanan call assert_equal(0, &textwidth) 1952d6d718dSYegappan Lakshmanan call assert_equal(0, &wrapmargin) 1962d6d718dSYegappan Lakshmanan if has('vartabs') 1972d6d718dSYegappan Lakshmanan call assert_equal('', &varsofttabstop) 1982d6d718dSYegappan Lakshmanan endif 1992d6d718dSYegappan Lakshmanan 2002d6d718dSYegappan Lakshmanan " disabling 'paste' should restore the option values 2012d6d718dSYegappan Lakshmanan set nopaste 2022d6d718dSYegappan Lakshmanan call assert_true(&autoindent) 2032d6d718dSYegappan Lakshmanan call assert_true(&expandtab) 2042d6d718dSYegappan Lakshmanan if has('rightleft') 2052d6d718dSYegappan Lakshmanan call assert_true(&revins) 2062d6d718dSYegappan Lakshmanan call assert_true(&hkmap) 2072d6d718dSYegappan Lakshmanan endif 2082d6d718dSYegappan Lakshmanan call assert_true(&ruler) 2092d6d718dSYegappan Lakshmanan call assert_true(&showmatch) 2102d6d718dSYegappan Lakshmanan call assert_true(&smarttab) 2112d6d718dSYegappan Lakshmanan call assert_equal(3, &softtabstop) 2122d6d718dSYegappan Lakshmanan call assert_equal(27, &textwidth) 2132d6d718dSYegappan Lakshmanan call assert_equal(12, &wrapmargin) 2142d6d718dSYegappan Lakshmanan if has('vartabs') 2152d6d718dSYegappan Lakshmanan call assert_equal('10,20', &varsofttabstop) 2162d6d718dSYegappan Lakshmanan endif 2172d6d718dSYegappan Lakshmanan 2182d6d718dSYegappan Lakshmanan set autoindent& expandtab& ruler& showmatch& 2192d6d718dSYegappan Lakshmanan if has('rightleft') 2202d6d718dSYegappan Lakshmanan set revins& hkmap& 2212d6d718dSYegappan Lakshmanan endif 2222d6d718dSYegappan Lakshmanan set smarttab& softtabstop& textwidth& wrapmargin& 2232d6d718dSYegappan Lakshmanan if has('vartabs') 2242d6d718dSYegappan Lakshmanan set varsofttabstop& 2252d6d718dSYegappan Lakshmanan endif 2262d6d718dSYegappan Lakshmananendfunc 2272d6d718dSYegappan Lakshmanan 228845e0ee5SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 229