xref: /vim-8.2.3635/src/testdir/test_ruby.vim (revision a190548e)
185babd6dSBram Moolenaar" Tests for ruby interface
285babd6dSBram Moolenaar
3b46fecd3SBram Moolenaarsource check.vim
4b46fecd3SBram MoolenaarCheckFeature ruby
585babd6dSBram Moolenaar
685babd6dSBram Moolenaarfunc Test_ruby_change_buffer()
785babd6dSBram Moolenaar  call setline(line('$'), ['1 line 1'])
885babd6dSBram Moolenaar  ruby Vim.command("normal /^1\n")
985babd6dSBram Moolenaar  ruby $curbuf.line = "1 changed line 1"
1085babd6dSBram Moolenaar  call assert_equal('1 changed line 1', getline('$'))
1185babd6dSBram Moolenaarendfunc
1285babd6dSBram Moolenaar
13c593fee0SBram Moolenaarfunc Test_rubydo()
14c593fee0SBram Moolenaar  " Check deleting lines does not trigger ml_get error.
15c593fee0SBram Moolenaar  new
16c593fee0SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
17c593fee0SBram Moolenaar  rubydo Vim.command("%d_")
18c593fee0SBram Moolenaar  bwipe!
19c593fee0SBram Moolenaar
20c593fee0SBram Moolenaar  " Check switching to another buffer does not trigger ml_get error.
21c593fee0SBram Moolenaar  new
22c593fee0SBram Moolenaar  let wincount = winnr('$')
23c593fee0SBram Moolenaar  call setline(1, ['one', 'two', 'three'])
24c593fee0SBram Moolenaar  rubydo Vim.command("new")
25c593fee0SBram Moolenaar  call assert_equal(wincount + 1, winnr('$'))
26edd6aacbSBram Moolenaar  %bwipe!
27c593fee0SBram Moolenaarendfunc
2837badc89SBram Moolenaar
29*a190548eSBram Moolenaarfunc Test_rubydo_dollar_underscore()
30*a190548eSBram Moolenaar  new
31*a190548eSBram Moolenaar  call setline(1, ['one', 'two', 'three', 'four'])
32*a190548eSBram Moolenaar  2,3rubydo $_ = '[' + $_  + ']'
33*a190548eSBram Moolenaar  call assert_equal(['one', '[two]', '[three]', 'four'], getline(1, '$'))
34*a190548eSBram Moolenaar  bwipe!
35*a190548eSBram Moolenaar
36*a190548eSBram Moolenaar  call assert_fails('rubydo $_ = 0', 'E265:')
37*a190548eSBram Moolenaar  call assert_fails('rubydo (')
38*a190548eSBram Moolenaar  bwipe!
39*a190548eSBram Moolenaarendfunc
40*a190548eSBram Moolenaar
4137badc89SBram Moolenaarfunc Test_rubyfile()
4237badc89SBram Moolenaar  " Check :rubyfile does not SEGV with Ruby level exception but just fails
4337badc89SBram Moolenaar  let tempfile = tempname() . '.rb'
4437badc89SBram Moolenaar  call writefile(['raise "vim!"'], tempfile)
4537badc89SBram Moolenaar  call assert_fails('rubyfile ' . tempfile)
4637badc89SBram Moolenaar  call delete(tempfile)
4737badc89SBram Moolenaarendfunc
4853901442SBram Moolenaar
495feabe00SBram Moolenaarfunc Test_ruby_set_cursor()
5053901442SBram Moolenaar  " Check that setting the cursor position works.
5153901442SBram Moolenaar  new
5253901442SBram Moolenaar  call setline(1, ['first line', 'second line'])
5353901442SBram Moolenaar  normal gg
5453901442SBram Moolenaar  rubydo $curwin.cursor = [1, 5]
5553901442SBram Moolenaar  call assert_equal([1, 6], [line('.'), col('.')])
56e99be0e6SBram Moolenaar  call assert_equal([1, 5], rubyeval('$curwin.cursor'))
5753901442SBram Moolenaar
5853901442SBram Moolenaar  " Check that movement after setting cursor position keeps current column.
5953901442SBram Moolenaar  normal j
6053901442SBram Moolenaar  call assert_equal([2, 6], [line('.'), col('.')])
614a4981b7SBram Moolenaar  call assert_equal([2, 5], '$curwin.cursor'->rubyeval())
62edd6aacbSBram Moolenaar
63edd6aacbSBram Moolenaar  call assert_fails('ruby $curwin.cursor = [1]',
64edd6aacbSBram Moolenaar        \           'ArgumentError: array length must be 2')
65edd6aacbSBram Moolenaar  bwipe!
66edd6aacbSBram Moolenaarendfunc
67edd6aacbSBram Moolenaar
68edd6aacbSBram Moolenaar" Test buffer.count and buffer.length (number of lines in buffer)
695feabe00SBram Moolenaarfunc Test_ruby_buffer_count()
70edd6aacbSBram Moolenaar  new
71edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
72e99be0e6SBram Moolenaar  call assert_equal(3, rubyeval('$curbuf.count'))
73e99be0e6SBram Moolenaar  call assert_equal(3, rubyeval('$curbuf.length'))
74edd6aacbSBram Moolenaar  bwipe!
75edd6aacbSBram Moolenaarendfunc
76edd6aacbSBram Moolenaar
77edd6aacbSBram Moolenaar" Test buffer.name (buffer name)
785feabe00SBram Moolenaarfunc Test_ruby_buffer_name()
79edd6aacbSBram Moolenaar  new Xfoo
80e99be0e6SBram Moolenaar  call assert_equal(expand('%:p'), rubyeval('$curbuf.name'))
81edd6aacbSBram Moolenaar  bwipe
82e99be0e6SBram Moolenaar  call assert_equal(v:null, rubyeval('$curbuf.name'))
83edd6aacbSBram Moolenaarendfunc
84edd6aacbSBram Moolenaar
85edd6aacbSBram Moolenaar" Test buffer.number (number of the buffer).
865feabe00SBram Moolenaarfunc Test_ruby_buffer_number()
87edd6aacbSBram Moolenaar  new
88e99be0e6SBram Moolenaar  call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
89edd6aacbSBram Moolenaar  new
90e99be0e6SBram Moolenaar  call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
91edd6aacbSBram Moolenaar
92edd6aacbSBram Moolenaar  %bwipe
93edd6aacbSBram Moolenaarendfunc
94edd6aacbSBram Moolenaar
95edd6aacbSBram Moolenaar" Test buffer.delete({n}) (delete line {n})
965feabe00SBram Moolenaarfunc Test_ruby_buffer_delete()
97edd6aacbSBram Moolenaar  new
98edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
99edd6aacbSBram Moolenaar  ruby $curbuf.delete(2)
100edd6aacbSBram Moolenaar  call assert_equal(['one', 'three'], getline(1, '$'))
101edd6aacbSBram Moolenaar
102edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.delete(0)', 'IndexError: line number 0 out of range')
103edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.delete(3)', 'IndexError: line number 3 out of range')
104edd6aacbSBram Moolenaar
105edd6aacbSBram Moolenaar  bwipe!
106edd6aacbSBram Moolenaarendfunc
107edd6aacbSBram Moolenaar
108edd6aacbSBram Moolenaar" Test buffer.append({str}, str) (append line {str} after line {n})
1095feabe00SBram Moolenaarfunc Test_ruby_buffer_append()
110edd6aacbSBram Moolenaar  new
111edd6aacbSBram Moolenaar  ruby $curbuf.append(0, 'one')
112edd6aacbSBram Moolenaar  ruby $curbuf.append(1, 'three')
113edd6aacbSBram Moolenaar  ruby $curbuf.append(1, 'two')
114edd6aacbSBram Moolenaar  ruby $curbuf.append(4, 'four')
115edd6aacbSBram Moolenaar
116edd6aacbSBram Moolenaar  call assert_equal(['one', 'two', 'three', '', 'four'], getline(1, '$'))
117edd6aacbSBram Moolenaar
118edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.append(-1, "x")',
119edd6aacbSBram Moolenaar        \           'IndexError: line number -1 out of range')
120edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf.append(6, "x")',
121edd6aacbSBram Moolenaar        \           'IndexError: line number 6 out of range')
122edd6aacbSBram Moolenaar
123edd6aacbSBram Moolenaar  bwipe!
124edd6aacbSBram Moolenaarendfunc
125edd6aacbSBram Moolenaar
126edd6aacbSBram Moolenaar" Test buffer.line (get or set the current line)
1275feabe00SBram Moolenaarfunc Test_ruby_buffer_line()
128edd6aacbSBram Moolenaar  new
129edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
130edd6aacbSBram Moolenaar  2
131e99be0e6SBram Moolenaar  call assert_equal('two', rubyeval('$curbuf.line'))
132edd6aacbSBram Moolenaar
133edd6aacbSBram Moolenaar  ruby $curbuf.line = 'TWO'
134edd6aacbSBram Moolenaar  call assert_equal(['one', 'TWO', 'three'], getline(1, '$'))
135edd6aacbSBram Moolenaar
136edd6aacbSBram Moolenaar  bwipe!
137edd6aacbSBram Moolenaarendfunc
138edd6aacbSBram Moolenaar
139edd6aacbSBram Moolenaar" Test buffer.line_number (get current line number)
1405feabe00SBram Moolenaarfunc Test_ruby_buffer_line_number()
141edd6aacbSBram Moolenaar  new
142edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three'])
143edd6aacbSBram Moolenaar  2
144e99be0e6SBram Moolenaar  call assert_equal(2, rubyeval('$curbuf.line_number'))
145edd6aacbSBram Moolenaar
146edd6aacbSBram Moolenaar  bwipe!
147edd6aacbSBram Moolenaarendfunc
148edd6aacbSBram Moolenaar
1495feabe00SBram Moolenaarfunc Test_ruby_buffer_get()
150edd6aacbSBram Moolenaar  new
151edd6aacbSBram Moolenaar  call setline(1, ['one', 'two'])
152e99be0e6SBram Moolenaar  call assert_equal('one', rubyeval('$curbuf[1]'))
153e99be0e6SBram Moolenaar  call assert_equal('two', rubyeval('$curbuf[2]'))
154edd6aacbSBram Moolenaar
155edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[0]',
156edd6aacbSBram Moolenaar        \           'IndexError: line number 0 out of range')
157edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[3]',
158edd6aacbSBram Moolenaar        \           'IndexError: line number 3 out of range')
159edd6aacbSBram Moolenaar
160edd6aacbSBram Moolenaar  bwipe!
161edd6aacbSBram Moolenaarendfunc
162edd6aacbSBram Moolenaar
1635feabe00SBram Moolenaarfunc Test_ruby_buffer_set()
164edd6aacbSBram Moolenaar  new
165edd6aacbSBram Moolenaar  call setline(1, ['one', 'two'])
166edd6aacbSBram Moolenaar  ruby $curbuf[2] = 'TWO'
167edd6aacbSBram Moolenaar  ruby $curbuf[1] = 'ONE'
168edd6aacbSBram Moolenaar
169edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[0] = "ZERO"',
170edd6aacbSBram Moolenaar        \           'IndexError: line number 0 out of range')
171edd6aacbSBram Moolenaar  call assert_fails('ruby $curbuf[3] = "THREE"',
172edd6aacbSBram Moolenaar        \           'IndexError: line number 3 out of range')
173edd6aacbSBram Moolenaar  bwipe!
174edd6aacbSBram Moolenaarendfunc
175edd6aacbSBram Moolenaar
176edd6aacbSBram Moolenaar" Test window.width (get or set window height).
1775feabe00SBram Moolenaarfunc Test_ruby_window_height()
178edd6aacbSBram Moolenaar  new
179edd6aacbSBram Moolenaar
180edd6aacbSBram Moolenaar  " Test setting window height
181edd6aacbSBram Moolenaar  ruby $curwin.height = 2
182edd6aacbSBram Moolenaar  call assert_equal(2, winheight(0))
183edd6aacbSBram Moolenaar
184edd6aacbSBram Moolenaar  " Test getting window height
185e99be0e6SBram Moolenaar  call assert_equal(2, rubyeval('$curwin.height'))
186edd6aacbSBram Moolenaar
187edd6aacbSBram Moolenaar  bwipe
188edd6aacbSBram Moolenaarendfunc
189edd6aacbSBram Moolenaar
190edd6aacbSBram Moolenaar" Test window.width (get or set window width).
1915feabe00SBram Moolenaarfunc Test_ruby_window_width()
192edd6aacbSBram Moolenaar  vnew
193edd6aacbSBram Moolenaar
194edd6aacbSBram Moolenaar  " Test setting window width
195edd6aacbSBram Moolenaar  ruby $curwin.width = 2
196edd6aacbSBram Moolenaar  call assert_equal(2, winwidth(0))
197edd6aacbSBram Moolenaar
198edd6aacbSBram Moolenaar  " Test getting window width
199e99be0e6SBram Moolenaar  call assert_equal(2, rubyeval('$curwin.width'))
200edd6aacbSBram Moolenaar
201edd6aacbSBram Moolenaar  bwipe
202edd6aacbSBram Moolenaarendfunc
203edd6aacbSBram Moolenaar
204edd6aacbSBram Moolenaar" Test window.buffer (get buffer object of a window object).
2055feabe00SBram Moolenaarfunc Test_ruby_window_buffer()
206edd6aacbSBram Moolenaar  new Xfoo1
207edd6aacbSBram Moolenaar  new Xfoo2
208edd6aacbSBram Moolenaar  ruby $b2 = $curwin.buffer
209edd6aacbSBram Moolenaar  ruby $w2 = $curwin
210edd6aacbSBram Moolenaar  wincmd j
211edd6aacbSBram Moolenaar  ruby $b1 = $curwin.buffer
212edd6aacbSBram Moolenaar  ruby $w1 = $curwin
213edd6aacbSBram Moolenaar
214e99be0e6SBram Moolenaar  call assert_equal(rubyeval('$b1'), rubyeval('$w1.buffer'))
215e99be0e6SBram Moolenaar  call assert_equal(rubyeval('$b2'), rubyeval('$w2.buffer'))
216e99be0e6SBram Moolenaar  call assert_equal(bufnr('Xfoo1'), rubyeval('$w1.buffer.number'))
217e99be0e6SBram Moolenaar  call assert_equal(bufnr('Xfoo2'), rubyeval('$w2.buffer.number'))
218edd6aacbSBram Moolenaar
219edd6aacbSBram Moolenaar  ruby $b1, $w1, $b2, $w2 = nil
220edd6aacbSBram Moolenaar  %bwipe
221edd6aacbSBram Moolenaarendfunc
222edd6aacbSBram Moolenaar
223edd6aacbSBram Moolenaar" Test Vim::Window.current (get current window object)
2245feabe00SBram Moolenaarfunc Test_ruby_Vim_window_current()
225e99be0e6SBram Moolenaar  let cw = rubyeval('$curwin')
226e99be0e6SBram Moolenaar  call assert_equal(cw, rubyeval('Vim::Window.current'))
227edd6aacbSBram Moolenaar  call assert_match('^#<Vim::Window:0x\x\+>$', cw)
228edd6aacbSBram Moolenaarendfunc
229edd6aacbSBram Moolenaar
230edd6aacbSBram Moolenaar" Test Vim::Window.count (number of windows)
2315feabe00SBram Moolenaarfunc Test_ruby_Vim_window_count()
232edd6aacbSBram Moolenaar  new Xfoo1
233edd6aacbSBram Moolenaar  new Xfoo2
234edd6aacbSBram Moolenaar  split
235e99be0e6SBram Moolenaar  call assert_equal(4, rubyeval('Vim::Window.count'))
236edd6aacbSBram Moolenaar  %bwipe
237e99be0e6SBram Moolenaar  call assert_equal(1, rubyeval('Vim::Window.count'))
238edd6aacbSBram Moolenaarendfunc
239edd6aacbSBram Moolenaar
240edd6aacbSBram Moolenaar" Test Vim::Window[n] (get window object of window n)
2415feabe00SBram Moolenaarfunc Test_ruby_Vim_window_get()
242edd6aacbSBram Moolenaar  new Xfoo1
243edd6aacbSBram Moolenaar  new Xfoo2
244e99be0e6SBram Moolenaar  call assert_match('Xfoo2$', rubyeval('Vim::Window[0].buffer.name'))
245edd6aacbSBram Moolenaar  wincmd j
246e99be0e6SBram Moolenaar  call assert_match('Xfoo1$', rubyeval('Vim::Window[1].buffer.name'))
247edd6aacbSBram Moolenaar  wincmd j
248e99be0e6SBram Moolenaar  call assert_equal(v:null,   rubyeval('Vim::Window[2].buffer.name'))
249edd6aacbSBram Moolenaar  %bwipe
250edd6aacbSBram Moolenaarendfunc
251edd6aacbSBram Moolenaar
252edd6aacbSBram Moolenaar" Test Vim::Buffer.current (return the buffer object of current buffer)
2535feabe00SBram Moolenaarfunc Test_ruby_Vim_buffer_current()
254e99be0e6SBram Moolenaar  let cb = rubyeval('$curbuf')
255e99be0e6SBram Moolenaar  call assert_equal(cb, rubyeval('Vim::Buffer.current'))
256edd6aacbSBram Moolenaar  call assert_match('^#<Vim::Buffer:0x\x\+>$', cb)
257edd6aacbSBram Moolenaarendfunc
258edd6aacbSBram Moolenaar
259edd6aacbSBram Moolenaar" Test Vim::Buffer:.count (return the number of buffers)
2605feabe00SBram Moolenaarfunc Test_ruby_Vim_buffer_count()
261edd6aacbSBram Moolenaar  new Xfoo1
262edd6aacbSBram Moolenaar  new Xfoo2
263e99be0e6SBram Moolenaar  call assert_equal(3, rubyeval('Vim::Buffer.count'))
264edd6aacbSBram Moolenaar  %bwipe
265e99be0e6SBram Moolenaar  call assert_equal(1, rubyeval('Vim::Buffer.count'))
266edd6aacbSBram Moolenaarendfunc
267edd6aacbSBram Moolenaar
268edd6aacbSBram Moolenaar" Test Vim::buffer[n] (return the buffer object of buffer number n)
2695feabe00SBram Moolenaarfunc Test_ruby_Vim_buffer_get()
270edd6aacbSBram Moolenaar  new Xfoo1
271edd6aacbSBram Moolenaar  new Xfoo2
272edd6aacbSBram Moolenaar
273edd6aacbSBram Moolenaar  " Index of Vim::Buffer[n] goes from 0 to the number of buffers.
274e99be0e6SBram Moolenaar  call assert_equal(v:null,   rubyeval('Vim::Buffer[0].name'))
275e99be0e6SBram Moolenaar  call assert_match('Xfoo1$', rubyeval('Vim::Buffer[1].name'))
276e99be0e6SBram Moolenaar  call assert_match('Xfoo2$', rubyeval('Vim::Buffer[2].name'))
277edd6aacbSBram Moolenaar  call assert_fails('ruby print Vim::Buffer[3].name',
278edd6aacbSBram Moolenaar        \           "NoMethodError: undefined method `name' for nil:NilClass")
279edd6aacbSBram Moolenaar  %bwipe
280edd6aacbSBram Moolenaarendfunc
281edd6aacbSBram Moolenaar
282edd6aacbSBram Moolenaar" Test Vim::command({cmd}) (execute a Ex command))
283edd6aacbSBram Moolenaar" Test Vim::command({cmd})
2845feabe00SBram Moolenaarfunc Test_ruby_Vim_command()
285edd6aacbSBram Moolenaar  new
286edd6aacbSBram Moolenaar  call setline(1, ['one', 'two', 'three', 'four'])
287edd6aacbSBram Moolenaar  ruby Vim::command('2,3d')
288edd6aacbSBram Moolenaar  call assert_equal(['one', 'four'], getline(1, '$'))
289edd6aacbSBram Moolenaar  bwipe!
290edd6aacbSBram Moolenaarendfunc
291edd6aacbSBram Moolenaar
292edd6aacbSBram Moolenaar" Test Vim::set_option (set a vim option)
2935feabe00SBram Moolenaarfunc Test_ruby_Vim_set_option()
294edd6aacbSBram Moolenaar  call assert_equal(0, &number)
295edd6aacbSBram Moolenaar  ruby Vim::set_option('number')
296edd6aacbSBram Moolenaar  call assert_equal(1, &number)
297edd6aacbSBram Moolenaar  ruby Vim::set_option('nonumber')
298edd6aacbSBram Moolenaar  call assert_equal(0, &number)
299edd6aacbSBram Moolenaarendfunc
300edd6aacbSBram Moolenaar
3015feabe00SBram Moolenaarfunc Test_ruby_Vim_evaluate()
302e99be0e6SBram Moolenaar  call assert_equal(123,        rubyeval('Vim::evaluate("123")'))
303edd6aacbSBram Moolenaar  " Vim::evaluate("123").class gives Integer or Fixnum depending
304edd6aacbSBram Moolenaar  " on versions of Ruby.
305e99be0e6SBram Moolenaar  call assert_match('^Integer\|Fixnum$', rubyeval('Vim::evaluate("123").class'))
306edd6aacbSBram Moolenaar
3075feabe00SBram Moolenaar  if has('float')
308e99be0e6SBram Moolenaar    call assert_equal(1.23,       rubyeval('Vim::evaluate("1.23")'))
309e99be0e6SBram Moolenaar    call assert_equal('Float',    rubyeval('Vim::evaluate("1.23").class'))
3105feabe00SBram Moolenaar  endif
311edd6aacbSBram Moolenaar
312e99be0e6SBram Moolenaar  call assert_equal('foo',      rubyeval('Vim::evaluate("\"foo\"")'))
313e99be0e6SBram Moolenaar  call assert_equal('String',   rubyeval('Vim::evaluate("\"foo\"").class'))
314edd6aacbSBram Moolenaar
315e99be0e6SBram Moolenaar  call assert_equal(["\x01\xAB"],   rubyeval('Vim::evaluate("0z01ab").unpack("M")'))
316e99be0e6SBram Moolenaar  call assert_equal('String',       rubyeval('Vim::evaluate("0z01ab").class'))
3170d13cce3SBram Moolenaar
318e99be0e6SBram Moolenaar  call assert_equal([1, 2],     rubyeval('Vim::evaluate("[1, 2]")'))
319e99be0e6SBram Moolenaar  call assert_equal('Array',    rubyeval('Vim::evaluate("[1, 2]").class'))
320edd6aacbSBram Moolenaar
321e99be0e6SBram Moolenaar  call assert_equal({'1': 2},   rubyeval('Vim::evaluate("{1:2}")'))
322e99be0e6SBram Moolenaar  call assert_equal('Hash',     rubyeval('Vim::evaluate("{1:2}").class'))
323edd6aacbSBram Moolenaar
324e99be0e6SBram Moolenaar  call assert_equal(v:null,     rubyeval('Vim::evaluate("v:null")'))
325e99be0e6SBram Moolenaar  call assert_equal('NilClass', rubyeval('Vim::evaluate("v:null").class'))
326edd6aacbSBram Moolenaar
327e99be0e6SBram Moolenaar  call assert_equal(v:null,     rubyeval('Vim::evaluate("v:none")'))
328e99be0e6SBram Moolenaar  call assert_equal('NilClass', rubyeval('Vim::evaluate("v:none").class'))
329edd6aacbSBram Moolenaar
330e99be0e6SBram Moolenaar  call assert_equal(v:true,      rubyeval('Vim::evaluate("v:true")'))
331e99be0e6SBram Moolenaar  call assert_equal('TrueClass', rubyeval('Vim::evaluate("v:true").class'))
332e99be0e6SBram Moolenaar  call assert_equal(v:false,     rubyeval('Vim::evaluate("v:false")'))
333e99be0e6SBram Moolenaar  call assert_equal('FalseClass',rubyeval('Vim::evaluate("v:false").class'))
334edd6aacbSBram Moolenaarendfunc
335edd6aacbSBram Moolenaar
3365feabe00SBram Moolenaarfunc Test_ruby_Vim_blob()
337e99be0e6SBram Moolenaar  call assert_equal('0z',         rubyeval('Vim::blob("")'))
338e99be0e6SBram Moolenaar  call assert_equal('0z31326162', rubyeval('Vim::blob("12ab")'))
339e99be0e6SBram Moolenaar  call assert_equal('0z00010203', rubyeval('Vim::blob("\x00\x01\x02\x03")'))
340e99be0e6SBram Moolenaar  call assert_equal('0z8081FEFF', rubyeval('Vim::blob("\x80\x81\xfe\xff")'))
3410d13cce3SBram Moolenaarendfunc
3420d13cce3SBram Moolenaar
3435feabe00SBram Moolenaarfunc Test_ruby_Vim_evaluate_list()
344edd6aacbSBram Moolenaar  call setline(line('$'), ['2 line 2'])
345edd6aacbSBram Moolenaar  ruby Vim.command("normal /^2\n")
346edd6aacbSBram Moolenaar  let l = ["abc", "def"]
3476c2b7b80SBram Moolenaar  ruby << trim EOF
348edd6aacbSBram Moolenaar    curline = $curbuf.line_number
349edd6aacbSBram Moolenaar    l = Vim.evaluate("l");
350edd6aacbSBram Moolenaar    $curbuf.append(curline, l.join("\n"))
351edd6aacbSBram Moolenaar  EOF
352edd6aacbSBram Moolenaar  normal j
353edd6aacbSBram Moolenaar  .rubydo $_ = $_.gsub(/\n/, '/')
354edd6aacbSBram Moolenaar  call assert_equal('abc/def', getline('$'))
355edd6aacbSBram Moolenaarendfunc
356edd6aacbSBram Moolenaar
3575feabe00SBram Moolenaarfunc Test_ruby_Vim_evaluate_dict()
358edd6aacbSBram Moolenaar  let d = {'a': 'foo', 'b': 123}
359edd6aacbSBram Moolenaar  redir => l:out
360edd6aacbSBram Moolenaar  ruby d = Vim.evaluate("d"); print d
361edd6aacbSBram Moolenaar  redir END
362edd6aacbSBram Moolenaar  call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
363edd6aacbSBram Moolenaarendfunc
364edd6aacbSBram Moolenaar
365edd6aacbSBram Moolenaar" Test Vim::message({msg}) (display message {msg})
3665feabe00SBram Moolenaarfunc Test_ruby_Vim_message()
367edd6aacbSBram Moolenaar  ruby Vim::message('A message')
368edd6aacbSBram Moolenaar  let messages = split(execute('message'), "\n")
369edd6aacbSBram Moolenaar  call assert_equal('A message', messages[-1])
370edd6aacbSBram Moolenaarendfunc
371edd6aacbSBram Moolenaar
3725feabe00SBram Moolenaarfunc Test_ruby_print()
373e99be0e6SBram Moolenaar  func RubyPrint(expr)
374e99be0e6SBram Moolenaar    return trim(execute('ruby print ' . a:expr))
375e99be0e6SBram Moolenaar  endfunc
376e99be0e6SBram Moolenaar
377e99be0e6SBram Moolenaar  call assert_equal('123', RubyPrint('123'))
378e99be0e6SBram Moolenaar  call assert_equal('1.23', RubyPrint('1.23'))
379e99be0e6SBram Moolenaar  call assert_equal('Hello World!', RubyPrint('"Hello World!"'))
380e99be0e6SBram Moolenaar  call assert_equal('[1, 2]', RubyPrint('[1, 2]'))
381e99be0e6SBram Moolenaar  call assert_equal('{"k1"=>"v1", "k2"=>"v2"}', RubyPrint('({"k1" => "v1", "k2" => "v2"})'))
382e99be0e6SBram Moolenaar  call assert_equal('true', RubyPrint('true'))
383e99be0e6SBram Moolenaar  call assert_equal('false', RubyPrint('false'))
384e99be0e6SBram Moolenaar  call assert_equal('', RubyPrint('nil'))
385e99be0e6SBram Moolenaar  call assert_match('Vim', RubyPrint('Vim'))
386e99be0e6SBram Moolenaar  call assert_match('Module', RubyPrint('Vim.class'))
387e99be0e6SBram Moolenaar
388e99be0e6SBram Moolenaar  delfunc RubyPrint
389edd6aacbSBram Moolenaarendfunc
390edd6aacbSBram Moolenaar
3915feabe00SBram Moolenaarfunc Test_ruby_p()
392edd6aacbSBram Moolenaar  ruby p 'Just a test'
39388e6cc25SBram Moolenaar  let messages = GetMessages()
394edd6aacbSBram Moolenaar  call assert_equal('"Just a test"', messages[-1])
39551e9fbf1SBram Moolenaar
39651e9fbf1SBram Moolenaar  " Check return values of p method
39751e9fbf1SBram Moolenaar
398e99be0e6SBram Moolenaar  call assert_equal(123, rubyeval('p(123)'))
399e99be0e6SBram Moolenaar  call assert_equal([1, 2, 3], rubyeval('p(1, 2, 3)'))
40051e9fbf1SBram Moolenaar
40151e9fbf1SBram Moolenaar  " Avoid the "message maintainer" line.
40251e9fbf1SBram Moolenaar  let $LANG = ''
40351e9fbf1SBram Moolenaar  messages clear
404e99be0e6SBram Moolenaar  call assert_equal(v:true, rubyeval('p() == nil'))
40551e9fbf1SBram Moolenaar
40688e6cc25SBram Moolenaar  let messages = GetMessages()
40751e9fbf1SBram Moolenaar  call assert_equal(0, len(messages))
40853901442SBram Moolenaarendfunc
4096c2b7b80SBram Moolenaar
410*a190548eSBram Moolenaarfunc Test_rubyeval_error()
411*a190548eSBram Moolenaar  " On Linux or Windows the error matches:
412*a190548eSBram Moolenaar  "   "syntax error, unexpected end-of-input"
413*a190548eSBram Moolenaar  " whereas on macOS in CI, the error message makes less sense:
414*a190548eSBram Moolenaar  "   "SyntaxError: array length must be 2"
415*a190548eSBram Moolenaar  " Unclear why. The test does not check the error message.
416*a190548eSBram Moolenaar  call assert_fails('call rubyeval("(")')
417*a190548eSBram Moolenaarendfunc
418*a190548eSBram Moolenaar
4196c2b7b80SBram Moolenaar" Test for various heredoc syntax
4206c2b7b80SBram Moolenaarfunc Test_ruby_heredoc()
4216c2b7b80SBram Moolenaar  ruby << END
4226c2b7b80SBram MoolenaarVim.command('let s = "A"')
4236c2b7b80SBram MoolenaarEND
4246c2b7b80SBram Moolenaar  ruby <<
4256c2b7b80SBram MoolenaarVim.command('let s ..= "B"')
4266c2b7b80SBram Moolenaar.
4276c2b7b80SBram Moolenaar  ruby << trim END
4286c2b7b80SBram Moolenaar    Vim.command('let s ..= "C"')
4296c2b7b80SBram Moolenaar  END
4306c2b7b80SBram Moolenaar  ruby << trim
4316c2b7b80SBram Moolenaar    Vim.command('let s ..= "D"')
4326c2b7b80SBram Moolenaar  .
4336ab0953fSBram Moolenaar  ruby << trim eof
4346ab0953fSBram Moolenaar    Vim.command('let s ..= "E"')
4356ab0953fSBram Moolenaar  eof
4366ab0953fSBram Moolenaar  call assert_equal('ABCDE', s)
4376c2b7b80SBram Moolenaarendfunc
4386c2b7b80SBram Moolenaar
4396c2b7b80SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
440