blob: f1551685ca6fe6e2c1d16bc8e3c5acbbaf113683 [file] [log] [blame]
Bram Moolenaar85babd62016-06-21 22:59:28 +02001" Tests for ruby interface
2
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02003source check.vim
4CheckFeature ruby
Bram Moolenaar85babd62016-06-21 22:59:28 +02005
6func Test_ruby_change_buffer()
7 call setline(line('$'), ['1 line 1'])
8 ruby Vim.command("normal /^1\n")
9 ruby $curbuf.line = "1 changed line 1"
10 call assert_equal('1 changed line 1', getline('$'))
11endfunc
12
Bram Moolenaarc593fee2017-01-29 23:11:25 +010013func Test_rubydo()
Bram Moolenaarc593fee2017-01-29 23:11:25 +010014 new
zeertzjqe99f0682024-01-29 19:32:39 +010015
16 " Check deleting lines does not trigger ml_get error.
Bram Moolenaarc593fee2017-01-29 23:11:25 +010017 call setline(1, ['one', 'two', 'three'])
18 rubydo Vim.command("%d_")
zeertzjqe99f0682024-01-29 19:32:39 +010019 call assert_equal(['one'], getline(1, '$'))
20
21 call setline(1, ['one', 'two', 'three'])
22 rubydo Vim.command("1,2d_")
23 call assert_equal(['one'], getline(1, '$'))
24
25 call setline(1, ['one', 'two', 'three'])
26 rubydo Vim.command("2,3d_"); $_ = "REPLACED"
27 call assert_equal(['REPLACED'], getline(1, '$'))
28
29 call setline(1, ['one', 'two', 'three'])
30 2,3rubydo Vim.command("1,2d_"); $_ = "REPLACED"
31 call assert_equal(['three'], getline(1, '$'))
32
Bram Moolenaarc593fee2017-01-29 23:11:25 +010033 bwipe!
34
35 " Check switching to another buffer does not trigger ml_get error.
36 new
37 let wincount = winnr('$')
38 call setline(1, ['one', 'two', 'three'])
39 rubydo Vim.command("new")
40 call assert_equal(wincount + 1, winnr('$'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020041 %bwipe!
Bram Moolenaarc593fee2017-01-29 23:11:25 +010042endfunc
Bram Moolenaar37badc82018-01-31 20:15:30 +010043
Bram Moolenaara1905482020-06-20 16:00:25 +020044func Test_rubydo_dollar_underscore()
45 new
46 call setline(1, ['one', 'two', 'three', 'four'])
47 2,3rubydo $_ = '[' + $_ + ']'
48 call assert_equal(['one', '[two]', '[three]', 'four'], getline(1, '$'))
49 bwipe!
50
51 call assert_fails('rubydo $_ = 0', 'E265:')
52 call assert_fails('rubydo (')
53 bwipe!
54endfunc
55
Bram Moolenaar37badc82018-01-31 20:15:30 +010056func Test_rubyfile()
57 " Check :rubyfile does not SEGV with Ruby level exception but just fails
58 let tempfile = tempname() . '.rb'
59 call writefile(['raise "vim!"'], tempfile)
60 call assert_fails('rubyfile ' . tempfile)
61 call delete(tempfile)
62endfunc
Bram Moolenaar53901442018-07-25 22:02:36 +020063
Bram Moolenaar5feabe02020-01-30 18:24:53 +010064func Test_ruby_set_cursor()
Bram Moolenaar53901442018-07-25 22:02:36 +020065 " Check that setting the cursor position works.
66 new
67 call setline(1, ['first line', 'second line'])
68 normal gg
69 rubydo $curwin.cursor = [1, 5]
70 call assert_equal([1, 6], [line('.'), col('.')])
Bram Moolenaare99be0e2019-03-26 22:51:09 +010071 call assert_equal([1, 5], rubyeval('$curwin.cursor'))
Bram Moolenaar53901442018-07-25 22:02:36 +020072
73 " Check that movement after setting cursor position keeps current column.
74 normal j
75 call assert_equal([2, 6], [line('.'), col('.')])
Bram Moolenaar4a4981b2019-10-16 22:36:11 +020076 call assert_equal([2, 5], '$curwin.cursor'->rubyeval())
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020077
78 call assert_fails('ruby $curwin.cursor = [1]',
79 \ 'ArgumentError: array length must be 2')
80 bwipe!
81endfunc
82
83" Test buffer.count and buffer.length (number of lines in buffer)
Bram Moolenaar5feabe02020-01-30 18:24:53 +010084func Test_ruby_buffer_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020085 new
86 call setline(1, ['one', 'two', 'three'])
Bram Moolenaare99be0e2019-03-26 22:51:09 +010087 call assert_equal(3, rubyeval('$curbuf.count'))
88 call assert_equal(3, rubyeval('$curbuf.length'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020089 bwipe!
90endfunc
91
92" Test buffer.name (buffer name)
Bram Moolenaar5feabe02020-01-30 18:24:53 +010093func Test_ruby_buffer_name()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020094 new Xfoo
Bram Moolenaare99be0e2019-03-26 22:51:09 +010095 call assert_equal(expand('%:p'), rubyeval('$curbuf.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020096 bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +010097 call assert_equal(v:null, rubyeval('$curbuf.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020098endfunc
99
100" Test buffer.number (number of the buffer).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100101func Test_ruby_buffer_number()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200102 new
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100103 call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200104 new
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100105 call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200106
107 %bwipe
108endfunc
109
110" Test buffer.delete({n}) (delete line {n})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100111func Test_ruby_buffer_delete()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200112 new
113 call setline(1, ['one', 'two', 'three'])
114 ruby $curbuf.delete(2)
115 call assert_equal(['one', 'three'], getline(1, '$'))
116
117 call assert_fails('ruby $curbuf.delete(0)', 'IndexError: line number 0 out of range')
118 call assert_fails('ruby $curbuf.delete(3)', 'IndexError: line number 3 out of range')
119
120 bwipe!
121endfunc
122
123" Test buffer.append({str}, str) (append line {str} after line {n})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100124func Test_ruby_buffer_append()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200125 new
126 ruby $curbuf.append(0, 'one')
127 ruby $curbuf.append(1, 'three')
128 ruby $curbuf.append(1, 'two')
129 ruby $curbuf.append(4, 'four')
130
131 call assert_equal(['one', 'two', 'three', '', 'four'], getline(1, '$'))
132
133 call assert_fails('ruby $curbuf.append(-1, "x")',
134 \ 'IndexError: line number -1 out of range')
135 call assert_fails('ruby $curbuf.append(6, "x")',
136 \ 'IndexError: line number 6 out of range')
137
138 bwipe!
139endfunc
140
141" Test buffer.line (get or set the current line)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100142func Test_ruby_buffer_line()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200143 new
144 call setline(1, ['one', 'two', 'three'])
145 2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100146 call assert_equal('two', rubyeval('$curbuf.line'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200147
148 ruby $curbuf.line = 'TWO'
149 call assert_equal(['one', 'TWO', 'three'], getline(1, '$'))
150
151 bwipe!
152endfunc
153
154" Test buffer.line_number (get current line number)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100155func Test_ruby_buffer_line_number()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200156 new
157 call setline(1, ['one', 'two', 'three'])
158 2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100159 call assert_equal(2, rubyeval('$curbuf.line_number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200160
161 bwipe!
162endfunc
163
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100164func Test_ruby_buffer_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200165 new
166 call setline(1, ['one', 'two'])
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100167 call assert_equal('one', rubyeval('$curbuf[1]'))
168 call assert_equal('two', rubyeval('$curbuf[2]'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200169
170 call assert_fails('ruby $curbuf[0]',
171 \ 'IndexError: line number 0 out of range')
172 call assert_fails('ruby $curbuf[3]',
173 \ 'IndexError: line number 3 out of range')
174
175 bwipe!
176endfunc
177
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100178func Test_ruby_buffer_set()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200179 new
180 call setline(1, ['one', 'two'])
181 ruby $curbuf[2] = 'TWO'
182 ruby $curbuf[1] = 'ONE'
183
184 call assert_fails('ruby $curbuf[0] = "ZERO"',
185 \ 'IndexError: line number 0 out of range')
186 call assert_fails('ruby $curbuf[3] = "THREE"',
187 \ 'IndexError: line number 3 out of range')
188 bwipe!
189endfunc
190
191" Test window.width (get or set window height).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100192func Test_ruby_window_height()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200193 new
194
195 " Test setting window height
196 ruby $curwin.height = 2
197 call assert_equal(2, winheight(0))
198
199 " Test getting window height
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100200 call assert_equal(2, rubyeval('$curwin.height'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200201
202 bwipe
203endfunc
204
205" Test window.width (get or set window width).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100206func Test_ruby_window_width()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200207 vnew
208
209 " Test setting window width
210 ruby $curwin.width = 2
211 call assert_equal(2, winwidth(0))
212
213 " Test getting window width
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100214 call assert_equal(2, rubyeval('$curwin.width'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200215
216 bwipe
217endfunc
218
219" Test window.buffer (get buffer object of a window object).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100220func Test_ruby_window_buffer()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200221 new Xfoo1
222 new Xfoo2
223 ruby $b2 = $curwin.buffer
224 ruby $w2 = $curwin
225 wincmd j
226 ruby $b1 = $curwin.buffer
227 ruby $w1 = $curwin
228
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100229 call assert_equal(rubyeval('$b1'), rubyeval('$w1.buffer'))
230 call assert_equal(rubyeval('$b2'), rubyeval('$w2.buffer'))
231 call assert_equal(bufnr('Xfoo1'), rubyeval('$w1.buffer.number'))
232 call assert_equal(bufnr('Xfoo2'), rubyeval('$w2.buffer.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200233
234 ruby $b1, $w1, $b2, $w2 = nil
235 %bwipe
236endfunc
237
238" Test Vim::Window.current (get current window object)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100239func Test_ruby_Vim_window_current()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100240 let cw = rubyeval('$curwin')
241 call assert_equal(cw, rubyeval('Vim::Window.current'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200242 call assert_match('^#<Vim::Window:0x\x\+>$', cw)
243endfunc
244
245" Test Vim::Window.count (number of windows)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100246func Test_ruby_Vim_window_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200247 new Xfoo1
248 new Xfoo2
249 split
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100250 call assert_equal(4, rubyeval('Vim::Window.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200251 %bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100252 call assert_equal(1, rubyeval('Vim::Window.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200253endfunc
254
255" Test Vim::Window[n] (get window object of window n)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100256func Test_ruby_Vim_window_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200257 new Xfoo1
258 new Xfoo2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100259 call assert_match('Xfoo2$', rubyeval('Vim::Window[0].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200260 wincmd j
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100261 call assert_match('Xfoo1$', rubyeval('Vim::Window[1].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200262 wincmd j
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100263 call assert_equal(v:null, rubyeval('Vim::Window[2].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200264 %bwipe
265endfunc
266
267" Test Vim::Buffer.current (return the buffer object of current buffer)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100268func Test_ruby_Vim_buffer_current()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100269 let cb = rubyeval('$curbuf')
270 call assert_equal(cb, rubyeval('Vim::Buffer.current'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200271 call assert_match('^#<Vim::Buffer:0x\x\+>$', cb)
272endfunc
273
274" Test Vim::Buffer:.count (return the number of buffers)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100275func Test_ruby_Vim_buffer_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200276 new Xfoo1
277 new Xfoo2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100278 call assert_equal(3, rubyeval('Vim::Buffer.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200279 %bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100280 call assert_equal(1, rubyeval('Vim::Buffer.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200281endfunc
282
283" Test Vim::buffer[n] (return the buffer object of buffer number n)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100284func Test_ruby_Vim_buffer_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200285 new Xfoo1
286 new Xfoo2
287
288 " Index of Vim::Buffer[n] goes from 0 to the number of buffers.
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100289 call assert_equal(v:null, rubyeval('Vim::Buffer[0].name'))
290 call assert_match('Xfoo1$', rubyeval('Vim::Buffer[1].name'))
291 call assert_match('Xfoo2$', rubyeval('Vim::Buffer[2].name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200292 call assert_fails('ruby print Vim::Buffer[3].name',
Isao Sato443657b2024-01-03 19:31:05 +0100293 \ "NoMethodError: undefined method `name' for nil")
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200294 %bwipe
295endfunc
296
297" Test Vim::command({cmd}) (execute a Ex command))
298" Test Vim::command({cmd})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100299func Test_ruby_Vim_command()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200300 new
301 call setline(1, ['one', 'two', 'three', 'four'])
302 ruby Vim::command('2,3d')
303 call assert_equal(['one', 'four'], getline(1, '$'))
304 bwipe!
305endfunc
306
307" Test Vim::set_option (set a vim option)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100308func Test_ruby_Vim_set_option()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200309 call assert_equal(0, &number)
310 ruby Vim::set_option('number')
311 call assert_equal(1, &number)
312 ruby Vim::set_option('nonumber')
313 call assert_equal(0, &number)
314endfunc
315
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100316func Test_ruby_Vim_evaluate()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100317 call assert_equal(123, rubyeval('Vim::evaluate("123")'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200318 " Vim::evaluate("123").class gives Integer or Fixnum depending
319 " on versions of Ruby.
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100320 call assert_match('^Integer\|Fixnum$', rubyeval('Vim::evaluate("123").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200321
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100322 call assert_equal(1.23, rubyeval('Vim::evaluate("1.23")'))
323 call assert_equal('Float', rubyeval('Vim::evaluate("1.23").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200324
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100325 call assert_equal('foo', rubyeval('Vim::evaluate("\"foo\"")'))
326 call assert_equal('String', rubyeval('Vim::evaluate("\"foo\"").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200327
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100328 call assert_equal(["\x01\xAB"], rubyeval('Vim::evaluate("0z01ab").unpack("M")'))
329 call assert_equal('String', rubyeval('Vim::evaluate("0z01ab").class'))
Bram Moolenaar0d13cce2019-02-23 14:23:03 +0100330
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100331 call assert_equal([1, 2], rubyeval('Vim::evaluate("[1, 2]")'))
332 call assert_equal('Array', rubyeval('Vim::evaluate("[1, 2]").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200333
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100334 call assert_equal({'1': 2}, rubyeval('Vim::evaluate("{1:2}")'))
335 call assert_equal('Hash', rubyeval('Vim::evaluate("{1:2}").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200336
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100337 call assert_equal(v:null, rubyeval('Vim::evaluate("v:null")'))
338 call assert_equal('NilClass', rubyeval('Vim::evaluate("v:null").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200339
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100340 call assert_equal(v:null, rubyeval('Vim::evaluate("v:none")'))
341 call assert_equal('NilClass', rubyeval('Vim::evaluate("v:none").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200342
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100343 call assert_equal(v:true, rubyeval('Vim::evaluate("v:true")'))
344 call assert_equal('TrueClass', rubyeval('Vim::evaluate("v:true").class'))
345 call assert_equal(v:false, rubyeval('Vim::evaluate("v:false")'))
346 call assert_equal('FalseClass',rubyeval('Vim::evaluate("v:false").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200347endfunc
348
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100349func Test_ruby_Vim_blob()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100350 call assert_equal('0z', rubyeval('Vim::blob("")'))
351 call assert_equal('0z31326162', rubyeval('Vim::blob("12ab")'))
352 call assert_equal('0z00010203', rubyeval('Vim::blob("\x00\x01\x02\x03")'))
353 call assert_equal('0z8081FEFF', rubyeval('Vim::blob("\x80\x81\xfe\xff")'))
Bram Moolenaar0d13cce2019-02-23 14:23:03 +0100354endfunc
355
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100356func Test_ruby_Vim_evaluate_list()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200357 call setline(line('$'), ['2 line 2'])
358 ruby Vim.command("normal /^2\n")
359 let l = ["abc", "def"]
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200360 ruby << trim EOF
361 curline = $curbuf.line_number
362 l = Vim.evaluate("l");
363 $curbuf.append(curline, l.join("\n"))
364 EOF
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200365 normal j
366 .rubydo $_ = $_.gsub(/\n/, '/')
367 call assert_equal('abc/def', getline('$'))
368endfunc
369
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100370func Test_ruby_Vim_evaluate_dict()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200371 let d = {'a': 'foo', 'b': 123}
372 redir => l:out
373 ruby d = Vim.evaluate("d"); print d
374 redir END
375 call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
376endfunc
377
378" Test Vim::message({msg}) (display message {msg})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100379func Test_ruby_Vim_message()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200380 ruby Vim::message('A message')
381 let messages = split(execute('message'), "\n")
382 call assert_equal('A message', messages[-1])
383endfunc
384
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100385func Test_ruby_print()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100386 func RubyPrint(expr)
387 return trim(execute('ruby print ' . a:expr))
388 endfunc
389
390 call assert_equal('123', RubyPrint('123'))
391 call assert_equal('1.23', RubyPrint('1.23'))
392 call assert_equal('Hello World!', RubyPrint('"Hello World!"'))
393 call assert_equal('[1, 2]', RubyPrint('[1, 2]'))
394 call assert_equal('{"k1"=>"v1", "k2"=>"v2"}', RubyPrint('({"k1" => "v1", "k2" => "v2"})'))
395 call assert_equal('true', RubyPrint('true'))
396 call assert_equal('false', RubyPrint('false'))
397 call assert_equal('', RubyPrint('nil'))
398 call assert_match('Vim', RubyPrint('Vim'))
399 call assert_match('Module', RubyPrint('Vim.class'))
400
401 delfunc RubyPrint
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200402endfunc
403
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100404func Test_ruby_p()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200405 ruby p 'Just a test'
Bram Moolenaar88e6cc22020-04-30 19:19:29 +0200406 let messages = GetMessages()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200407 call assert_equal('"Just a test"', messages[-1])
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200408
409 " Check return values of p method
410
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100411 call assert_equal(123, rubyeval('p(123)'))
412 call assert_equal([1, 2, 3], rubyeval('p(1, 2, 3)'))
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200413
414 " Avoid the "message maintainer" line.
415 let $LANG = ''
416 messages clear
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100417 call assert_equal(v:true, rubyeval('p() == nil'))
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200418
Bram Moolenaar88e6cc22020-04-30 19:19:29 +0200419 let messages = GetMessages()
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200420 call assert_equal(0, len(messages))
Bram Moolenaar53901442018-07-25 22:02:36 +0200421endfunc
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200422
Bram Moolenaara1905482020-06-20 16:00:25 +0200423func Test_rubyeval_error()
424 " On Linux or Windows the error matches:
425 " "syntax error, unexpected end-of-input"
426 " whereas on macOS in CI, the error message makes less sense:
427 " "SyntaxError: array length must be 2"
428 " Unclear why. The test does not check the error message.
429 call assert_fails('call rubyeval("(")')
430endfunc
431
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200432" Test for various heredoc syntax
433func Test_ruby_heredoc()
434 ruby << END
435Vim.command('let s = "A"')
436END
437 ruby <<
438Vim.command('let s ..= "B"')
439.
440 ruby << trim END
441 Vim.command('let s ..= "C"')
442 END
443 ruby << trim
444 Vim.command('let s ..= "D"')
445 .
Bram Moolenaar6ab09532020-05-01 14:10:13 +0200446 ruby << trim eof
447 Vim.command('let s ..= "E"')
448 eof
449 call assert_equal('ABCDE', s)
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200450endfunc
451
452" vim: shiftwidth=2 sts=2 expandtab