1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
-- Test clipboard provider support
local helpers = require('test.functional.helpers')
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local execute, expect, eq, eval = helpers.execute, helpers.expect, helpers.eq, helpers.eval
local nvim, run, stop, restart = helpers.nvim, helpers.run, helpers.stop, helpers.restart
local function reset()
clear()
execute('let &rtp = "test/functional/clipboard,".&rtp')
end
local function basic_register_test()
insert("some words")
feed('^dwP')
expect('some words')
feed('veyP')
expect('some words words')
feed('^dwywe"-p')
expect('wordssome words')
feed('p')
expect('wordssome words words')
feed('yyp')
expect([[
wordssome words words
wordssome words words]])
feed('d-')
insert([[
some text, and some more
random text stuff]])
feed('ggtav+2ed$p')
expect([[
some text, stuff and some more
random text]])
reset()
end
describe('clipboard usage', function()
setup(reset)
it("works", function()
basic_register_test()
-- "* and unnamed should function as independent registers
insert("some words")
feed('^"*dwdw"*P')
expect('some ')
eq({'some '}, eval("g:test_clip['*']"))
reset()
-- "* and "+ should be independent when the provider supports it
insert([[
text:
first line
secound line
third line]])
feed('G"+dd"*dddd"+p"*pp')
expect([[
text:
third line
secound line
first line]])
-- linewise selection should be encoded as an extra newline
eq({'third line', ''}, eval("g:test_clip['+']"))
eq({'secound line', ''}, eval("g:test_clip['*']"))
reset()
-- handle null bytes
insert("some\x16000text\n\x16000very binary\x16000")
feed('"*y-+"*p')
eq({'some\ntext', '\nvery binary\n',''}, eval("g:test_clip['*']"))
expect("some\x00text\n\x00very binary\x00\nsome\x00text\n\x00very binary\x00")
-- test getreg/getregtype
eq('some\ntext\n\nvery binary\n\n', eval("getreg('*', 1)"))
eq("V", eval("getregtype('*')"))
reset()
-- blockwise paste
insert([[
much
text]])
feed('"*yy') -- force load of provider
execute("let g:test_clip['*'] = [['very','block'],'b']")
feed('gg"*P')
expect([[
very much
blocktext]])
eq("\x165", eval("getregtype('*')"))
reset()
-- test setreg
execute('call setreg("*", "setted\\ntext", "c")')
execute('call setreg("+", "explicitly\\nlines", "l")')
feed('"+P"*p')
expect([[
esetted
textxplicitly
lines
]])
reset()
-- test let @+ (issue #1427)
execute("let @+ = 'some'")
execute("let @* = ' other stuff'")
eq({'some'}, eval("g:test_clip['+']"))
eq({' other stuff'}, eval("g:test_clip['*']"))
feed('"+p"*p')
expect('some other stuff')
execute("let @+ .= ' more'")
feed('dd"+p')
expect('some more')
reset()
-- the basic behavior of unnamed register should be the same
-- even when handled by clipboard provider
execute('set clipboard=unnamed')
basic_register_test()
-- with cb=unnamed, "* and unnamed will be the same register
execute('set clipboard=unnamed')
insert("some words")
feed('^"*dwdw"*P')
expect('words')
eq({'words'}, eval("g:test_clip['*']"))
execute("let g:test_clip['*'] = ['linewise stuff','']")
feed('p')
expect([[
words
linewise stuff]])
reset()
end)
end)
|