xref: /vim-8.2.3635/src/testdir/test_ruby.vim (revision edd6aacb)
185babd6dSBram Moolenaar" Tests for ruby interface
285babd6dSBram Moolenaar
385babd6dSBram Moolenaarif !has('ruby')
485babd6dSBram Moolenaar  finish
585babd6dSBram Moolenaarend
685babd6dSBram Moolenaar
7*edd6aacbSBram Moolenaar" Helper function as there is no builtin rubyeval() function similar
8*edd6aacbSBram Moolenaar" to perleval, luaevel() or pyeval().
9*edd6aacbSBram Moolenaarfunc RubyEval(ruby_expr)
10*edd6aacbSBram Moolenaar  let s = split(execute('ruby print ' . a:ruby_expr), "\n")
11*edd6aacbSBram Moolenaar  return (len(s) == 0) ? '' : s[-1]
12*edd6aacbSBram Moolenaarendfunc
13*edd6aacbSBram Moolenaar
1485babd6dSBram Moolenaarfunc Test_ruby_change_buffer()
1585babd6dSBram Moolenaar  call setline(line('$'), ['1 line 1'])
1685babd6dSBram Moolenaar  ruby Vim.command("normal /^1\n")
1785babd6dSBram Moolenaar  ruby $curbuf.line = "1 changed line 1"
1885babd6dSBram Moolenaar  call assert_equal('1 changed line 1', getline('$'))
1985babd6dSBram Moolenaarendfunc
2085babd6dSBram Moolenaar
21c593fee0SBram Moolenaarfunc Test_rubydo()
22c593fee0SBram Moolenaar  " Check deleting lines does not trigger ml_get error.
23c593fee0SBram Moolenaar  new
24c593fee0SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
25c593fee0SBram Moolenaar  rubydo Vim.command("%d_")
26c593fee0SBram Moolenaar  bwipe!
27c593fee0SBram Moolenaar
28c593fee0SBram Moolenaar  " Check switching to another buffer does not trigger ml_get error.
29c593fee0SBram Moolenaar  new
30c593fee0SBram Moolenaar  let wincount = winnr('$')
31c593fee0SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
32c593fee0SBram Moolenaar  rubydo Vim.command("new")
33c593fee0SBram Moolenaar  call assert_equal(wincount + 1, winnr('$'))
34*edd6aacbSBram Moolenaar  %bwipe!
35c593fee0SBram Moolenaarendfunc
3637badc89SBram Moolenaar
3737badc89SBram Moolenaarfunc Test_rubyfile()
3837badc89SBram Moolenaar  " Check :rubyfile does not SEGV with Ruby level exception but just fails
3937badc89SBram Moolenaar  let tempfile = tempname() . '.rb'
4037badc89SBram Moolenaar  call writefile(['raise "vim!"'], tempfile)
4137badc89SBram Moolenaar  call assert_fails('rubyfile ' . tempfile)
4237badc89SBram Moolenaar  call delete(tempfile)
4337badc89SBram Moolenaarendfunc
4453901442SBram Moolenaar
4553901442SBram Moolenaarfunc Test_set_cursor()
4653901442SBram Moolenaar  " Check that setting the cursor position works.
4753901442SBram Moolenaar  new
4853901442SBram Moolenaar  call setline(1, ['first line', 'second line'])
4953901442SBram Moolenaar  normal gg
5053901442SBram Moolenaar  rubydo $curwin.cursor = [1, 5]
5153901442SBram Moolenaar  call assert_equal([1, 6], [line('.'), col('.')])
52*edd6aacbSBram Moolenaar  call assert_equal('[1, 5]', RubyEval('$curwin.cursor'))
5353901442SBram Moolenaar
5453901442SBram Moolenaar  " Check that movement after setting cursor position keeps current column.
5553901442SBram Moolenaar  normal j
5653901442SBram Moolenaar  call assert_equal([2, 6], [line('.'), col('.')])
57*edd6aacbSBram Moolenaar  call assert_equal('[2, 5]', RubyEval('$curwin.cursor'))
58*edd6aacbSBram Moolenaar
59*edd6aacbSBram Moolenaar  call assert_fails('ruby $curwin.cursor = [1]',
60*edd6aacbSBram Moolenaar        \           'ArgumentError: array length must be 2')
61*edd6aacbSBram Moolenaar  bwipe!
62*edd6aacbSBram Moolenaarendfunc
63*edd6aacbSBram Moolenaar
64*edd6aacbSBram Moolenaar" Test buffer.count and buffer.length (number of lines in buffer)
65*edd6aacbSBram Moolenaarfunc Test_buffer_count()
66*edd6aacbSBram Moolenaar  new
67*edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
68*edd6aacbSBram Moolenaar  call assert_equal('3', RubyEval('$curbuf.count'))
69*edd6aacbSBram Moolenaar  call assert_equal('3', RubyEval('$curbuf.length'))
70*edd6aacbSBram Moolenaar  bwipe!
71*edd6aacbSBram Moolenaarendfunc
72*edd6aacbSBram Moolenaar
73*edd6aacbSBram Moolenaar" Test buffer.name (buffer name)
74*edd6aacbSBram Moolenaarfunc Test_buffer_name()
75*edd6aacbSBram Moolenaar  new Xfoo
76*edd6aacbSBram Moolenaar  call assert_equal(expand('%:p'), RubyEval('$curbuf.name'))
77*edd6aacbSBram Moolenaar  bwipe
78*edd6aacbSBram Moolenaar  call assert_equal('', RubyEval('$curbuf.name'))
79*edd6aacbSBram Moolenaarendfunc
80*edd6aacbSBram Moolenaar
81*edd6aacbSBram Moolenaar" Test buffer.number (number of the buffer).
82*edd6aacbSBram Moolenaarfunc Test_buffer_number()
83*edd6aacbSBram Moolenaar  new
84*edd6aacbSBram Moolenaar  call assert_equal(string(bufnr('%')), RubyEval('$curbuf.number'))
85*edd6aacbSBram Moolenaar  new
86*edd6aacbSBram Moolenaar  call assert_equal(string(bufnr('%')), RubyEval('$curbuf.number'))
87*edd6aacbSBram Moolenaar
88*edd6aacbSBram Moolenaar  %bwipe
89*edd6aacbSBram Moolenaarendfunc
90*edd6aacbSBram Moolenaar
91*edd6aacbSBram Moolenaar" Test buffer.delete({n}) (delete line {n})
92*edd6aacbSBram Moolenaarfunc Test_buffer_delete()
93*edd6aacbSBram Moolenaar  new
94*edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
95*edd6aacbSBram Moolenaar  ruby $curbuf.delete(2)
96*edd6aacbSBram Moolenaar  call assert_equal(['one', 'three'], getline(1, '$'))
97*edd6aacbSBram Moolenaar
98*edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.delete(0)', 'IndexError: line number 0 out of range')
99*edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.delete(3)', 'IndexError: line number 3 out of range')
100*edd6aacbSBram Moolenaar
101*edd6aacbSBram Moolenaar  bwipe!
102*edd6aacbSBram Moolenaarendfunc
103*edd6aacbSBram Moolenaar
104*edd6aacbSBram Moolenaar" Test buffer.append({str}, str) (append line {str} after line {n})
105*edd6aacbSBram Moolenaarfunc Test_buffer_append()
106*edd6aacbSBram Moolenaar  new
107*edd6aacbSBram Moolenaar  ruby $curbuf.append(0, 'one')
108*edd6aacbSBram Moolenaar  ruby $curbuf.append(1, 'three')
109*edd6aacbSBram Moolenaar  ruby $curbuf.append(1, 'two')
110*edd6aacbSBram Moolenaar  ruby $curbuf.append(4, 'four')
111*edd6aacbSBram Moolenaar
112*edd6aacbSBram Moolenaar  call assert_equal(['one', 'two', 'three', '', 'four'], getline(1, '$'))
113*edd6aacbSBram Moolenaar
114*edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.append(-1, "x")',
115*edd6aacbSBram Moolenaar        \           'IndexError: line number -1 out of range')
116*edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.append(6, "x")',
117*edd6aacbSBram Moolenaar        \           'IndexError: line number 6 out of range')
118*edd6aacbSBram Moolenaar
119*edd6aacbSBram Moolenaar  bwipe!
120*edd6aacbSBram Moolenaarendfunc
121*edd6aacbSBram Moolenaar
122*edd6aacbSBram Moolenaar" Test buffer.line (get or set the current line)
123*edd6aacbSBram Moolenaarfunc Test_buffer_line()
124*edd6aacbSBram Moolenaar  new
125*edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
126*edd6aacbSBram Moolenaar  2
127*edd6aacbSBram Moolenaar  call assert_equal('two', RubyEval('$curbuf.line'))
128*edd6aacbSBram Moolenaar
129*edd6aacbSBram Moolenaar  ruby $curbuf.line = 'TWO'
130*edd6aacbSBram Moolenaar  call assert_equal(['one', 'TWO', 'three'], getline(1, '$'))
131*edd6aacbSBram Moolenaar
132*edd6aacbSBram Moolenaar  bwipe!
133*edd6aacbSBram Moolenaarendfunc
134*edd6aacbSBram Moolenaar
135*edd6aacbSBram Moolenaar" Test buffer.line_number (get current line number)
136*edd6aacbSBram Moolenaarfunc Test_buffer_line_number()
137*edd6aacbSBram Moolenaar  new
138*edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
139*edd6aacbSBram Moolenaar  2
140*edd6aacbSBram Moolenaar  call assert_equal('2', RubyEval('$curbuf.line_number'))
141*edd6aacbSBram Moolenaar
142*edd6aacbSBram Moolenaar  bwipe!
143*edd6aacbSBram Moolenaarendfunc
144*edd6aacbSBram Moolenaar
145*edd6aacbSBram Moolenaarfunc Test_buffer_get()
146*edd6aacbSBram Moolenaar  new
147*edd6aacbSBram Moolenaar  call setline(1, ['one', 'two'])
148*edd6aacbSBram Moolenaar  call assert_equal('one', RubyEval('$curbuf[1]'))
149*edd6aacbSBram Moolenaar  call assert_equal('two', RubyEval('$curbuf[2]'))
150*edd6aacbSBram Moolenaar
151*edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[0]',
152*edd6aacbSBram Moolenaar        \           'IndexError: line number 0 out of range')
153*edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[3]',
154*edd6aacbSBram Moolenaar        \           'IndexError: line number 3 out of range')
155*edd6aacbSBram Moolenaar
156*edd6aacbSBram Moolenaar  bwipe!
157*edd6aacbSBram Moolenaarendfunc
158*edd6aacbSBram Moolenaar
159*edd6aacbSBram Moolenaarfunc Test_buffer_set()
160*edd6aacbSBram Moolenaar  new
161*edd6aacbSBram Moolenaar  call setline(1, ['one', 'two'])
162*edd6aacbSBram Moolenaar  ruby $curbuf[2] = 'TWO'
163*edd6aacbSBram Moolenaar  ruby $curbuf[1] = 'ONE'
164*edd6aacbSBram Moolenaar
165*edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[0] = "ZERO"',
166*edd6aacbSBram Moolenaar        \           'IndexError: line number 0 out of range')
167*edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[3] = "THREE"',
168*edd6aacbSBram Moolenaar        \           'IndexError: line number 3 out of range')
169*edd6aacbSBram Moolenaar  bwipe!
170*edd6aacbSBram Moolenaarendfunc
171*edd6aacbSBram Moolenaar
172*edd6aacbSBram Moolenaar" Test window.width (get or set window height).
173*edd6aacbSBram Moolenaarfunc Test_window_height()
174*edd6aacbSBram Moolenaar  new
175*edd6aacbSBram Moolenaar
176*edd6aacbSBram Moolenaar  " Test setting window height
177*edd6aacbSBram Moolenaar  ruby $curwin.height = 2
178*edd6aacbSBram Moolenaar  call assert_equal(2, winheight(0))
179*edd6aacbSBram Moolenaar
180*edd6aacbSBram Moolenaar  " Test getting window height
181*edd6aacbSBram Moolenaar  call assert_equal('2', RubyEval('$curwin.height'))
182*edd6aacbSBram Moolenaar
183*edd6aacbSBram Moolenaar  bwipe
184*edd6aacbSBram Moolenaarendfunc
185*edd6aacbSBram Moolenaar
186*edd6aacbSBram Moolenaar" Test window.width (get or set window width).
187*edd6aacbSBram Moolenaarfunc Test_window_width()
188*edd6aacbSBram Moolenaar  vnew
189*edd6aacbSBram Moolenaar
190*edd6aacbSBram Moolenaar  " Test setting window width
191*edd6aacbSBram Moolenaar  ruby $curwin.width = 2
192*edd6aacbSBram Moolenaar  call assert_equal(2, winwidth(0))
193*edd6aacbSBram Moolenaar
194*edd6aacbSBram Moolenaar  " Test getting window width
195*edd6aacbSBram Moolenaar  call assert_equal('2', RubyEval('$curwin.width'))
196*edd6aacbSBram Moolenaar
197*edd6aacbSBram Moolenaar  bwipe
198*edd6aacbSBram Moolenaarendfunc
199*edd6aacbSBram Moolenaar
200*edd6aacbSBram Moolenaar" Test window.buffer (get buffer object of a window object).
201*edd6aacbSBram Moolenaarfunc Test_window_buffer()
202*edd6aacbSBram Moolenaar  new Xfoo1
203*edd6aacbSBram Moolenaar  new Xfoo2
204*edd6aacbSBram Moolenaar  ruby $b2 = $curwin.buffer
205*edd6aacbSBram Moolenaar  ruby $w2 = $curwin
206*edd6aacbSBram Moolenaar  wincmd j
207*edd6aacbSBram Moolenaar  ruby $b1 = $curwin.buffer
208*edd6aacbSBram Moolenaar  ruby $w1 = $curwin
209*edd6aacbSBram Moolenaar
210*edd6aacbSBram Moolenaar  call assert_equal(RubyEval('$b1'), RubyEval('$w1.buffer'))
211*edd6aacbSBram Moolenaar  call assert_equal(RubyEval('$b2'), RubyEval('$w2.buffer'))
212*edd6aacbSBram Moolenaar  call assert_equal(string(bufnr('Xfoo1')), RubyEval('$w1.buffer.number'))
213*edd6aacbSBram Moolenaar  call assert_equal(string(bufnr('Xfoo2')), RubyEval('$w2.buffer.number'))
214*edd6aacbSBram Moolenaar
215*edd6aacbSBram Moolenaar  ruby $b1, $w1, $b2, $w2 = nil
216*edd6aacbSBram Moolenaar  %bwipe
217*edd6aacbSBram Moolenaarendfunc
218*edd6aacbSBram Moolenaar
219*edd6aacbSBram Moolenaar" Test Vim::Window.current (get current window object)
220*edd6aacbSBram Moolenaarfunc Test_Vim_window_current()
221*edd6aacbSBram Moolenaar  let cw = RubyEval('$curwin')
222*edd6aacbSBram Moolenaar  call assert_equal(cw, RubyEval('Vim::Window.current'))
223*edd6aacbSBram Moolenaar  call assert_match('^#<Vim::Window:0x\x\+>$', cw)
224*edd6aacbSBram Moolenaarendfunc
225*edd6aacbSBram Moolenaar
226*edd6aacbSBram Moolenaar" Test Vim::Window.count (number of windows)
227*edd6aacbSBram Moolenaarfunc Test_Vim_window_count()
228*edd6aacbSBram Moolenaar  new Xfoo1
229*edd6aacbSBram Moolenaar  new Xfoo2
230*edd6aacbSBram Moolenaar  split
231*edd6aacbSBram Moolenaar  call assert_equal('4', RubyEval('Vim::Window.count'))
232*edd6aacbSBram Moolenaar  %bwipe
233*edd6aacbSBram Moolenaar  call assert_equal('1', RubyEval('Vim::Window.count'))
234*edd6aacbSBram Moolenaarendfunc
235*edd6aacbSBram Moolenaar
236*edd6aacbSBram Moolenaar" Test Vim::Window[n] (get window object of window n)
237*edd6aacbSBram Moolenaarfunc Test_Vim_window_get()
238*edd6aacbSBram Moolenaar  new Xfoo1
239*edd6aacbSBram Moolenaar  new Xfoo2
240*edd6aacbSBram Moolenaar  call assert_match('Xfoo2$', RubyEval('Vim::Window[0].buffer.name'))
241*edd6aacbSBram Moolenaar  wincmd j
242*edd6aacbSBram Moolenaar  call assert_match('Xfoo1$', RubyEval('Vim::Window[1].buffer.name'))
243*edd6aacbSBram Moolenaar  wincmd j
244*edd6aacbSBram Moolenaar  call assert_equal('',       RubyEval('Vim::Window[2].buffer.name'))
245*edd6aacbSBram Moolenaar  %bwipe
246*edd6aacbSBram Moolenaarendfunc
247*edd6aacbSBram Moolenaar
248*edd6aacbSBram Moolenaar" Test Vim::Buffer.current (return the buffer object of current buffer)
249*edd6aacbSBram Moolenaarfunc Test_Vim_buffer_current()
250*edd6aacbSBram Moolenaar  let cb = RubyEval('$curbuf')
251*edd6aacbSBram Moolenaar  call assert_equal(cb, RubyEval('Vim::Buffer.current'))
252*edd6aacbSBram Moolenaar  call assert_match('^#<Vim::Buffer:0x\x\+>$', cb)
253*edd6aacbSBram Moolenaarendfunc
254*edd6aacbSBram Moolenaar
255*edd6aacbSBram Moolenaar" Test Vim::Buffer:.count (return the number of buffers)
256*edd6aacbSBram Moolenaarfunc Test_Vim_buffer_count()
257*edd6aacbSBram Moolenaar  new Xfoo1
258*edd6aacbSBram Moolenaar  new Xfoo2
259*edd6aacbSBram Moolenaar  call assert_equal('3', RubyEval('Vim::Buffer.count'))
260*edd6aacbSBram Moolenaar  %bwipe
261*edd6aacbSBram Moolenaar  call assert_equal('1', RubyEval('Vim::Buffer.count'))
262*edd6aacbSBram Moolenaarendfunc
263*edd6aacbSBram Moolenaar
264*edd6aacbSBram Moolenaar" Test Vim::buffer[n] (return the buffer object of buffer number n)
265*edd6aacbSBram Moolenaarfunc Test_Vim_buffer_get()
266*edd6aacbSBram Moolenaar  new Xfoo1
267*edd6aacbSBram Moolenaar  new Xfoo2
268*edd6aacbSBram Moolenaar
269*edd6aacbSBram Moolenaar  " Index of Vim::Buffer[n] goes from 0 to the number of buffers.
270*edd6aacbSBram Moolenaar  call assert_equal('',       RubyEval('Vim::Buffer[0].name'))
271*edd6aacbSBram Moolenaar  call assert_match('Xfoo1$', RubyEval('Vim::Buffer[1].name'))
272*edd6aacbSBram Moolenaar  call assert_match('Xfoo2$', RubyEval('Vim::Buffer[2].name'))
273*edd6aacbSBram Moolenaar  call assert_fails('ruby print Vim::Buffer[3].name',
274*edd6aacbSBram Moolenaar        \           "NoMethodError: undefined method `name' for nil:NilClass")
275*edd6aacbSBram Moolenaar  %bwipe
276*edd6aacbSBram Moolenaarendfunc
277*edd6aacbSBram Moolenaar
278*edd6aacbSBram Moolenaar" Test Vim::command({cmd}) (execute a Ex command))
279*edd6aacbSBram Moolenaar" Test Vim::command({cmd})
280*edd6aacbSBram Moolenaarfunc Test_Vim_command()
281*edd6aacbSBram Moolenaar  new
282*edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three', 'four'])
283*edd6aacbSBram Moolenaar  ruby Vim::command('2,3d')
284*edd6aacbSBram Moolenaar  call assert_equal(['one', 'four'], getline(1, '$'))
285*edd6aacbSBram Moolenaar  bwipe!
286*edd6aacbSBram Moolenaarendfunc
287*edd6aacbSBram Moolenaar
288*edd6aacbSBram Moolenaar" Test Vim::set_option (set a vim option)
289*edd6aacbSBram Moolenaarfunc Test_Vim_set_option()
290*edd6aacbSBram Moolenaar  call assert_equal(0, &number)
291*edd6aacbSBram Moolenaar  ruby Vim::set_option('number')
292*edd6aacbSBram Moolenaar  call assert_equal(1, &number)
293*edd6aacbSBram Moolenaar  ruby Vim::set_option('nonumber')
294*edd6aacbSBram Moolenaar  call assert_equal(0, &number)
295*edd6aacbSBram Moolenaarendfunc
296*edd6aacbSBram Moolenaar
297*edd6aacbSBram Moolenaarfunc Test_Vim_evaluate()
298*edd6aacbSBram Moolenaar  call assert_equal('123',      RubyEval('Vim::evaluate("123")'))
299*edd6aacbSBram Moolenaar  " Vim::evaluate("123").class gives Integer or Fixnum depending
300*edd6aacbSBram Moolenaar  " on versions of Ruby.
301*edd6aacbSBram Moolenaar  call assert_match('^Integer\|Fixnum$', RubyEval('Vim::evaluate("123").class'))
302*edd6aacbSBram Moolenaar
303*edd6aacbSBram Moolenaar  call assert_equal('1.23',     RubyEval('Vim::evaluate("1.23")'))
304*edd6aacbSBram Moolenaar  call assert_equal('Float',    RubyEval('Vim::evaluate("1.23").class'))
305*edd6aacbSBram Moolenaar
306*edd6aacbSBram Moolenaar  call assert_equal('foo',      RubyEval('Vim::evaluate("\"foo\"")'))
307*edd6aacbSBram Moolenaar  call assert_equal('String',   RubyEval('Vim::evaluate("\"foo\"").class'))
308*edd6aacbSBram Moolenaar
309*edd6aacbSBram Moolenaar  call assert_equal('[1, 2]',   RubyEval('Vim::evaluate("[1, 2]")'))
310*edd6aacbSBram Moolenaar  call assert_equal('Array',    RubyEval('Vim::evaluate("[1, 2]").class'))
311*edd6aacbSBram Moolenaar
312*edd6aacbSBram Moolenaar  call assert_equal('{"1"=>2}', RubyEval('Vim::evaluate("{1:2}")'))
313*edd6aacbSBram Moolenaar  call assert_equal('Hash',     RubyEval('Vim::evaluate("{1:2}").class'))
314*edd6aacbSBram Moolenaar
315*edd6aacbSBram Moolenaar  call assert_equal('',         RubyEval('Vim::evaluate("v:null")'))
316*edd6aacbSBram Moolenaar  call assert_equal('NilClass', RubyEval('Vim::evaluate("v:null").class'))
317*edd6aacbSBram Moolenaar
318*edd6aacbSBram Moolenaar  call assert_equal('',         RubyEval('Vim::evaluate("v:none")'))
319*edd6aacbSBram Moolenaar  call assert_equal('NilClass', RubyEval('Vim::evaluate("v:none").class'))
320*edd6aacbSBram Moolenaar
321*edd6aacbSBram Moolenaar  call assert_equal('true',      RubyEval('Vim::evaluate("v:true")'))
322*edd6aacbSBram Moolenaar  call assert_equal('TrueClass', RubyEval('Vim::evaluate("v:true").class'))
323*edd6aacbSBram Moolenaar  call assert_equal('false',     RubyEval('Vim::evaluate("v:false")'))
324*edd6aacbSBram Moolenaar  call assert_equal('FalseClass',RubyEval('Vim::evaluate("v:false").class'))
325*edd6aacbSBram Moolenaarendfunc
326*edd6aacbSBram Moolenaar
327*edd6aacbSBram Moolenaarfunc Test_Vim_evaluate_list()
328*edd6aacbSBram Moolenaar  call setline(line('$'), ['2 line 2'])
329*edd6aacbSBram Moolenaar  ruby Vim.command("normal /^2\n")
330*edd6aacbSBram Moolenaar  let l = ["abc", "def"]
331*edd6aacbSBram Moolenaar  ruby << EOF
332*edd6aacbSBram Moolenaar  curline = $curbuf.line_number
333*edd6aacbSBram Moolenaar  l = Vim.evaluate("l");
334*edd6aacbSBram Moolenaar  $curbuf.append(curline, l.join("\n"))
335*edd6aacbSBram MoolenaarEOF
336*edd6aacbSBram Moolenaar  normal j
337*edd6aacbSBram Moolenaar  .rubydo $_ = $_.gsub(/\n/, '/')
338*edd6aacbSBram Moolenaar  call assert_equal('abc/def', getline('$'))
339*edd6aacbSBram Moolenaarendfunc
340*edd6aacbSBram Moolenaar
341*edd6aacbSBram Moolenaarfunc Test_Vim_evaluate_dict()
342*edd6aacbSBram Moolenaar  let d = {'a': 'foo', 'b': 123}
343*edd6aacbSBram Moolenaar  redir => l:out
344*edd6aacbSBram Moolenaar  ruby d = Vim.evaluate("d"); print d
345*edd6aacbSBram Moolenaar  redir END
346*edd6aacbSBram Moolenaar  call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
347*edd6aacbSBram Moolenaarendfunc
348*edd6aacbSBram Moolenaar
349*edd6aacbSBram Moolenaar" Test Vim::message({msg}) (display message {msg})
350*edd6aacbSBram Moolenaarfunc Test_Vim_message()
351*edd6aacbSBram Moolenaar  ruby Vim::message('A message')
352*edd6aacbSBram Moolenaar  let messages = split(execute('message'), "\n")
353*edd6aacbSBram Moolenaar  call assert_equal('A message', messages[-1])
354*edd6aacbSBram Moolenaarendfunc
355*edd6aacbSBram Moolenaar
356*edd6aacbSBram Moolenaarfunc Test_print()
357*edd6aacbSBram Moolenaar  ruby print "Hello World!"
358*edd6aacbSBram Moolenaar  let messages = split(execute('message'), "\n")
359*edd6aacbSBram Moolenaar  call assert_equal('Hello World!', messages[-1])
360*edd6aacbSBram Moolenaarendfunc
361*edd6aacbSBram Moolenaar
362*edd6aacbSBram Moolenaarfunc Test_p()
363*edd6aacbSBram Moolenaar  ruby p 'Just a test'
364*edd6aacbSBram Moolenaar  let messages = split(execute('message'), "\n")
365*edd6aacbSBram Moolenaar  call assert_equal('"Just a test"', messages[-1])
36653901442SBram Moolenaarendfunc
367