xref: /vim-8.2.3635/src/testdir/test_paste.vim (revision f08b0eb8)
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