blob: f3664f6a6207dd886f5df1f2e8a86487236da53b [file] [log] [blame]
Bram Moolenaar3324d0a2018-03-06 19:51:13 +01001" Tests for bracketed paste and other forms of pasting.
Bram Moolenaar076e5022017-01-24 18:58:30 +01002
Bram Moolenaar832615b2019-03-23 13:30:22 +01003" Bracketed paste only works with "xterm". Not in GUI or Windows console.
4if has('gui_running') || has('win32')
Bram Moolenaarbff6ad12017-01-24 19:18:13 +01005 finish
6endif
Bram Moolenaar076e5022017-01-24 18:58:30 +01007set term=xterm
8
Bram Moolenaara9034722018-03-13 15:43:46 +01009source shared.vim
10
Bram Moolenaar076e5022017-01-24 18:58:30 +010011func Test_paste_normal_mode()
12 new
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010013 " In first column text is inserted
Bram Moolenaar076e5022017-01-24 18:58:30 +010014 call setline(1, ['a', 'b', 'c'])
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010015 call cursor(2, 1)
Bram Moolenaar076e5022017-01-24 18:58:30 +010016 call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010017 call assert_equal('foo', getline(2))
18 call assert_equal('barb', getline(3))
Bram Moolenaar076e5022017-01-24 18:58:30 +010019 call assert_equal('c', getline(4))
20
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010021 " When repeating text is appended
Bram Moolenaar076e5022017-01-24 18:58:30 +010022 normal .
23 call assert_equal('barfoo', getline(3))
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010024 call assert_equal('barb', getline(4))
Bram Moolenaar076e5022017-01-24 18:58:30 +010025 call assert_equal('c', getline(5))
26 bwipe!
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010027
28 " In second column text is appended
29 call setline(1, ['a', 'bbb', 'c'])
30 call cursor(2, 2)
31 call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
32 call assert_equal('bbfoo', getline(2))
33 call assert_equal('barb', getline(3))
34 call assert_equal('c', getline(4))
35
36 " In last column text is appended
37 call setline(1, ['a', 'bbb', 'c'])
38 call cursor(2, 3)
39 call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
40 call assert_equal('bbbfoo', getline(2))
41 call assert_equal('bar', getline(3))
42 call assert_equal('c', getline(4))
Bram Moolenaar076e5022017-01-24 18:58:30 +010043endfunc
44
45func Test_paste_insert_mode()
46 new
47 call setline(1, ['a', 'b', 'c'])
48 2
49 call feedkeys("i\<Esc>[200~foo\<CR>bar\<Esc>[201~ done\<Esc>", 'xt')
50 call assert_equal('foo', getline(2))
51 call assert_equal('bar doneb', getline(3))
52 call assert_equal('c', getline(4))
53
54 normal .
55 call assert_equal('bar donfoo', getline(3))
56 call assert_equal('bar doneeb', getline(4))
57 call assert_equal('c', getline(5))
Bram Moolenaar9e817c82017-01-25 21:36:17 +010058
59 set ai et tw=10
60 call setline(1, ['a', ' b', 'c'])
61 2
62 call feedkeys("A\<Esc>[200~foo\<CR> bar bar bar\<Esc>[201~\<Esc>", 'xt')
63 call assert_equal(' bfoo', getline(2))
64 call assert_equal(' bar bar bar', getline(3))
65 call assert_equal('c', getline(4))
66
67 set ai& et& tw=0
Bram Moolenaar076e5022017-01-24 18:58:30 +010068 bwipe!
69endfunc
70
Bram Moolenaar3324d0a2018-03-06 19:51:13 +010071func Test_paste_clipboard()
Bram Moolenaara9034722018-03-13 15:43:46 +010072 if !WorkingClipboard()
Bram Moolenaar3324d0a2018-03-06 19:51:13 +010073 return
74 endif
75 let @+ = "nasty\<Esc>:!ls\<CR>command"
76 new
77 exe "normal i\<C-R>+\<Esc>"
78 call assert_equal("nasty\<Esc>:!ls\<CR>command", getline(1))
79 bwipe!
80endfunc
81
Bram Moolenaar076e5022017-01-24 18:58:30 +010082func Test_paste_cmdline()
83 call feedkeys(":a\<Esc>[200~foo\<CR>bar\<Esc>[201~b\<Home>\"\<CR>", 'xt')
84 call assert_equal("\"afoo\<CR>barb", getreg(':'))
85endfunc
Bram Moolenaara1891842017-02-04 21:34:31 +010086
87func Test_paste_visual_mode()
88 new
89 call setline(1, 'here are some words')
90 call feedkeys("0fsve\<Esc>[200~more\<Esc>[201~", 'xt')
91 call assert_equal('here are more words', getline(1))
92 call assert_equal('some', getreg('-'))
93
94 " include last char in the line
95 call feedkeys("0fwve\<Esc>[200~noises\<Esc>[201~", 'xt')
96 call assert_equal('here are more noises', getline(1))
97 call assert_equal('words', getreg('-'))
98
99 " exclude last char in the line
100 call setline(1, 'some words!')
101 call feedkeys("0fwve\<Esc>[200~noises\<Esc>[201~", 'xt')
102 call assert_equal('some noises!', getline(1))
103 call assert_equal('words', getreg('-'))
104
105 " multi-line selection
106 call setline(1, ['some words', 'and more'])
107 call feedkeys("0fwvj0fd\<Esc>[200~letters\<Esc>[201~", 'xt')
108 call assert_equal('some letters more', getline(1))
109 call assert_equal("words\nand", getreg('1'))
110
111 bwipe!
112endfunc