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