blob: 6450989ec01d85e4eb8c3dfe07eedac55cf3fc23 [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 Moolenaarbff6ad12017-01-24 19:18:13 +01003" Bracketed paste only works with "xterm". Not in GUI.
4if has('gui_running')
5 finish
6endif
Bram Moolenaar076e5022017-01-24 18:58:30 +01007set term=xterm
8
9func Test_paste_normal_mode()
10 new
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010011 " In first column text is inserted
Bram Moolenaar076e5022017-01-24 18:58:30 +010012 call setline(1, ['a', 'b', 'c'])
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010013 call cursor(2, 1)
Bram Moolenaar076e5022017-01-24 18:58:30 +010014 call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010015 call assert_equal('foo', getline(2))
16 call assert_equal('barb', getline(3))
Bram Moolenaar076e5022017-01-24 18:58:30 +010017 call assert_equal('c', getline(4))
18
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010019 " When repeating text is appended
Bram Moolenaar076e5022017-01-24 18:58:30 +010020 normal .
21 call assert_equal('barfoo', getline(3))
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010022 call assert_equal('barb', getline(4))
Bram Moolenaar076e5022017-01-24 18:58:30 +010023 call assert_equal('c', getline(5))
24 bwipe!
Bram Moolenaarfd8983b2017-02-02 22:21:29 +010025
26 " In second column text is appended
27 call setline(1, ['a', 'bbb', 'c'])
28 call cursor(2, 2)
29 call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
30 call assert_equal('bbfoo', getline(2))
31 call assert_equal('barb', getline(3))
32 call assert_equal('c', getline(4))
33
34 " In last column text is appended
35 call setline(1, ['a', 'bbb', 'c'])
36 call cursor(2, 3)
37 call feedkeys("\<Esc>[200~foo\<CR>bar\<Esc>[201~", 'xt')
38 call assert_equal('bbbfoo', getline(2))
39 call assert_equal('bar', getline(3))
40 call assert_equal('c', getline(4))
Bram Moolenaar076e5022017-01-24 18:58:30 +010041endfunc
42
43func Test_paste_insert_mode()
44 new
45 call setline(1, ['a', 'b', 'c'])
46 2
47 call feedkeys("i\<Esc>[200~foo\<CR>bar\<Esc>[201~ done\<Esc>", 'xt')
48 call assert_equal('foo', getline(2))
49 call assert_equal('bar doneb', getline(3))
50 call assert_equal('c', getline(4))
51
52 normal .
53 call assert_equal('bar donfoo', getline(3))
54 call assert_equal('bar doneeb', getline(4))
55 call assert_equal('c', getline(5))
Bram Moolenaar9e817c82017-01-25 21:36:17 +010056
57 set ai et tw=10
58 call setline(1, ['a', ' b', 'c'])
59 2
60 call feedkeys("A\<Esc>[200~foo\<CR> bar bar bar\<Esc>[201~\<Esc>", 'xt')
61 call assert_equal(' bfoo', getline(2))
62 call assert_equal(' bar bar bar', getline(3))
63 call assert_equal('c', getline(4))
64
65 set ai& et& tw=0
Bram Moolenaar076e5022017-01-24 18:58:30 +010066 bwipe!
67endfunc
68
Bram Moolenaar3324d0a2018-03-06 19:51:13 +010069func Test_paste_clipboard()
70 if !has('clipboard')
71 return
72 endif
73 let @+ = "nasty\<Esc>:!ls\<CR>command"
74 new
75 exe "normal i\<C-R>+\<Esc>"
76 call assert_equal("nasty\<Esc>:!ls\<CR>command", getline(1))
77 bwipe!
78endfunc
79
Bram Moolenaar076e5022017-01-24 18:58:30 +010080func Test_paste_cmdline()
81 call feedkeys(":a\<Esc>[200~foo\<CR>bar\<Esc>[201~b\<Home>\"\<CR>", 'xt')
82 call assert_equal("\"afoo\<CR>barb", getreg(':'))
83endfunc
Bram Moolenaara1891842017-02-04 21:34:31 +010084
85func Test_paste_visual_mode()
86 new
87 call setline(1, 'here are some words')
88 call feedkeys("0fsve\<Esc>[200~more\<Esc>[201~", 'xt')
89 call assert_equal('here are more words', getline(1))
90 call assert_equal('some', getreg('-'))
91
92 " include last char in the line
93 call feedkeys("0fwve\<Esc>[200~noises\<Esc>[201~", 'xt')
94 call assert_equal('here are more noises', getline(1))
95 call assert_equal('words', getreg('-'))
96
97 " exclude last char in the line
98 call setline(1, 'some words!')
99 call feedkeys("0fwve\<Esc>[200~noises\<Esc>[201~", 'xt')
100 call assert_equal('some noises!', getline(1))
101 call assert_equal('words', getreg('-'))
102
103 " multi-line selection
104 call setline(1, ['some words', 'and more'])
105 call feedkeys("0fwvj0fd\<Esc>[200~letters\<Esc>[201~", 'xt')
106 call assert_equal('some letters more', getline(1))
107 call assert_equal("words\nand", getreg('1'))
108
109 bwipe!
110endfunc