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
|
local helpers = require('test.functional.helpers')(after_each)
local assert_alive = helpers.assert_alive
local clear = helpers.clear
local command = helpers.command
local eq = helpers.eq
local exc_exec = helpers.exc_exec
local expect = helpers.expect
local feed = helpers.feed
local feed_command = helpers.feed_command
local funcs = helpers.funcs
local insert = helpers.insert
local meths = helpers.meths
local missing_provider = helpers.missing_provider
local matches = helpers.matches
local write_file = helpers.write_file
local pcall_err = helpers.pcall_err
do
clear()
local reason = missing_provider('ruby')
if reason then
it(':ruby reports E319 if provider is missing', function()
local expected = [[Vim%(ruby.*%):E319: No "ruby" provider found.*]]
matches(expected, pcall_err(command, 'ruby puts "foo"'))
matches(expected, pcall_err(command, 'rubyfile foo'))
end)
pending(string.format('Missing neovim RubyGem (%s)', reason), function() end)
return
end
end
before_each(function()
clear()
end)
describe('ruby feature test', function()
it('works', function()
eq(1, funcs.has('ruby'))
end)
end)
describe(':ruby command', function()
it('evaluates ruby', function()
command('ruby VIM.command("let g:set_by_ruby = [100, 0]")')
eq({100, 0}, meths.get_var('set_by_ruby'))
end)
it('supports nesting', function()
command([[ruby VIM.command('ruby VIM.command("let set_by_nested_ruby = 555")')]])
eq(555, meths.get_var('set_by_nested_ruby'))
end)
end)
describe(':rubyfile command', function()
it('evaluates a ruby file', function()
local fname = 'rubyfile.rb'
write_file(fname, 'VIM.command("let set_by_rubyfile = 123")')
command('rubyfile rubyfile.rb')
eq(123, meths.get_var('set_by_rubyfile'))
os.remove(fname)
end)
end)
describe(':rubydo command', function()
it('exposes the $_ variable for modifying lines', function()
insert('abc\ndef\nghi\njkl')
expect([[
abc
def
ghi
jkl]])
feed('ggjvj:rubydo $_.upcase!<CR>')
expect([[
abc
DEF
GHI
jkl]])
end)
it('operates on all lines when not given a range', function()
insert('abc\ndef\nghi\njkl')
expect([[
abc
def
ghi
jkl]])
feed(':rubydo $_.upcase!<CR>')
expect([[
ABC
DEF
GHI
JKL]])
end)
it('does not modify the buffer if no changes are made', function()
command('normal :rubydo 42')
eq(false, meths.get_option_value('modified', {}))
end)
end)
describe('ruby provider', function()
it('RPC call to expand("<afile>") during BufDelete #5245 #5617', function()
helpers.add_builddir_to_rtp()
command([=[autocmd BufDelete * ruby VIM::evaluate('expand("<afile>")')]=])
feed_command('help help')
assert_alive()
end)
end)
describe('rubyeval()', function()
it('evaluates ruby objects', function()
eq({1, 2, {['key'] = 'val'}}, funcs.rubyeval('[1, 2, {key: "val"}]'))
end)
it('returns nil for empty strings', function()
eq(helpers.NIL, funcs.rubyeval(''))
end)
it('errors out when given non-string', function()
eq('Vim(call):E474: Invalid argument', exc_exec('call rubyeval(10)'))
eq('Vim(call):E474: Invalid argument', exc_exec('call rubyeval(v:_null_dict)'))
eq('Vim(call):E474: Invalid argument', exc_exec('call rubyeval(v:_null_list)'))
eq('Vim(call):E474: Invalid argument', exc_exec('call rubyeval(0.0)'))
eq('Vim(call):E474: Invalid argument', exc_exec('call rubyeval(function("tr"))'))
eq('Vim(call):E474: Invalid argument', exc_exec('call rubyeval(v:true)'))
eq('Vim(call):E474: Invalid argument', exc_exec('call rubyeval(v:false)'))
eq('Vim(call):E474: Invalid argument', exc_exec('call rubyeval(v:null)'))
end)
end)
|