~ubuntu-branches/debian/sid/neovim/sid

« back to all changes in this revision

Viewing changes to test/functional/autocmd/textyankpost_spec.lua

  • Committer: Package Import Robot
  • Author(s): James McCoy
  • Date: 2016-04-18 21:42:19 UTC
  • mfrom: (1.1.2)
  • Revision ID: package-import@ubuntu.com-20160418214219-1e6d4o1fwqarzk46
Tags: 0.1.3-1
* New upstream release.  (Closes: #820562)
* debian/control:
  + Remove unnecessary luarocks Build-Depends
  + Add libkvm-dev Build-Depends for kfreebsd-*
  + Add python(3)-neovim to Recommends.  (Closes: #812737)
  + Declare compiance with policy 3.9.8, no changes needed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
local helpers = require('test.functional.helpers')
 
2
local clear, eval, eq, insert = helpers.clear, helpers.eval, helpers.eq, helpers.insert
 
3
local feed, execute, expect, command = helpers.feed, helpers.execute, helpers.expect, helpers.command
 
4
local curbufmeths, funcs, neq = helpers.curbufmeths, helpers.funcs, helpers.neq
 
5
 
 
6
describe('TextYankPost', function()
 
7
  before_each(function()
 
8
    clear()
 
9
 
 
10
    -- emulate the clipboard so system clipboard isn't affected
 
11
    execute('let &rtp = "test/functional/fixtures,".&rtp')
 
12
 
 
13
    execute('let g:count = 0')
 
14
    execute('autocmd TextYankPost * let g:event = copy(v:event)')
 
15
    execute('autocmd TextYankPost * let g:count += 1')
 
16
 
 
17
    curbufmeths.set_lines(0, -1, true, {
 
18
      'foo\0bar',
 
19
      'baz text',
 
20
    })
 
21
  end)
 
22
 
 
23
  it('is executed after yank and handles register types', function()
 
24
    feed('yy')
 
25
    eq({
 
26
      operator = 'y',
 
27
      regcontents = { 'foo\nbar' },
 
28
      regname = '',
 
29
      regtype = 'V'
 
30
    }, eval('g:event'))
 
31
    eq(1, eval('g:count'))
 
32
 
 
33
    -- v:event is cleared after the autocommand is done
 
34
    eq({}, eval('v:event'))
 
35
 
 
36
    feed('+yw')
 
37
    eq({
 
38
      operator = 'y',
 
39
      regcontents = { 'baz ' },
 
40
      regname = '',
 
41
      regtype = 'v'
 
42
    }, eval('g:event'))
 
43
    eq(2, eval('g:count'))
 
44
 
 
45
    feed('<c-v>eky')
 
46
    eq({
 
47
      operator = 'y',
 
48
      regcontents = { 'foo', 'baz' },
 
49
      regname = '',
 
50
      regtype = "\0223" -- ^V + block width
 
51
    }, eval('g:event'))
 
52
    eq(3, eval('g:count'))
 
53
  end)
 
54
 
 
55
  it('makes v:event immutable', function()
 
56
    feed('yy')
 
57
    eq({
 
58
      operator = 'y',
 
59
      regcontents = { 'foo\nbar' },
 
60
      regname = '',
 
61
      regtype = 'V'
 
62
    }, eval('g:event'))
 
63
 
 
64
    execute('set debug=msg')
 
65
    -- the regcontents should not be changed without copy.
 
66
    local status, err = pcall(command,'call extend(g:event.regcontents, ["more text"])')
 
67
    eq(status,false)
 
68
    neq(nil, string.find(err, ':E742:'))
 
69
 
 
70
    -- can't mutate keys inside the autocommand
 
71
    execute('autocmd! TextYankPost * let v:event.regcontents = 0')
 
72
    status, err = pcall(command,'normal yy')
 
73
    eq(status,false)
 
74
    neq(nil, string.find(err, ':E46:'))
 
75
 
 
76
    -- can't add keys inside the autocommand
 
77
    execute('autocmd! TextYankPost * let v:event.mykey = 0')
 
78
    status, err = pcall(command,'normal yy')
 
79
    eq(status,false)
 
80
    neq(nil, string.find(err, ':E742:'))
 
81
  end)
 
82
 
 
83
  it('is not invoked recursively', function()
 
84
    execute('autocmd TextYankPost * normal "+yy')
 
85
    feed('yy')
 
86
    eq({
 
87
      operator = 'y',
 
88
      regcontents = { 'foo\nbar' },
 
89
      regname = '',
 
90
      regtype = 'V'
 
91
    }, eval('g:event'))
 
92
    eq(1, eval('g:count'))
 
93
    eq({ 'foo\nbar' }, funcs.getreg('+',1,1))
 
94
  end)
 
95
 
 
96
  it('is executed after delete and change', function()
 
97
    feed('dw')
 
98
    eq({
 
99
      operator = 'd',
 
100
      regcontents = { 'foo' },
 
101
      regname = '',
 
102
      regtype = 'v'
 
103
    }, eval('g:event'))
 
104
    eq(1, eval('g:count'))
 
105
 
 
106
    feed('dd')
 
107
    eq({
 
108
      operator = 'd',
 
109
      regcontents = { '\nbar' },
 
110
      regname = '',
 
111
      regtype = 'V'
 
112
    }, eval('g:event'))
 
113
    eq(2, eval('g:count'))
 
114
 
 
115
    feed('cwspam<esc>')
 
116
    eq({
 
117
      operator = 'c',
 
118
      regcontents = { 'baz' },
 
119
      regname = '',
 
120
      regtype = 'v'
 
121
    }, eval('g:event'))
 
122
    eq(3, eval('g:count'))
 
123
  end)
 
124
 
 
125
  it('is not executed after black-hole operation', function()
 
126
    feed('"_dd')
 
127
    eq(0, eval('g:count'))
 
128
 
 
129
    feed('"_cwgood<esc>')
 
130
    eq(0, eval('g:count'))
 
131
 
 
132
    expect([[
 
133
      good text]])
 
134
    feed('"_yy')
 
135
    eq(0, eval('g:count'))
 
136
 
 
137
    execute('delete _')
 
138
    eq(0, eval('g:count'))
 
139
  end)
 
140
 
 
141
  it('gives the correct register name', function()
 
142
    feed('$"byiw')
 
143
    eq({
 
144
      operator = 'y',
 
145
      regcontents = { 'bar' },
 
146
      regname = 'b',
 
147
      regtype = 'v'
 
148
    }, eval('g:event'))
 
149
 
 
150
    feed('"*yy')
 
151
    eq({
 
152
      operator = 'y',
 
153
      regcontents = { 'foo\nbar' },
 
154
      regname = '*',
 
155
      regtype = 'V'
 
156
    }, eval('g:event'))
 
157
 
 
158
    execute("set clipboard=unnamed")
 
159
 
 
160
    -- regname still shows the name the user requested
 
161
    feed('yy')
 
162
    eq({
 
163
      operator = 'y',
 
164
      regcontents = { 'foo\nbar' },
 
165
      regname = '',
 
166
      regtype = 'V'
 
167
    }, eval('g:event'))
 
168
 
 
169
    feed('"*yy')
 
170
    eq({
 
171
      operator = 'y',
 
172
      regcontents = { 'foo\nbar' },
 
173
      regname = '*',
 
174
      regtype = 'V'
 
175
    }, eval('g:event'))
 
176
  end)
 
177
 
 
178
  it('works with Ex commands', function()
 
179
    execute('1delete +')
 
180
    eq({
 
181
      operator = 'd',
 
182
      regcontents = { 'foo\nbar' },
 
183
      regname = '+',
 
184
      regtype = 'V'
 
185
    }, eval('g:event'))
 
186
    eq(1, eval('g:count'))
 
187
 
 
188
    execute('yank')
 
189
    eq({
 
190
      operator = 'y',
 
191
      regcontents = { 'baz text' },
 
192
      regname = '',
 
193
      regtype = 'V'
 
194
    }, eval('g:event'))
 
195
    eq(2, eval('g:count'))
 
196
 
 
197
    execute('normal yw')
 
198
    eq({
 
199
      operator = 'y',
 
200
      regcontents = { 'baz ' },
 
201
      regname = '',
 
202
      regtype = 'v'
 
203
    }, eval('g:event'))
 
204
    eq(3, eval('g:count'))
 
205
 
 
206
    execute('normal! dd')
 
207
    eq({
 
208
      operator = 'd',
 
209
      regcontents = { 'baz text' },
 
210
      regname = '',
 
211
      regtype = 'V'
 
212
    }, eval('g:event'))
 
213
    eq(4, eval('g:count'))
 
214
  end)
 
215
 
 
216
end)