blob: e5af66500aacd0046bbe2f968c3e12734715fd4c [file] [log] [blame]
Bram Moolenaar85babd62016-06-21 22:59:28 +02001" Tests for ruby interface
2
Bram Moolenaarb46fecd2019-06-15 17:58:09 +02003CheckFeature ruby
Bram Moolenaar85babd62016-06-21 22:59:28 +02004
5func Test_ruby_change_buffer()
6 call setline(line('$'), ['1 line 1'])
7 ruby Vim.command("normal /^1\n")
8 ruby $curbuf.line = "1 changed line 1"
9 call assert_equal('1 changed line 1', getline('$'))
10endfunc
11
Bram Moolenaarc593fee2017-01-29 23:11:25 +010012func Test_rubydo()
Bram Moolenaarc593fee2017-01-29 23:11:25 +010013 new
zeertzjqe99f0682024-01-29 19:32:39 +010014
15 " Check deleting lines does not trigger ml_get error.
Bram Moolenaarc593fee2017-01-29 23:11:25 +010016 call setline(1, ['one', 'two', 'three'])
17 rubydo Vim.command("%d_")
zeertzjqe99f0682024-01-29 19:32:39 +010018 call assert_equal(['one'], getline(1, '$'))
19
20 call setline(1, ['one', 'two', 'three'])
21 rubydo Vim.command("1,2d_")
22 call assert_equal(['one'], getline(1, '$'))
23
24 call setline(1, ['one', 'two', 'three'])
25 rubydo Vim.command("2,3d_"); $_ = "REPLACED"
26 call assert_equal(['REPLACED'], getline(1, '$'))
27
28 call setline(1, ['one', 'two', 'three'])
29 2,3rubydo Vim.command("1,2d_"); $_ = "REPLACED"
30 call assert_equal(['three'], getline(1, '$'))
31
Bram Moolenaarc593fee2017-01-29 23:11:25 +010032 bwipe!
33
34 " Check switching to another buffer does not trigger ml_get error.
35 new
36 let wincount = winnr('$')
37 call setline(1, ['one', 'two', 'three'])
38 rubydo Vim.command("new")
39 call assert_equal(wincount + 1, winnr('$'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020040 %bwipe!
Bram Moolenaarc593fee2017-01-29 23:11:25 +010041endfunc
Bram Moolenaar37badc82018-01-31 20:15:30 +010042
Bram Moolenaara1905482020-06-20 16:00:25 +020043func Test_rubydo_dollar_underscore()
44 new
45 call setline(1, ['one', 'two', 'three', 'four'])
46 2,3rubydo $_ = '[' + $_ + ']'
47 call assert_equal(['one', '[two]', '[three]', 'four'], getline(1, '$'))
48 bwipe!
49
50 call assert_fails('rubydo $_ = 0', 'E265:')
51 call assert_fails('rubydo (')
52 bwipe!
53endfunc
54
Bram Moolenaar37badc82018-01-31 20:15:30 +010055func Test_rubyfile()
56 " Check :rubyfile does not SEGV with Ruby level exception but just fails
57 let tempfile = tempname() . '.rb'
58 call writefile(['raise "vim!"'], tempfile)
59 call assert_fails('rubyfile ' . tempfile)
60 call delete(tempfile)
61endfunc
Bram Moolenaar53901442018-07-25 22:02:36 +020062
Bram Moolenaar5feabe02020-01-30 18:24:53 +010063func Test_ruby_set_cursor()
Bram Moolenaar53901442018-07-25 22:02:36 +020064 " Check that setting the cursor position works.
65 new
66 call setline(1, ['first line', 'second line'])
67 normal gg
68 rubydo $curwin.cursor = [1, 5]
69 call assert_equal([1, 6], [line('.'), col('.')])
Bram Moolenaare99be0e2019-03-26 22:51:09 +010070 call assert_equal([1, 5], rubyeval('$curwin.cursor'))
Bram Moolenaar53901442018-07-25 22:02:36 +020071
72 " Check that movement after setting cursor position keeps current column.
73 normal j
74 call assert_equal([2, 6], [line('.'), col('.')])
Bram Moolenaar4a4981b2019-10-16 22:36:11 +020075 call assert_equal([2, 5], '$curwin.cursor'->rubyeval())
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020076
77 call assert_fails('ruby $curwin.cursor = [1]',
78 \ 'ArgumentError: array length must be 2')
79 bwipe!
80endfunc
81
82" Test buffer.count and buffer.length (number of lines in buffer)
Bram Moolenaar5feabe02020-01-30 18:24:53 +010083func Test_ruby_buffer_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020084 new
85 call setline(1, ['one', 'two', 'three'])
Bram Moolenaare99be0e2019-03-26 22:51:09 +010086 call assert_equal(3, rubyeval('$curbuf.count'))
87 call assert_equal(3, rubyeval('$curbuf.length'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020088 bwipe!
89endfunc
90
91" Test buffer.name (buffer name)
Bram Moolenaar5feabe02020-01-30 18:24:53 +010092func Test_ruby_buffer_name()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020093 new Xfoo
Bram Moolenaare99be0e2019-03-26 22:51:09 +010094 call assert_equal(expand('%:p'), rubyeval('$curbuf.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020095 bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +010096 call assert_equal(v:null, rubyeval('$curbuf.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +020097endfunc
98
99" Test buffer.number (number of the buffer).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100100func Test_ruby_buffer_number()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200101 new
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100102 call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200103 new
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100104 call assert_equal(bufnr('%'), rubyeval('$curbuf.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200105
106 %bwipe
107endfunc
108
109" Test buffer.delete({n}) (delete line {n})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100110func Test_ruby_buffer_delete()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200111 new
112 call setline(1, ['one', 'two', 'three'])
113 ruby $curbuf.delete(2)
114 call assert_equal(['one', 'three'], getline(1, '$'))
115
116 call assert_fails('ruby $curbuf.delete(0)', 'IndexError: line number 0 out of range')
117 call assert_fails('ruby $curbuf.delete(3)', 'IndexError: line number 3 out of range')
118
119 bwipe!
120endfunc
121
122" Test buffer.append({str}, str) (append line {str} after line {n})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100123func Test_ruby_buffer_append()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200124 new
125 ruby $curbuf.append(0, 'one')
126 ruby $curbuf.append(1, 'three')
127 ruby $curbuf.append(1, 'two')
128 ruby $curbuf.append(4, 'four')
129
130 call assert_equal(['one', 'two', 'three', '', 'four'], getline(1, '$'))
131
132 call assert_fails('ruby $curbuf.append(-1, "x")',
133 \ 'IndexError: line number -1 out of range')
134 call assert_fails('ruby $curbuf.append(6, "x")',
135 \ 'IndexError: line number 6 out of range')
136
137 bwipe!
138endfunc
139
140" Test buffer.line (get or set the current line)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100141func Test_ruby_buffer_line()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200142 new
143 call setline(1, ['one', 'two', 'three'])
144 2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100145 call assert_equal('two', rubyeval('$curbuf.line'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200146
147 ruby $curbuf.line = 'TWO'
148 call assert_equal(['one', 'TWO', 'three'], getline(1, '$'))
149
150 bwipe!
151endfunc
152
153" Test buffer.line_number (get current line number)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100154func Test_ruby_buffer_line_number()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200155 new
156 call setline(1, ['one', 'two', 'three'])
157 2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100158 call assert_equal(2, rubyeval('$curbuf.line_number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200159
160 bwipe!
161endfunc
162
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100163func Test_ruby_buffer_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200164 new
165 call setline(1, ['one', 'two'])
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100166 call assert_equal('one', rubyeval('$curbuf[1]'))
167 call assert_equal('two', rubyeval('$curbuf[2]'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200168
169 call assert_fails('ruby $curbuf[0]',
170 \ 'IndexError: line number 0 out of range')
171 call assert_fails('ruby $curbuf[3]',
172 \ 'IndexError: line number 3 out of range')
173
174 bwipe!
175endfunc
176
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100177func Test_ruby_buffer_set()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200178 new
179 call setline(1, ['one', 'two'])
180 ruby $curbuf[2] = 'TWO'
181 ruby $curbuf[1] = 'ONE'
182
183 call assert_fails('ruby $curbuf[0] = "ZERO"',
184 \ 'IndexError: line number 0 out of range')
185 call assert_fails('ruby $curbuf[3] = "THREE"',
186 \ 'IndexError: line number 3 out of range')
187 bwipe!
188endfunc
189
190" Test window.width (get or set window height).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100191func Test_ruby_window_height()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200192 new
193
194 " Test setting window height
195 ruby $curwin.height = 2
196 call assert_equal(2, winheight(0))
197
198 " Test getting window height
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100199 call assert_equal(2, rubyeval('$curwin.height'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200200
201 bwipe
202endfunc
203
204" Test window.width (get or set window width).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100205func Test_ruby_window_width()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200206 vnew
207
208 " Test setting window width
209 ruby $curwin.width = 2
210 call assert_equal(2, winwidth(0))
211
212 " Test getting window width
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100213 call assert_equal(2, rubyeval('$curwin.width'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200214
215 bwipe
216endfunc
217
218" Test window.buffer (get buffer object of a window object).
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100219func Test_ruby_window_buffer()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200220 new Xfoo1
221 new Xfoo2
222 ruby $b2 = $curwin.buffer
223 ruby $w2 = $curwin
224 wincmd j
225 ruby $b1 = $curwin.buffer
226 ruby $w1 = $curwin
227
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100228 call assert_equal(rubyeval('$b1'), rubyeval('$w1.buffer'))
229 call assert_equal(rubyeval('$b2'), rubyeval('$w2.buffer'))
230 call assert_equal(bufnr('Xfoo1'), rubyeval('$w1.buffer.number'))
231 call assert_equal(bufnr('Xfoo2'), rubyeval('$w2.buffer.number'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200232
233 ruby $b1, $w1, $b2, $w2 = nil
234 %bwipe
235endfunc
236
237" Test Vim::Window.current (get current window object)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100238func Test_ruby_Vim_window_current()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100239 let cw = rubyeval('$curwin')
240 call assert_equal(cw, rubyeval('Vim::Window.current'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200241 call assert_match('^#<Vim::Window:0x\x\+>$', cw)
242endfunc
243
244" Test Vim::Window.count (number of windows)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100245func Test_ruby_Vim_window_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200246 new Xfoo1
247 new Xfoo2
248 split
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100249 call assert_equal(4, rubyeval('Vim::Window.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200250 %bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100251 call assert_equal(1, rubyeval('Vim::Window.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200252endfunc
253
254" Test Vim::Window[n] (get window object of window n)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100255func Test_ruby_Vim_window_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200256 new Xfoo1
257 new Xfoo2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100258 call assert_match('Xfoo2$', rubyeval('Vim::Window[0].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200259 wincmd j
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100260 call assert_match('Xfoo1$', rubyeval('Vim::Window[1].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200261 wincmd j
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100262 call assert_equal(v:null, rubyeval('Vim::Window[2].buffer.name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200263 %bwipe
264endfunc
265
266" Test Vim::Buffer.current (return the buffer object of current buffer)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100267func Test_ruby_Vim_buffer_current()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100268 let cb = rubyeval('$curbuf')
269 call assert_equal(cb, rubyeval('Vim::Buffer.current'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200270 call assert_match('^#<Vim::Buffer:0x\x\+>$', cb)
271endfunc
272
273" Test Vim::Buffer:.count (return the number of buffers)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100274func Test_ruby_Vim_buffer_count()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200275 new Xfoo1
276 new Xfoo2
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100277 call assert_equal(3, rubyeval('Vim::Buffer.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200278 %bwipe
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100279 call assert_equal(1, rubyeval('Vim::Buffer.count'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200280endfunc
281
282" Test Vim::buffer[n] (return the buffer object of buffer number n)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100283func Test_ruby_Vim_buffer_get()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200284 new Xfoo1
285 new Xfoo2
286
287 " Index of Vim::Buffer[n] goes from 0 to the number of buffers.
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100288 call assert_equal(v:null, rubyeval('Vim::Buffer[0].name'))
289 call assert_match('Xfoo1$', rubyeval('Vim::Buffer[1].name'))
290 call assert_match('Xfoo2$', rubyeval('Vim::Buffer[2].name'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200291 call assert_fails('ruby print Vim::Buffer[3].name',
Yee Cheng Chinebea31e2025-01-09 22:23:29 +0100292 \ "NoMethodError")
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200293 %bwipe
294endfunc
295
296" Test Vim::command({cmd}) (execute a Ex command))
297" Test Vim::command({cmd})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100298func Test_ruby_Vim_command()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200299 new
300 call setline(1, ['one', 'two', 'three', 'four'])
301 ruby Vim::command('2,3d')
302 call assert_equal(['one', 'four'], getline(1, '$'))
303 bwipe!
304endfunc
305
306" Test Vim::set_option (set a vim option)
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100307func Test_ruby_Vim_set_option()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200308 call assert_equal(0, &number)
309 ruby Vim::set_option('number')
310 call assert_equal(1, &number)
311 ruby Vim::set_option('nonumber')
312 call assert_equal(0, &number)
313endfunc
314
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100315func Test_ruby_Vim_evaluate()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100316 call assert_equal(123, rubyeval('Vim::evaluate("123")'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200317 " Vim::evaluate("123").class gives Integer or Fixnum depending
318 " on versions of Ruby.
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100319 call assert_match('^Integer\|Fixnum$', rubyeval('Vim::evaluate("123").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200320
Bram Moolenaar73e28dc2022-09-17 21:08:33 +0100321 call assert_equal(1.23, rubyeval('Vim::evaluate("1.23")'))
322 call assert_equal('Float', rubyeval('Vim::evaluate("1.23").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200323
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100324 call assert_equal('foo', rubyeval('Vim::evaluate("\"foo\"")'))
325 call assert_equal('String', rubyeval('Vim::evaluate("\"foo\"").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200326
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100327 call assert_equal(["\x01\xAB"], rubyeval('Vim::evaluate("0z01ab").unpack("M")'))
328 call assert_equal('String', rubyeval('Vim::evaluate("0z01ab").class'))
Bram Moolenaar0d13cce2019-02-23 14:23:03 +0100329
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100330 call assert_equal([1, 2], rubyeval('Vim::evaluate("[1, 2]")'))
331 call assert_equal('Array', rubyeval('Vim::evaluate("[1, 2]").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200332
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100333 call assert_equal({'1': 2}, rubyeval('Vim::evaluate("{1:2}")'))
334 call assert_equal('Hash', rubyeval('Vim::evaluate("{1:2}").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200335
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100336 call assert_equal(v:null, rubyeval('Vim::evaluate("v:null")'))
337 call assert_equal('NilClass', rubyeval('Vim::evaluate("v:null").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200338
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100339 call assert_equal(v:null, rubyeval('Vim::evaluate("v:none")'))
340 call assert_equal('NilClass', rubyeval('Vim::evaluate("v:none").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200341
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100342 call assert_equal(v:true, rubyeval('Vim::evaluate("v:true")'))
343 call assert_equal('TrueClass', rubyeval('Vim::evaluate("v:true").class'))
344 call assert_equal(v:false, rubyeval('Vim::evaluate("v:false")'))
345 call assert_equal('FalseClass',rubyeval('Vim::evaluate("v:false").class'))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200346endfunc
347
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100348func Test_ruby_Vim_blob()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100349 call assert_equal('0z', rubyeval('Vim::blob("")'))
350 call assert_equal('0z31326162', rubyeval('Vim::blob("12ab")'))
351 call assert_equal('0z00010203', rubyeval('Vim::blob("\x00\x01\x02\x03")'))
352 call assert_equal('0z8081FEFF', rubyeval('Vim::blob("\x80\x81\xfe\xff")'))
Bram Moolenaar0d13cce2019-02-23 14:23:03 +0100353endfunc
354
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100355func Test_ruby_Vim_evaluate_list()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200356 call setline(line('$'), ['2 line 2'])
357 ruby Vim.command("normal /^2\n")
358 let l = ["abc", "def"]
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200359 ruby << trim EOF
360 curline = $curbuf.line_number
361 l = Vim.evaluate("l");
362 $curbuf.append(curline, l.join("\n"))
363 EOF
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200364 normal j
365 .rubydo $_ = $_.gsub(/\n/, '/')
366 call assert_equal('abc/def', getline('$'))
367endfunc
368
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100369func Test_ruby_Vim_evaluate_dict()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200370 let d = {'a': 'foo', 'b': 123}
371 redir => l:out
372 ruby d = Vim.evaluate("d"); print d
373 redir END
Yee Cheng Chinebea31e2025-01-09 22:23:29 +0100374 call assert_equal(['{"a"=>"foo","b"=>123}'], split(substitute(l:out, '\s', '', 'g'), "\n"))
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200375endfunc
376
377" Test Vim::message({msg}) (display message {msg})
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100378func Test_ruby_Vim_message()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200379 ruby Vim::message('A message')
380 let messages = split(execute('message'), "\n")
381 call assert_equal('A message', messages[-1])
382endfunc
383
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100384func Test_ruby_print()
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100385 func RubyPrint(expr)
386 return trim(execute('ruby print ' . a:expr))
387 endfunc
388
389 call assert_equal('123', RubyPrint('123'))
390 call assert_equal('1.23', RubyPrint('1.23'))
391 call assert_equal('Hello World!', RubyPrint('"Hello World!"'))
392 call assert_equal('[1, 2]', RubyPrint('[1, 2]'))
Yee Cheng Chinebea31e2025-01-09 22:23:29 +0100393 call assert_equal('{"k1"=>"v1","k2"=>"v2"}', substitute(RubyPrint('({"k1" => "v1", "k2" => "v2"})'), '\s', '', 'g'))
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100394 call assert_equal('true', RubyPrint('true'))
395 call assert_equal('false', RubyPrint('false'))
396 call assert_equal('', RubyPrint('nil'))
397 call assert_match('Vim', RubyPrint('Vim'))
398 call assert_match('Module', RubyPrint('Vim.class'))
399
400 delfunc RubyPrint
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200401endfunc
402
Bram Moolenaar5feabe02020-01-30 18:24:53 +0100403func Test_ruby_p()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200404 ruby p 'Just a test'
Bram Moolenaar88e6cc22020-04-30 19:19:29 +0200405 let messages = GetMessages()
Bram Moolenaaredd6aac2018-07-28 17:29:19 +0200406 call assert_equal('"Just a test"', messages[-1])
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200407
408 " Check return values of p method
409
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100410 call assert_equal(123, rubyeval('p(123)'))
411 call assert_equal([1, 2, 3], rubyeval('p(1, 2, 3)'))
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200412
413 " Avoid the "message maintainer" line.
414 let $LANG = ''
415 messages clear
Bram Moolenaare99be0e2019-03-26 22:51:09 +0100416 call assert_equal(v:true, rubyeval('p() == nil'))
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200417
Bram Moolenaar88e6cc22020-04-30 19:19:29 +0200418 let messages = GetMessages()
Bram Moolenaar51e9fbf2018-08-11 14:24:11 +0200419 call assert_equal(0, len(messages))
Bram Moolenaar53901442018-07-25 22:02:36 +0200420endfunc
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200421
Bram Moolenaara1905482020-06-20 16:00:25 +0200422func Test_rubyeval_error()
423 " On Linux or Windows the error matches:
424 " "syntax error, unexpected end-of-input"
425 " whereas on macOS in CI, the error message makes less sense:
426 " "SyntaxError: array length must be 2"
427 " Unclear why. The test does not check the error message.
428 call assert_fails('call rubyeval("(")')
429endfunc
430
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200431" Test for various heredoc syntax
432func Test_ruby_heredoc()
433 ruby << END
434Vim.command('let s = "A"')
435END
436 ruby <<
437Vim.command('let s ..= "B"')
438.
439 ruby << trim END
440 Vim.command('let s ..= "C"')
441 END
442 ruby << trim
443 Vim.command('let s ..= "D"')
444 .
Bram Moolenaar6ab09532020-05-01 14:10:13 +0200445 ruby << trim eof
446 Vim.command('let s ..= "E"')
447 eof
zeertzjq449c2e52025-02-03 18:56:16 +0100448ruby << trimm
449Vim.command('let s ..= "F"')
450trimm
451 call assert_equal('ABCDEF', s)
Bram Moolenaar6c2b7b82020-04-14 20:15:49 +0200452endfunc
453
454" vim: shiftwidth=2 sts=2 expandtab