blob: 321ec4032a908efa43a837b8defadcad75cd2561 [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()
14 " Check deleting lines does not trigger ml_get error.
15 new
16 call setline(1, ['one', 'two', 'three'])
17 rubydo Vim.command("%d_")
18 bwipe!
19
20 " Check switching to another buffer does not trigger ml_get error.
21 new
22 let wincount = winnr('$')
23 call setline(1, ['one', 'two', 'three'])
24 rubydo Vim.command("new")
25 call assert_equal(wincount + 1, winnr('$'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020026 %bwipe!
Bram Moolenaarc593fee2017-01-29 23:11:25 +010027endfunc
Bram Moolenaar37badc82018-01-31 20:15:30 +010028
Bram Moolenaara1905482020-06-20 16:00:25 +020029func Test_rubydo_dollar_underscore()
30 new
31 call setline(1, ['one', 'two', 'three', 'four'])
32 2,3rubydo $_ = '[' + $_ + ']'
33 call assert_equal(['one', '[two]', '[three]', 'four'], getline(1, '$'))
34 bwipe!
35
36 call assert_fails('rubydo $_ = 0', 'E265:')
37 call assert_fails('rubydo (')
38 bwipe!
39endfunc
40
Bram Moolenaar37badc82018-01-31 20:15:30 +010041func Test_rubyfile()
42 " Check :rubyfile does not SEGV with Ruby level exception but just fails
43 let tempfile = tempname() . '.rb'
44 call writefile(['raise "vim!"'], tempfile)
45 call assert_fails('rubyfile ' . tempfile)
46 call delete(tempfile)
47endfunc
Bram Moolenaar53901442018-07-25 22:02:36 +020048
Bram Moolenaar5feabe02020-01-30 18:24:53 +010049func Test_ruby_set_cursor()
Bram Moolenaar53901442018-07-25 22:02:36 +020050 " Check that setting the cursor position works.
51 new
52 call setline(1, ['first line', 'second line'])
53 normal gg
54 rubydo $curwin.cursor = [1, 5]
55 call assert_equal([1, 6], [line('.'), col('.')])
Bram Moolenaare99be0e2019-03-26 22:51:09 +010056 call assert_equal([1, 5], rubyeval('$curwin.cursor'))
Bram Moolenaar53901442018-07-25 22:02:36 +020057
58 " Check that movement after setting cursor position keeps current column.
59 normal j
60 call assert_equal([2, 6], [line('.'), col('.')])
Bram Moolenaar4a4981b2019-10-16 22:36:11 +020061 call assert_equal([2, 5], '$curwin.cursor'->rubyeval())
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020062
63 call assert_fails('ruby $curwin.cursor = [1]',
64 \ 'ArgumentError: array length must be 2')
65 bwipe!
66endfunc
67
68" Test buffer.count and buffer.length (number of lines in buffer)
Bram Moolenaar5feabe02020-01-30 18:24:53 +010069func Test_ruby_buffer_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020070 new
71 call setline(1, ['one', 'two', 'three'])
Bram Moolenaare99be0e2019-03-26 22:51:09 +010072 call assert_equal(3, rubyeval('$curbuf.count'))
73 call assert_equal(3, rubyeval('$curbuf.length'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020074 bwipe!
75endfunc
76
77" Test buffer.name (buffer name)
Bram Moolenaar5feabe02020-01-30 18:24:53 +010078func Test_ruby_buffer_name()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020079 new Xfoo
Bram Moolenaare99be0e2019-03-26 22:51:09 +010080 call assert_equal(expand('%:p'), rubyeval('$curbuf.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020081 bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +010082 call assert_equal(v:null, rubyeval('$curbuf.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020083endfunc
84
85" Test buffer.number (number of the buffer).
Bram Moolenaar5feabe02020-01-30 18:24:53 +010086func Test_ruby_buffer_number()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020087 new
Bram Moolenaare99be0e2019-03-26 22:51:09 +010088 call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020089 new
Bram Moolenaare99be0e2019-03-26 22:51:09 +010090 call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020091
92 %bwipe
93endfunc
94
95" Test buffer.delete({n}) (delete line {n})
Bram Moolenaar5feabe02020-01-30 18:24:53 +010096func Test_ruby_buffer_delete()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020097 new
98 call setline(1, ['one', 'two', 'three'])
99 ruby $curbuf.delete(2)
100 call assert_equal(['one', 'three'], getline(1, '$'))
101
102 call assert_fails('ruby $curbuf.delete(0)', 'IndexError: line number 0 out of range')
103 call assert_fails('ruby $curbuf.delete(3)', 'IndexError: line number 3 out of range')
104
105 bwipe!
106endfunc
107
108" Test buffer.append({str}, str) (append line {str} after line {n})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100109func Test_ruby_buffer_append()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200110 new
111 ruby $curbuf.append(0, 'one')
112 ruby $curbuf.append(1, 'three')
113 ruby $curbuf.append(1, 'two')
114 ruby $curbuf.append(4, 'four')
115
116 call assert_equal(['one', 'two', 'three', '', 'four'], getline(1, '$'))
117
118 call assert_fails('ruby $curbuf.append(-1, "x")',
119 \ 'IndexError: line number -1 out of range')
120 call assert_fails('ruby $curbuf.append(6, "x")',
121 \ 'IndexError: line number 6 out of range')
122
123 bwipe!
124endfunc
125
126" Test buffer.line (get or set the current line)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100127func Test_ruby_buffer_line()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200128 new
129 call setline(1, ['one', 'two', 'three'])
130 2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100131 call assert_equal('two', rubyeval('$curbuf.line'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200132
133 ruby $curbuf.line = 'TWO'
134 call assert_equal(['one', 'TWO', 'three'], getline(1, '$'))
135
136 bwipe!
137endfunc
138
139" Test buffer.line_number (get current line number)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100140func Test_ruby_buffer_line_number()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200141 new
142 call setline(1, ['one', 'two', 'three'])
143 2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100144 call assert_equal(2, rubyeval('$curbuf.line_number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200145
146 bwipe!
147endfunc
148
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100149func Test_ruby_buffer_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200150 new
151 call setline(1, ['one', 'two'])
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100152 call assert_equal('one', rubyeval('$curbuf[1]'))
153 call assert_equal('two', rubyeval('$curbuf[2]'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200154
155 call assert_fails('ruby $curbuf[0]',
156 \ 'IndexError: line number 0 out of range')
157 call assert_fails('ruby $curbuf[3]',
158 \ 'IndexError: line number 3 out of range')
159
160 bwipe!
161endfunc
162
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100163func Test_ruby_buffer_set()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200164 new
165 call setline(1, ['one', 'two'])
166 ruby $curbuf[2] = 'TWO'
167 ruby $curbuf[1] = 'ONE'
168
169 call assert_fails('ruby $curbuf[0] = "ZERO"',
170 \ 'IndexError: line number 0 out of range')
171 call assert_fails('ruby $curbuf[3] = "THREE"',
172 \ 'IndexError: line number 3 out of range')
173 bwipe!
174endfunc
175
176" Test window.width (get or set window height).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100177func Test_ruby_window_height()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200178 new
179
180 " Test setting window height
181 ruby $curwin.height = 2
182 call assert_equal(2, winheight(0))
183
184 " Test getting window height
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100185 call assert_equal(2, rubyeval('$curwin.height'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200186
187 bwipe
188endfunc
189
190" Test window.width (get or set window width).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100191func Test_ruby_window_width()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200192 vnew
193
194 " Test setting window width
195 ruby $curwin.width = 2
196 call assert_equal(2, winwidth(0))
197
198 " Test getting window width
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100199 call assert_equal(2, rubyeval('$curwin.width'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200200
201 bwipe
202endfunc
203
204" Test window.buffer (get buffer object of a window object).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100205func Test_ruby_window_buffer()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200206 new Xfoo1
207 new Xfoo2
208 ruby $b2 = $curwin.buffer
209 ruby $w2 = $curwin
210 wincmd j
211 ruby $b1 = $curwin.buffer
212 ruby $w1 = $curwin
213
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100214 call assert_equal(rubyeval('$b1'), rubyeval('$w1.buffer'))
215 call assert_equal(rubyeval('$b2'), rubyeval('$w2.buffer'))
216 call assert_equal(bufnr('Xfoo1'), rubyeval('$w1.buffer.number'))
217 call assert_equal(bufnr('Xfoo2'), rubyeval('$w2.buffer.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200218
219 ruby $b1, $w1, $b2, $w2 = nil
220 %bwipe
221endfunc
222
223" Test Vim::Window.current (get current window object)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100224func Test_ruby_Vim_window_current()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100225 let cw = rubyeval('$curwin')
226 call assert_equal(cw, rubyeval('Vim::Window.current'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200227 call assert_match('^#<Vim::Window:0x\x\+>$', cw)
228endfunc
229
230" Test Vim::Window.count (number of windows)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100231func Test_ruby_Vim_window_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200232 new Xfoo1
233 new Xfoo2
234 split
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100235 call assert_equal(4, rubyeval('Vim::Window.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200236 %bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100237 call assert_equal(1, rubyeval('Vim::Window.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200238endfunc
239
240" Test Vim::Window[n] (get window object of window n)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100241func Test_ruby_Vim_window_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200242 new Xfoo1
243 new Xfoo2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100244 call assert_match('Xfoo2$', rubyeval('Vim::Window[0].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200245 wincmd j
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100246 call assert_match('Xfoo1$', rubyeval('Vim::Window[1].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200247 wincmd j
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100248 call assert_equal(v:null, rubyeval('Vim::Window[2].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200249 %bwipe
250endfunc
251
252" Test Vim::Buffer.current (return the buffer object of current buffer)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100253func Test_ruby_Vim_buffer_current()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100254 let cb = rubyeval('$curbuf')
255 call assert_equal(cb, rubyeval('Vim::Buffer.current'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200256 call assert_match('^#<Vim::Buffer:0x\x\+>$', cb)
257endfunc
258
259" Test Vim::Buffer:.count (return the number of buffers)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100260func Test_ruby_Vim_buffer_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200261 new Xfoo1
262 new Xfoo2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100263 call assert_equal(3, rubyeval('Vim::Buffer.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200264 %bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100265 call assert_equal(1, rubyeval('Vim::Buffer.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200266endfunc
267
268" Test Vim::buffer[n] (return the buffer object of buffer number n)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100269func Test_ruby_Vim_buffer_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200270 new Xfoo1
271 new Xfoo2
272
273 " Index of Vim::Buffer[n] goes from 0 to the number of buffers.
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100274 call assert_equal(v:null, rubyeval('Vim::Buffer[0].name'))
275 call assert_match('Xfoo1$', rubyeval('Vim::Buffer[1].name'))
276 call assert_match('Xfoo2$', rubyeval('Vim::Buffer[2].name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200277 call assert_fails('ruby print Vim::Buffer[3].name',
278 \ "NoMethodError: undefined method `name' for nil:NilClass")
279 %bwipe
280endfunc
281
282" Test Vim::command({cmd}) (execute a Ex command))
283" Test Vim::command({cmd})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100284func Test_ruby_Vim_command()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200285 new
286 call setline(1, ['one', 'two', 'three', 'four'])
287 ruby Vim::command('2,3d')
288 call assert_equal(['one', 'four'], getline(1, '$'))
289 bwipe!
290endfunc
291
292" Test Vim::set_option (set a vim option)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100293func Test_ruby_Vim_set_option()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200294 call assert_equal(0, &number)
295 ruby Vim::set_option('number')
296 call assert_equal(1, &number)
297 ruby Vim::set_option('nonumber')
298 call assert_equal(0, &number)
299endfunc
300
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100301func Test_ruby_Vim_evaluate()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100302 call assert_equal(123, rubyeval('Vim::evaluate("123")'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200303 " Vim::evaluate("123").class gives Integer or Fixnum depending
304 " on versions of Ruby.
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100305 call assert_match('^Integer\|Fixnum$', rubyeval('Vim::evaluate("123").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200306
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100307 if has('float')
308 call assert_equal(1.23, rubyeval('Vim::evaluate("1.23")'))
309 call assert_equal('Float', rubyeval('Vim::evaluate("1.23").class'))
310 endif
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200311
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100312 call assert_equal('foo', rubyeval('Vim::evaluate("\"foo\"")'))
313 call assert_equal('String', rubyeval('Vim::evaluate("\"foo\"").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200314
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100315 call assert_equal(["\x01\xAB"], rubyeval('Vim::evaluate("0z01ab").unpack("M")'))
316 call assert_equal('String', rubyeval('Vim::evaluate("0z01ab").class'))
Bram Moolenaar0d13cce2019-02-23 14:23:03 +0100317
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100318 call assert_equal([1, 2], rubyeval('Vim::evaluate("[1, 2]")'))
319 call assert_equal('Array', rubyeval('Vim::evaluate("[1, 2]").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200320
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100321 call assert_equal({'1': 2}, rubyeval('Vim::evaluate("{1:2}")'))
322 call assert_equal('Hash', rubyeval('Vim::evaluate("{1:2}").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200323
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100324 call assert_equal(v:null, rubyeval('Vim::evaluate("v:null")'))
325 call assert_equal('NilClass', rubyeval('Vim::evaluate("v:null").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200326
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100327 call assert_equal(v:null, rubyeval('Vim::evaluate("v:none")'))
328 call assert_equal('NilClass', rubyeval('Vim::evaluate("v:none").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200329
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100330 call assert_equal(v:true, rubyeval('Vim::evaluate("v:true")'))
331 call assert_equal('TrueClass', rubyeval('Vim::evaluate("v:true").class'))
332 call assert_equal(v:false, rubyeval('Vim::evaluate("v:false")'))
333 call assert_equal('FalseClass',rubyeval('Vim::evaluate("v:false").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200334endfunc
335
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100336func Test_ruby_Vim_blob()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100337 call assert_equal('0z', rubyeval('Vim::blob("")'))
338 call assert_equal('0z31326162', rubyeval('Vim::blob("12ab")'))
339 call assert_equal('0z00010203', rubyeval('Vim::blob("\x00\x01\x02\x03")'))
340 call assert_equal('0z8081FEFF', rubyeval('Vim::blob("\x80\x81\xfe\xff")'))
Bram Moolenaar0d13cce2019-02-23 14:23:03 +0100341endfunc
342
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100343func Test_ruby_Vim_evaluate_list()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200344 call setline(line('$'), ['2 line 2'])
345 ruby Vim.command("normal /^2\n")
346 let l = ["abc", "def"]
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200347 ruby << trim EOF
348 curline = $curbuf.line_number
349 l = Vim.evaluate("l");
350 $curbuf.append(curline, l.join("\n"))
351 EOF
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200352 normal j
353 .rubydo $_ = $_.gsub(/\n/, '/')
354 call assert_equal('abc/def', getline('$'))
355endfunc
356
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100357func Test_ruby_Vim_evaluate_dict()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200358 let d = {'a': 'foo', 'b': 123}
359 redir => l:out
360 ruby d = Vim.evaluate("d"); print d
361 redir END
362 call assert_equal(['{"a"=>"foo", "b"=>123}'], split(l:out, "\n"))
363endfunc
364
365" Test Vim::message({msg}) (display message {msg})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100366func Test_ruby_Vim_message()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200367 ruby Vim::message('A message')
368 let messages = split(execute('message'), "\n")
369 call assert_equal('A message', messages[-1])
370endfunc
371
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100372func Test_ruby_print()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100373 func RubyPrint(expr)
374 return trim(execute('ruby print ' . a:expr))
375 endfunc
376
377 call assert_equal('123', RubyPrint('123'))
378 call assert_equal('1.23', RubyPrint('1.23'))
379 call assert_equal('Hello World!', RubyPrint('"Hello World!"'))
380 call assert_equal('[1, 2]', RubyPrint('[1, 2]'))
381 call assert_equal('{"k1"=>"v1", "k2"=>"v2"}', RubyPrint('({"k1" => "v1", "k2" => "v2"})'))
382 call assert_equal('true', RubyPrint('true'))
383 call assert_equal('false', RubyPrint('false'))
384 call assert_equal('', RubyPrint('nil'))
385 call assert_match('Vim', RubyPrint('Vim'))
386 call assert_match('Module', RubyPrint('Vim.class'))
387
388 delfunc RubyPrint
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200389endfunc
390
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100391func Test_ruby_p()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200392 ruby p 'Just a test'
Bram Moolenaar88e6cc22020-04-30 19:19:29 +0200393 let messages = GetMessages()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200394 call assert_equal('"Just a test"', messages[-1])
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200395
396 " Check return values of p method
397
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100398 call assert_equal(123, rubyeval('p(123)'))
399 call assert_equal([1, 2, 3], rubyeval('p(1, 2, 3)'))
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200400
401 " Avoid the "message maintainer" line.
402 let $LANG = ''
403 messages clear
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100404 call assert_equal(v:true, rubyeval('p() == nil'))
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200405
Bram Moolenaar88e6cc22020-04-30 19:19:29 +0200406 let messages = GetMessages()
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200407 call assert_equal(0, len(messages))
Bram Moolenaar53901442018-07-25 22:02:36 +0200408endfunc
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200409
Bram Moolenaara1905482020-06-20 16:00:25 +0200410func Test_rubyeval_error()
411 " On Linux or Windows the error matches:
412 " "syntax error, unexpected end-of-input"
413 " whereas on macOS in CI, the error message makes less sense:
414 " "SyntaxError: array length must be 2"
415 " Unclear why. The test does not check the error message.
416 call assert_fails('call rubyeval("(")')
417endfunc
418
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200419" Test for various heredoc syntax
420func Test_ruby_heredoc()
421 ruby << END
422Vim.command('let s = "A"')
423END
424 ruby <<
425Vim.command('let s ..= "B"')
426.
427 ruby << trim END
428 Vim.command('let s ..= "C"')
429 END
430 ruby << trim
431 Vim.command('let s ..= "D"')
432 .
Bram Moolenaar6ab09532020-05-01 14:10:13 +0200433 ruby << trim eof
434 Vim.command('let s ..= "E"')
435 eof
436 call assert_equal('ABCDE', s)
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200437endfunc
438
439" vim: shiftwidth=2 sts=2 expandtab