xref: /vim-8.2.3635/src/testdir/test_ruby.vim (revision e99be0e6)
185babd6dSBram Moolenaar" Tests for ruby interface
285babd6dSBram Moolenaar
385babd6dSBram Moolenaarif !has('ruby')
485babd6dSBram Moolenaar  finish
585babd6dSBram Moolenaarend
685babd6dSBram Moolenaar
785babd6dSBram Moolenaarfunc Test_ruby_change_buffer()
885babd6dSBram Moolenaar  call setline(line('$'), ['1 line 1'])
985babd6dSBram Moolenaar  ruby Vim.command("normal /^1\n")
1085babd6dSBram Moolenaar  ruby $curbuf.line = "1 changed line 1"
1185babd6dSBram Moolenaar  call assert_equal('1 changed line 1', getline('$'))
1285babd6dSBram Moolenaarendfunc
1385babd6dSBram Moolenaar
14c593fee0SBram Moolenaarfunc Test_rubydo()
15c593fee0SBram Moolenaar  " Check deleting lines does not trigger ml_get error.
16c593fee0SBram Moolenaar  new
17c593fee0SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
18c593fee0SBram Moolenaar  rubydo Vim.command("%d_")
19c593fee0SBram Moolenaar  bwipe!
20c593fee0SBram Moolenaar
21c593fee0SBram Moolenaar  " Check switching to another buffer does not trigger ml_get error.
22c593fee0SBram Moolenaar  new
23c593fee0SBram Moolenaar  let wincount = winnr('$')
24c593fee0SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
25c593fee0SBram Moolenaar  rubydo Vim.command("new")
26c593fee0SBram Moolenaar  call assert_equal(wincount + 1, winnr('$'))
27edd6aacbSBram Moolenaar  %bwipe!
28c593fee0SBram Moolenaarendfunc
2937badc89SBram Moolenaar
3037badc89SBram Moolenaarfunc Test_rubyfile()
3137badc89SBram Moolenaar  " Check :rubyfile does not SEGV with Ruby level exception but just fails
3237badc89SBram Moolenaar  let tempfile = tempname() . '.rb'
3337badc89SBram Moolenaar  call writefile(['raise "vim!"'], tempfile)
3437badc89SBram Moolenaar  call assert_fails('rubyfile ' . tempfile)
3537badc89SBram Moolenaar  call delete(tempfile)
3637badc89SBram Moolenaarendfunc
3753901442SBram Moolenaar
3853901442SBram Moolenaarfunc Test_set_cursor()
3953901442SBram Moolenaar  " Check that setting the cursor position works.
4053901442SBram Moolenaar  new
4153901442SBram Moolenaar  call setline(1, ['first line', 'second line'])
4253901442SBram Moolenaar  normal gg
4353901442SBram Moolenaar  rubydo $curwin.cursor = [1, 5]
4453901442SBram Moolenaar  call assert_equal([1, 6], [line('.'), col('.')])
45*e99be0e6SBram Moolenaar  call assert_equal([1, 5], rubyeval('$curwin.cursor'))
4653901442SBram Moolenaar
4753901442SBram Moolenaar  " Check that movement after setting cursor position keeps current column.
4853901442SBram Moolenaar  normal j
4953901442SBram Moolenaar  call assert_equal([2, 6], [line('.'), col('.')])
50*e99be0e6SBram Moolenaar  call assert_equal([2, 5], rubyeval('$curwin.cursor'))
51edd6aacbSBram Moolenaar
52edd6aacbSBram Moolenaar  call assert_fails('ruby $curwin.cursor = [1]',
53edd6aacbSBram Moolenaar        \           'ArgumentError: array length must be 2')
54edd6aacbSBram Moolenaar  bwipe!
55edd6aacbSBram Moolenaarendfunc
56edd6aacbSBram Moolenaar
57edd6aacbSBram Moolenaar" Test buffer.count and buffer.length (number of lines in buffer)
58edd6aacbSBram Moolenaarfunc Test_buffer_count()
59edd6aacbSBram Moolenaar  new
60edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
61*e99be0e6SBram Moolenaar  call assert_equal(3, rubyeval('$curbuf.count'))
62*e99be0e6SBram Moolenaar  call assert_equal(3, rubyeval('$curbuf.length'))
63edd6aacbSBram Moolenaar  bwipe!
64edd6aacbSBram Moolenaarendfunc
65edd6aacbSBram Moolenaar
66edd6aacbSBram Moolenaar" Test buffer.name (buffer name)
67edd6aacbSBram Moolenaarfunc Test_buffer_name()
68edd6aacbSBram Moolenaar  new Xfoo
69*e99be0e6SBram Moolenaar  call assert_equal(expand('%:p'), rubyeval('$curbuf.name'))
70edd6aacbSBram Moolenaar  bwipe
71*e99be0e6SBram Moolenaar  call assert_equal(v:null, rubyeval('$curbuf.name'))
72edd6aacbSBram Moolenaarendfunc
73edd6aacbSBram Moolenaar
74edd6aacbSBram Moolenaar" Test buffer.number (number of the buffer).
75edd6aacbSBram Moolenaarfunc Test_buffer_number()
76edd6aacbSBram Moolenaar  new
77*e99be0e6SBram Moolenaar  call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
78edd6aacbSBram Moolenaar  new
79*e99be0e6SBram Moolenaar  call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
80edd6aacbSBram Moolenaar
81edd6aacbSBram Moolenaar  %bwipe
82edd6aacbSBram Moolenaarendfunc
83edd6aacbSBram Moolenaar
84edd6aacbSBram Moolenaar" Test buffer.delete({n}) (delete line {n})
85edd6aacbSBram Moolenaarfunc Test_buffer_delete()
86edd6aacbSBram Moolenaar  new
87edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
88edd6aacbSBram Moolenaar  ruby $curbuf.delete(2)
89edd6aacbSBram Moolenaar  call assert_equal(['one', 'three'], getline(1, '$'))
90edd6aacbSBram Moolenaar
91edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.delete(0)', 'IndexError: line number 0 out of range')
92edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.delete(3)', 'IndexError: line number 3 out of range')
93edd6aacbSBram Moolenaar
94edd6aacbSBram Moolenaar  bwipe!
95edd6aacbSBram Moolenaarendfunc
96edd6aacbSBram Moolenaar
97edd6aacbSBram Moolenaar" Test buffer.append({str}, str) (append line {str} after line {n})
98edd6aacbSBram Moolenaarfunc Test_buffer_append()
99edd6aacbSBram Moolenaar  new
100edd6aacbSBram Moolenaar  ruby $curbuf.append(0, 'one')
101edd6aacbSBram Moolenaar  ruby $curbuf.append(1, 'three')
102edd6aacbSBram Moolenaar  ruby $curbuf.append(1, 'two')
103edd6aacbSBram Moolenaar  ruby $curbuf.append(4, 'four')
104edd6aacbSBram Moolenaar
105edd6aacbSBram Moolenaar  call assert_equal(['one', 'two', 'three', '', 'four'], getline(1, '$'))
106edd6aacbSBram Moolenaar
107edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.append(-1, "x")',
108edd6aacbSBram Moolenaar        \           'IndexError: line number -1 out of range')
109edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.append(6, "x")',
110edd6aacbSBram Moolenaar        \           'IndexError: line number 6 out of range')
111edd6aacbSBram Moolenaar
112edd6aacbSBram Moolenaar  bwipe!
113edd6aacbSBram Moolenaarendfunc
114edd6aacbSBram Moolenaar
115edd6aacbSBram Moolenaar" Test buffer.line (get or set the current line)
116edd6aacbSBram Moolenaarfunc Test_buffer_line()
117edd6aacbSBram Moolenaar  new
118edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
119edd6aacbSBram Moolenaar  2
120*e99be0e6SBram Moolenaar  call assert_equal('two', rubyeval('$curbuf.line'))
121edd6aacbSBram Moolenaar
122edd6aacbSBram Moolenaar  ruby $curbuf.line = 'TWO'
123edd6aacbSBram Moolenaar  call assert_equal(['one', 'TWO', 'three'], getline(1, '$'))
124edd6aacbSBram Moolenaar
125edd6aacbSBram Moolenaar  bwipe!
126edd6aacbSBram Moolenaarendfunc
127edd6aacbSBram Moolenaar
128edd6aacbSBram Moolenaar" Test buffer.line_number (get current line number)
129edd6aacbSBram Moolenaarfunc Test_buffer_line_number()
130edd6aacbSBram Moolenaar  new
131edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
132edd6aacbSBram Moolenaar  2
133*e99be0e6SBram Moolenaar  call assert_equal(2, rubyeval('$curbuf.line_number'))
134edd6aacbSBram Moolenaar
135edd6aacbSBram Moolenaar  bwipe!
136edd6aacbSBram Moolenaarendfunc
137edd6aacbSBram Moolenaar
138edd6aacbSBram Moolenaarfunc Test_buffer_get()
139edd6aacbSBram Moolenaar  new
140edd6aacbSBram Moolenaar  call setline(1, ['one', 'two'])
141*e99be0e6SBram Moolenaar  call assert_equal('one', rubyeval('$curbuf[1]'))
142*e99be0e6SBram Moolenaar  call assert_equal('two', rubyeval('$curbuf[2]'))
143edd6aacbSBram Moolenaar
144edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[0]',
145edd6aacbSBram Moolenaar        \           'IndexError: line number 0 out of range')
146edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[3]',
147edd6aacbSBram Moolenaar        \           'IndexError: line number 3 out of range')
148edd6aacbSBram Moolenaar
149edd6aacbSBram Moolenaar  bwipe!
150edd6aacbSBram Moolenaarendfunc
151edd6aacbSBram Moolenaar
152edd6aacbSBram Moolenaarfunc Test_buffer_set()
153edd6aacbSBram Moolenaar  new
154edd6aacbSBram Moolenaar  call setline(1, ['one', 'two'])
155edd6aacbSBram Moolenaar  ruby $curbuf[2] = 'TWO'
156edd6aacbSBram Moolenaar  ruby $curbuf[1] = 'ONE'
157edd6aacbSBram Moolenaar
158edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[0] = "ZERO"',
159edd6aacbSBram Moolenaar        \           'IndexError: line number 0 out of range')
160edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[3] = "THREE"',
161edd6aacbSBram Moolenaar        \           'IndexError: line number 3 out of range')
162edd6aacbSBram Moolenaar  bwipe!
163edd6aacbSBram Moolenaarendfunc
164edd6aacbSBram Moolenaar
165edd6aacbSBram Moolenaar" Test window.width (get or set window height).
166edd6aacbSBram Moolenaarfunc Test_window_height()
167edd6aacbSBram Moolenaar  new
168edd6aacbSBram Moolenaar
169edd6aacbSBram Moolenaar  " Test setting window height
170edd6aacbSBram Moolenaar  ruby $curwin.height = 2
171edd6aacbSBram Moolenaar  call assert_equal(2, winheight(0))
172edd6aacbSBram Moolenaar
173edd6aacbSBram Moolenaar  " Test getting window height
174*e99be0e6SBram Moolenaar  call assert_equal(2, rubyeval('$curwin.height'))
175edd6aacbSBram Moolenaar
176edd6aacbSBram Moolenaar  bwipe
177edd6aacbSBram Moolenaarendfunc
178edd6aacbSBram Moolenaar
179edd6aacbSBram Moolenaar" Test window.width (get or set window width).
180edd6aacbSBram Moolenaarfunc Test_window_width()
181edd6aacbSBram Moolenaar  vnew
182edd6aacbSBram Moolenaar
183edd6aacbSBram Moolenaar  " Test setting window width
184edd6aacbSBram Moolenaar  ruby $curwin.width = 2
185edd6aacbSBram Moolenaar  call assert_equal(2, winwidth(0))
186edd6aacbSBram Moolenaar
187edd6aacbSBram Moolenaar  " Test getting window width
188*e99be0e6SBram Moolenaar  call assert_equal(2, rubyeval('$curwin.width'))
189edd6aacbSBram Moolenaar
190edd6aacbSBram Moolenaar  bwipe
191edd6aacbSBram Moolenaarendfunc
192edd6aacbSBram Moolenaar
193edd6aacbSBram Moolenaar" Test window.buffer (get buffer object of a window object).
194edd6aacbSBram Moolenaarfunc Test_window_buffer()
195edd6aacbSBram Moolenaar  new Xfoo1
196edd6aacbSBram Moolenaar  new Xfoo2
197edd6aacbSBram Moolenaar  ruby $b2 = $curwin.buffer
198edd6aacbSBram Moolenaar  ruby $w2 = $curwin
199edd6aacbSBram Moolenaar  wincmd j
200edd6aacbSBram Moolenaar  ruby $b1 = $curwin.buffer
201edd6aacbSBram Moolenaar  ruby $w1 = $curwin
202edd6aacbSBram Moolenaar
203*e99be0e6SBram Moolenaar  call assert_equal(rubyeval('$b1'), rubyeval('$w1.buffer'))
204*e99be0e6SBram Moolenaar  call assert_equal(rubyeval('$b2'), rubyeval('$w2.buffer'))
205*e99be0e6SBram Moolenaar  call assert_equal(bufnr('Xfoo1'), rubyeval('$w1.buffer.number'))
206*e99be0e6SBram Moolenaar  call assert_equal(bufnr('Xfoo2'), rubyeval('$w2.buffer.number'))
207edd6aacbSBram Moolenaar
208edd6aacbSBram Moolenaar  ruby $b1, $w1, $b2, $w2 = nil
209edd6aacbSBram Moolenaar  %bwipe
210edd6aacbSBram Moolenaarendfunc
211edd6aacbSBram Moolenaar
212edd6aacbSBram Moolenaar" Test Vim::Window.current (get current window object)
213edd6aacbSBram Moolenaarfunc Test_Vim_window_current()
214*e99be0e6SBram Moolenaar  let cw = rubyeval('$curwin')
215*e99be0e6SBram Moolenaar  call assert_equal(cw, rubyeval('Vim::Window.current'))
216edd6aacbSBram Moolenaar  call assert_match('^#<Vim::Window:0x\x\+>$', cw)
217edd6aacbSBram Moolenaarendfunc
218edd6aacbSBram Moolenaar
219edd6aacbSBram Moolenaar" Test Vim::Window.count (number of windows)
220edd6aacbSBram Moolenaarfunc Test_Vim_window_count()
221edd6aacbSBram Moolenaar  new Xfoo1
222edd6aacbSBram Moolenaar  new Xfoo2
223edd6aacbSBram Moolenaar  split
224*e99be0e6SBram Moolenaar  call assert_equal(4, rubyeval('Vim::Window.count'))
225edd6aacbSBram Moolenaar  %bwipe
226*e99be0e6SBram Moolenaar  call assert_equal(1, rubyeval('Vim::Window.count'))
227edd6aacbSBram Moolenaarendfunc
228edd6aacbSBram Moolenaar
229edd6aacbSBram Moolenaar" Test Vim::Window[n] (get window object of window n)
230edd6aacbSBram Moolenaarfunc Test_Vim_window_get()
231edd6aacbSBram Moolenaar  new Xfoo1
232edd6aacbSBram Moolenaar  new Xfoo2
233*e99be0e6SBram Moolenaar  call assert_match('Xfoo2$', rubyeval('Vim::Window[0].buffer.name'))
234edd6aacbSBram Moolenaar  wincmd j
235*e99be0e6SBram Moolenaar  call assert_match('Xfoo1$', rubyeval('Vim::Window[1].buffer.name'))
236edd6aacbSBram Moolenaar  wincmd j
237*e99be0e6SBram Moolenaar  call assert_equal(v:null,   rubyeval('Vim::Window[2].buffer.name'))
238edd6aacbSBram Moolenaar  %bwipe
239edd6aacbSBram Moolenaarendfunc
240edd6aacbSBram Moolenaar
241edd6aacbSBram Moolenaar" Test Vim::Buffer.current (return the buffer object of current buffer)
242edd6aacbSBram Moolenaarfunc Test_Vim_buffer_current()
243*e99be0e6SBram Moolenaar  let cb = rubyeval('$curbuf')
244*e99be0e6SBram Moolenaar  call assert_equal(cb, rubyeval('Vim::Buffer.current'))
245edd6aacbSBram Moolenaar  call assert_match('^#<Vim::Buffer:0x\x\+>$', cb)
246edd6aacbSBram Moolenaarendfunc
247edd6aacbSBram Moolenaar
248edd6aacbSBram Moolenaar" Test Vim::Buffer:.count (return the number of buffers)
249edd6aacbSBram Moolenaarfunc Test_Vim_buffer_count()
250edd6aacbSBram Moolenaar  new Xfoo1
251edd6aacbSBram Moolenaar  new Xfoo2
252*e99be0e6SBram Moolenaar  call assert_equal(3, rubyeval('Vim::Buffer.count'))
253edd6aacbSBram Moolenaar  %bwipe
254*e99be0e6SBram Moolenaar  call assert_equal(1, rubyeval('Vim::Buffer.count'))
255edd6aacbSBram Moolenaarendfunc
256edd6aacbSBram Moolenaar
257edd6aacbSBram Moolenaar" Test Vim::buffer[n] (return the buffer object of buffer number n)
258edd6aacbSBram Moolenaarfunc Test_Vim_buffer_get()
259edd6aacbSBram Moolenaar  new Xfoo1
260edd6aacbSBram Moolenaar  new Xfoo2
261edd6aacbSBram Moolenaar
262edd6aacbSBram Moolenaar  " Index of Vim::Buffer[n] goes from 0 to the number of buffers.
263*e99be0e6SBram Moolenaar  call assert_equal(v:null,   rubyeval('Vim::Buffer[0].name'))
264*e99be0e6SBram Moolenaar  call assert_match('Xfoo1$', rubyeval('Vim::Buffer[1].name'))
265*e99be0e6SBram Moolenaar  call assert_match('Xfoo2$', rubyeval('Vim::Buffer[2].name'))
266edd6aacbSBram Moolenaar  call assert_fails('ruby print Vim::Buffer[3].name',
267edd6aacbSBram Moolenaar        \           "NoMethodError: undefined method `name' for nil:NilClass")
268edd6aacbSBram Moolenaar  %bwipe
269edd6aacbSBram Moolenaarendfunc
270edd6aacbSBram Moolenaar
271edd6aacbSBram Moolenaar" Test Vim::command({cmd}) (execute a Ex command))
272edd6aacbSBram Moolenaar" Test Vim::command({cmd})
273edd6aacbSBram Moolenaarfunc Test_Vim_command()
274edd6aacbSBram Moolenaar  new
275edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three', 'four'])
276edd6aacbSBram Moolenaar  ruby Vim::command('2,3d')
277edd6aacbSBram Moolenaar  call assert_equal(['one', 'four'], getline(1, '$'))
278edd6aacbSBram Moolenaar  bwipe!
279edd6aacbSBram Moolenaarendfunc
280edd6aacbSBram Moolenaar
281edd6aacbSBram Moolenaar" Test Vim::set_option (set a vim option)
282edd6aacbSBram Moolenaarfunc Test_Vim_set_option()
283edd6aacbSBram Moolenaar  call assert_equal(0, &number)
284edd6aacbSBram Moolenaar  ruby Vim::set_option('number')
285edd6aacbSBram Moolenaar  call assert_equal(1, &number)
286edd6aacbSBram Moolenaar  ruby Vim::set_option('nonumber')
287edd6aacbSBram Moolenaar  call assert_equal(0, &number)
288edd6aacbSBram Moolenaarendfunc
289edd6aacbSBram Moolenaar
290edd6aacbSBram Moolenaarfunc Test_Vim_evaluate()
291*e99be0e6SBram Moolenaar  call assert_equal(123,        rubyeval('Vim::evaluate("123")'))
292edd6aacbSBram Moolenaar  " Vim::evaluate("123").class gives Integer or Fixnum depending
293edd6aacbSBram Moolenaar  " on versions of Ruby.
294*e99be0e6SBram Moolenaar  call assert_match('^Integer\|Fixnum$', rubyeval('Vim::evaluate("123").class'))
295edd6aacbSBram Moolenaar
296*e99be0e6SBram Moolenaar  call assert_equal(1.23,       rubyeval('Vim::evaluate("1.23")'))
297*e99be0e6SBram Moolenaar  call assert_equal('Float',    rubyeval('Vim::evaluate("1.23").class'))
298edd6aacbSBram Moolenaar
299*e99be0e6SBram Moolenaar  call assert_equal('foo',      rubyeval('Vim::evaluate("\"foo\"")'))
300*e99be0e6SBram Moolenaar  call assert_equal('String',   rubyeval('Vim::evaluate("\"foo\"").class'))
301edd6aacbSBram Moolenaar
302*e99be0e6SBram Moolenaar  call assert_equal(["\x01\xAB"],   rubyeval('Vim::evaluate("0z01ab").unpack("M")'))
303*e99be0e6SBram Moolenaar  call assert_equal('String',       rubyeval('Vim::evaluate("0z01ab").class'))
3040d13cce3SBram Moolenaar
305*e99be0e6SBram Moolenaar  call assert_equal([1, 2],     rubyeval('Vim::evaluate("[1, 2]")'))
306*e99be0e6SBram Moolenaar  call assert_equal('Array',    rubyeval('Vim::evaluate("[1, 2]").class'))
307edd6aacbSBram Moolenaar
308*e99be0e6SBram Moolenaar  call assert_equal({'1': 2},   rubyeval('Vim::evaluate("{1:2}")'))
309*e99be0e6SBram Moolenaar  call assert_equal('Hash',     rubyeval('Vim::evaluate("{1:2}").class'))
310edd6aacbSBram Moolenaar
311*e99be0e6SBram Moolenaar  call assert_equal(v:null,     rubyeval('Vim::evaluate("v:null")'))
312*e99be0e6SBram Moolenaar  call assert_equal('NilClass', rubyeval('Vim::evaluate("v:null").class'))
313edd6aacbSBram Moolenaar
314*e99be0e6SBram Moolenaar  call assert_equal(v:null,     rubyeval('Vim::evaluate("v:none")'))
315*e99be0e6SBram Moolenaar  call assert_equal('NilClass', rubyeval('Vim::evaluate("v:none").class'))
316edd6aacbSBram Moolenaar
317*e99be0e6SBram Moolenaar  call assert_equal(v:true,      rubyeval('Vim::evaluate("v:true")'))
318*e99be0e6SBram Moolenaar  call assert_equal('TrueClass', rubyeval('Vim::evaluate("v:true").class'))
319*e99be0e6SBram Moolenaar  call assert_equal(v:false,     rubyeval('Vim::evaluate("v:false")'))
320*e99be0e6SBram Moolenaar  call assert_equal('FalseClass',rubyeval('Vim::evaluate("v:false").class'))
321edd6aacbSBram Moolenaarendfunc
322edd6aacbSBram Moolenaar
3230d13cce3SBram Moolenaarfunc Test_Vim_blob()
324*e99be0e6SBram Moolenaar  call assert_equal('0z',         rubyeval('Vim::blob("")'))
325*e99be0e6SBram Moolenaar  call assert_equal('0z31326162', rubyeval('Vim::blob("12ab")'))
326*e99be0e6SBram Moolenaar  call assert_equal('0z00010203', rubyeval('Vim::blob("\x00\x01\x02\x03")'))
327*e99be0e6SBram Moolenaar  call assert_equal('0z8081FEFF', rubyeval('Vim::blob("\x80\x81\xfe\xff")'))
3280d13cce3SBram Moolenaarendfunc
3290d13cce3SBram Moolenaar
330edd6aacbSBram Moolenaarfunc Test_Vim_evaluate_list()
331edd6aacbSBram Moolenaar  call setline(line('$'), ['2 line 2'])
332edd6aacbSBram Moolenaar  ruby Vim.command("normal /^2\n")
333edd6aacbSBram Moolenaar  let l = ["abc", "def"]
334edd6aacbSBram Moolenaar  ruby << EOF
335edd6aacbSBram Moolenaar  curline = $curbuf.line_number
336edd6aacbSBram Moolenaar  l = Vim.evaluate("l");
337edd6aacbSBram Moolenaar  $curbuf.append(curline, l.join("\n"))
338edd6aacbSBram MoolenaarEOF
339edd6aacbSBram Moolenaar  normal j
340edd6aacbSBram Moolenaar  .rubydo $_ = $_.gsub(/\n/, '/')
341edd6aacbSBram Moolenaar  call assert_equal('abc/def', getline('$'))
342edd6aacbSBram Moolenaarendfunc
343edd6aacbSBram Moolenaar
344edd6aacbSBram Moolenaarfunc Test_Vim_evaluate_dict()
345edd6aacbSBram Moolenaar  let d = {'a': 'foo', 'b': 123}
346edd6aacbSBram Moolenaar  redir => l:out
347edd6aacbSBram Moolenaar  ruby d = Vim.evaluate("d"); print d
348edd6aacbSBram Moolenaar  redir END
349edd6aacbSBram Moolenaar  call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
350edd6aacbSBram Moolenaarendfunc
351edd6aacbSBram Moolenaar
352edd6aacbSBram Moolenaar" Test Vim::message({msg}) (display message {msg})
353edd6aacbSBram Moolenaarfunc Test_Vim_message()
354edd6aacbSBram Moolenaar  ruby Vim::message('A message')
355edd6aacbSBram Moolenaar  let messages = split(execute('message'), "\n")
356edd6aacbSBram Moolenaar  call assert_equal('A message', messages[-1])
357edd6aacbSBram Moolenaarendfunc
358edd6aacbSBram Moolenaar
359edd6aacbSBram Moolenaarfunc Test_print()
360*e99be0e6SBram Moolenaar  func RubyPrint(expr)
361*e99be0e6SBram Moolenaar    return trim(execute('ruby print ' . a:expr))
362*e99be0e6SBram Moolenaar  endfunc
363*e99be0e6SBram Moolenaar
364*e99be0e6SBram Moolenaar  call assert_equal('123', RubyPrint('123'))
365*e99be0e6SBram Moolenaar  call assert_equal('1.23', RubyPrint('1.23'))
366*e99be0e6SBram Moolenaar  call assert_equal('Hello World!', RubyPrint('"Hello World!"'))
367*e99be0e6SBram Moolenaar  call assert_equal('[1, 2]', RubyPrint('[1, 2]'))
368*e99be0e6SBram Moolenaar  call assert_equal('{"k1"=>"v1", "k2"=>"v2"}', RubyPrint('({"k1" => "v1", "k2" => "v2"})'))
369*e99be0e6SBram Moolenaar  call assert_equal('true', RubyPrint('true'))
370*e99be0e6SBram Moolenaar  call assert_equal('false', RubyPrint('false'))
371*e99be0e6SBram Moolenaar  call assert_equal('', RubyPrint('nil'))
372*e99be0e6SBram Moolenaar  call assert_match('Vim', RubyPrint('Vim'))
373*e99be0e6SBram Moolenaar  call assert_match('Module', RubyPrint('Vim.class'))
374*e99be0e6SBram Moolenaar
375*e99be0e6SBram Moolenaar  delfunc RubyPrint
376edd6aacbSBram Moolenaarendfunc
377edd6aacbSBram Moolenaar
378edd6aacbSBram Moolenaarfunc Test_p()
379edd6aacbSBram Moolenaar  ruby p 'Just a test'
380edd6aacbSBram Moolenaar  let messages = split(execute('message'), "\n")
381edd6aacbSBram Moolenaar  call assert_equal('"Just a test"', messages[-1])
38251e9fbf1SBram Moolenaar
38351e9fbf1SBram Moolenaar  " Check return values of p method
38451e9fbf1SBram Moolenaar
385*e99be0e6SBram Moolenaar  call assert_equal(123, rubyeval('p(123)'))
386*e99be0e6SBram Moolenaar  call assert_equal([1, 2, 3], rubyeval('p(1, 2, 3)'))
38751e9fbf1SBram Moolenaar
38851e9fbf1SBram Moolenaar  " Avoid the "message maintainer" line.
38951e9fbf1SBram Moolenaar  let $LANG = ''
39051e9fbf1SBram Moolenaar  messages clear
391*e99be0e6SBram Moolenaar  call assert_equal(v:true, rubyeval('p() == nil'))
39251e9fbf1SBram Moolenaar
39351e9fbf1SBram Moolenaar  let messages = split(execute('message'), "\n")
39451e9fbf1SBram Moolenaar  call assert_equal(0, len(messages))
39553901442SBram Moolenaarendfunc
396