1
2func Test_yank_shows_register()
3    enew
4    set report=0
5    call setline(1, ['foo', 'bar'])
6    " Line-wise
7    exe 'norm! yy'
8    call assert_equal('1 line yanked', v:statusmsg)
9    exe 'norm! "zyy'
10    call assert_equal('1 line yanked into "z', v:statusmsg)
11    exe 'norm! yj'
12    call assert_equal('2 lines yanked', v:statusmsg)
13    exe 'norm! "zyj'
14    call assert_equal('2 lines yanked into "z', v:statusmsg)
15
16    " Block-wise
17    exe "norm! \<C-V>y"
18    call assert_equal('block of 1 line yanked', v:statusmsg)
19    exe "norm! \<C-V>\"zy"
20    call assert_equal('block of 1 line yanked into "z', v:statusmsg)
21    exe "norm! \<C-V>jy"
22    call assert_equal('block of 2 lines yanked', v:statusmsg)
23    exe "norm! \<C-V>j\"zy"
24    call assert_equal('block of 2 lines yanked into "z', v:statusmsg)
25
26    bwipe!
27endfunc
28
29func Test_display_registers()
30    e file1
31    e file2
32    call setline(1, ['foo', 'bar'])
33    /bar
34    exe 'norm! y2l"axx'
35    call feedkeys("i\<C-R>=2*4\n\<esc>")
36    call feedkeys(":ls\n", 'xt')
37
38    let a = execute('display')
39    let b = execute('registers')
40
41    call assert_equal(a, b)
42    call assert_match('^\n--- Registers ---\n'
43          \ .         '""   a\n'
44          \ .         '"0   ba\n'
45          \ .         '"a   b\n'
46          \ .         '.*'
47          \ .         '"-   a\n'
48          \ .         '.*'
49          \ .         '":   ls\n'
50          \ .         '"%   file2\n'
51          \ .         '"#   file1\n'
52          \ .         '"/   bar\n'
53          \ .         '"=   2\*4', a)
54
55    let a = execute('registers a')
56    call assert_match('^\n--- Registers ---\n'
57          \ .         '"a   b', a)
58
59    let a = execute('registers :')
60    call assert_match('^\n--- Registers ---\n'
61          \ .         '":   ls', a)
62
63    bwipe!
64endfunc
65
66func Test_register_one()
67  " delete a line goes into register one
68  new
69  call setline(1, "one")
70  normal dd
71  call assert_equal("one\n", @1)
72
73  " delete a word does not change register one, does change "-
74  call setline(1, "two")
75  normal de
76  call assert_equal("one\n", @1)
77  call assert_equal("two", @-)
78
79  " delete a word with a register does not change register one
80  call setline(1, "three")
81  normal "ade
82  call assert_equal("three", @a)
83  call assert_equal("one\n", @1)
84
85  " delete a word with register DOES change register one with one of a list of
86  " operators
87  " %
88  call setline(1, ["(12)3"])
89  normal "ad%
90  call assert_equal("(12)", @a)
91  call assert_equal("(12)", @1)
92
93  " (
94  call setline(1, ["first second"])
95  normal $"ad(
96  call assert_equal("first secon", @a)
97  call assert_equal("first secon", @1)
98
99  " )
100  call setline(1, ["First Second."])
101  normal gg0"ad)
102  call assert_equal("First Second.", @a)
103  call assert_equal("First Second.", @1)
104
105  " `
106  call setline(1, ["start here."])
107  normal gg0fhmx0"ad`x
108  call assert_equal("start ", @a)
109  call assert_equal("start ", @1)
110
111  " /
112  call setline(1, ["searchX"])
113  exe "normal gg0\"ad/X\<CR>"
114  call assert_equal("search", @a)
115  call assert_equal("search", @1)
116
117  " ?
118  call setline(1, ["Ysearch"])
119  exe "normal gg$\"ad?Y\<CR>"
120  call assert_equal("Ysearc", @a)
121  call assert_equal("Ysearc", @1)
122
123  " n
124  call setline(1, ["Ynext"])
125  normal gg$"adn
126  call assert_equal("Ynex", @a)
127  call assert_equal("Ynex", @1)
128
129  " N
130  call setline(1, ["prevY"])
131  normal gg0"adN
132  call assert_equal("prev", @a)
133  call assert_equal("prev", @1)
134
135  " }
136  call setline(1, ["one", ""])
137  normal gg0"ad}
138  call assert_equal("one\n", @a)
139  call assert_equal("one\n", @1)
140
141  " {
142  call setline(1, ["", "two"])
143  normal 2G$"ad{
144  call assert_equal("\ntw", @a)
145  call assert_equal("\ntw", @1)
146
147  bwipe!
148endfunc
149
150" Check that replaying a typed sequence does not use an Esc and following
151" characters as an escape sequence.
152func Test_recording_esc_sequence()
153  new
154  try
155    let save_F2 = &t_F2
156  catch
157  endtry
158  let t_F2 = "\<Esc>OQ"
159  call feedkeys("qqiTest\<Esc>", "xt")
160  call feedkeys("OQuirk\<Esc>q", "xt")
161  call feedkeys("Go\<Esc>@q", "xt")
162  call assert_equal(['Quirk', 'Test', 'Quirk', 'Test'], getline(1, 4))
163  bwipe!
164  if exists('save_F2')
165    let &t_F2 = save_F2
166  else
167    set t_F2=
168  endif
169endfunc
170