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