153901442SBram Moolenaar" Test for python 3 commands. 2213ed008SBram Moolenaar" TODO: move tests from test87.in here. 3a58883b4SBram Moolenaar 4b46fecd3SBram Moolenaarsource check.vim 5b46fecd3SBram MoolenaarCheckFeature python3 6a58883b4SBram Moolenaar 7a58883b4SBram Moolenaarfunc Test_py3do() 8a58883b4SBram Moolenaar " Check deleting lines does not trigger an ml_get error. 9a58883b4SBram Moolenaar py3 import vim 10a58883b4SBram Moolenaar new 11a58883b4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 12a58883b4SBram Moolenaar py3do vim.command("%d_") 13a58883b4SBram Moolenaar bwipe! 14a58883b4SBram Moolenaar 15a58883b4SBram Moolenaar " Check switching to another buffer does not trigger an ml_get error. 16a58883b4SBram Moolenaar new 17a58883b4SBram Moolenaar let wincount = winnr('$') 18a58883b4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 19a58883b4SBram Moolenaar py3do vim.command("new") 20a58883b4SBram Moolenaar call assert_equal(wincount + 1, winnr('$')) 21a58883b4SBram Moolenaar bwipe! 22a58883b4SBram Moolenaar bwipe! 23a58883b4SBram Moolenaarendfunc 2453901442SBram Moolenaar 2553901442SBram Moolenaarfunc Test_set_cursor() 2653901442SBram Moolenaar " Check that setting the cursor position works. 2753901442SBram Moolenaar py3 import vim 2853901442SBram Moolenaar new 2953901442SBram Moolenaar call setline(1, ['first line', 'second line']) 3053901442SBram Moolenaar normal gg 3153901442SBram Moolenaar py3do vim.current.window.cursor = (1, 5) 3253901442SBram Moolenaar call assert_equal([1, 6], [line('.'), col('.')]) 3353901442SBram Moolenaar 3453901442SBram Moolenaar " Check that movement after setting cursor position keeps current column. 3553901442SBram Moolenaar normal j 3653901442SBram Moolenaar call assert_equal([2, 6], [line('.'), col('.')]) 3753901442SBram Moolenaarendfunc 389123c0b3SBram Moolenaar 399123c0b3SBram Moolenaarfunc Test_vim_function() 409123c0b3SBram Moolenaar " Check creating vim.Function object 419123c0b3SBram Moolenaar py3 import vim 429123c0b3SBram Moolenaar 439123c0b3SBram Moolenaar func s:foo() 449123c0b3SBram Moolenaar return matchstr(expand('<sfile>'), '<SNR>\zs\d\+_foo$') 459123c0b3SBram Moolenaar endfunc 469123c0b3SBram Moolenaar let name = '<SNR>' . s:foo() 479123c0b3SBram Moolenaar 489123c0b3SBram Moolenaar try 499123c0b3SBram Moolenaar py3 f = vim.bindeval('function("s:foo")') 509123c0b3SBram Moolenaar call assert_equal(name, py3eval('f.name')) 519123c0b3SBram Moolenaar catch 529123c0b3SBram Moolenaar call assert_false(v:exception) 539123c0b3SBram Moolenaar endtry 549123c0b3SBram Moolenaar 559123c0b3SBram Moolenaar try 569123c0b3SBram Moolenaar py3 f = vim.Function(b'\x80\xfdR' + vim.eval('s:foo()').encode()) 573f4f3d8eSBram Moolenaar call assert_equal(name, 'f.name'->py3eval()) 589123c0b3SBram Moolenaar catch 599123c0b3SBram Moolenaar call assert_false(v:exception) 609123c0b3SBram Moolenaar endtry 619123c0b3SBram Moolenaar 629123c0b3SBram Moolenaar py3 del f 639123c0b3SBram Moolenaar delfunc s:foo 649123c0b3SBram Moolenaarendfunc 6514816ad6SBram Moolenaar 6614816ad6SBram Moolenaarfunc Test_skipped_python3_command_does_not_affect_pyxversion() 6714816ad6SBram Moolenaar set pyxversion=0 6814816ad6SBram Moolenaar if 0 6914816ad6SBram Moolenaar python3 import vim 7014816ad6SBram Moolenaar endif 7114816ad6SBram Moolenaar call assert_equal(0, &pyxversion) " This assertion would have failed with Vim 8.0.0251. (pyxversion was introduced in 8.0.0251.) 7214816ad6SBram Moolenaarendfunc 7363dbfd33SBram Moolenaar 7463dbfd33SBram Moolenaarfunc _SetUpHiddenBuffer() 7563dbfd33SBram Moolenaar py3 import vim 7663dbfd33SBram Moolenaar new 7763dbfd33SBram Moolenaar edit hidden 7863dbfd33SBram Moolenaar setlocal bufhidden=hide 7963dbfd33SBram Moolenaar 8063dbfd33SBram Moolenaar enew 8163dbfd33SBram Moolenaar let lnum = 0 8263dbfd33SBram Moolenaar while lnum < 10 8363dbfd33SBram Moolenaar call append( 1, string( lnum ) ) 8463dbfd33SBram Moolenaar let lnum = lnum + 1 8563dbfd33SBram Moolenaar endwhile 8663dbfd33SBram Moolenaar normal G 8763dbfd33SBram Moolenaar 8863dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 8963dbfd33SBram Moolenaarendfunc 9063dbfd33SBram Moolenaar 91bfd36036SBram Moolenaarfunc _CleanUpHiddenBuffer() 92bfd36036SBram Moolenaar bwipe! hidden 93bfd36036SBram Moolenaar bwipe! 94bfd36036SBram Moolenaarendfunc 95bfd36036SBram Moolenaar 9663dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_Clear() 9763dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 9863dbfd33SBram Moolenaar py3 vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][:] = None 9963dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 100bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 10163dbfd33SBram Moolenaarendfunc 10263dbfd33SBram Moolenaar 10363dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_List() 10463dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 10563dbfd33SBram Moolenaar py3 vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][:] = [ 'test' ] 10663dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 107bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 10863dbfd33SBram Moolenaarendfunc 10963dbfd33SBram Moolenaar 11063dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_Str() 11163dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 11263dbfd33SBram Moolenaar py3 vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][0] = 'test' 11363dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 114bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 11563dbfd33SBram Moolenaarendfunc 11663dbfd33SBram Moolenaar 11763dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_ClearLine() 11863dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 11963dbfd33SBram Moolenaar py3 vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][0] = None 12063dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 121bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 12263dbfd33SBram Moolenaarendfunc 12363dbfd33SBram Moolenaar 12463dbfd33SBram Moolenaarfunc _SetUpVisibleBuffer() 12563dbfd33SBram Moolenaar py3 import vim 12663dbfd33SBram Moolenaar new 12763dbfd33SBram Moolenaar let lnum = 0 12863dbfd33SBram Moolenaar while lnum < 10 12963dbfd33SBram Moolenaar call append( 1, string( lnum ) ) 13063dbfd33SBram Moolenaar let lnum = lnum + 1 13163dbfd33SBram Moolenaar endwhile 13263dbfd33SBram Moolenaar normal G 13363dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 13463dbfd33SBram Moolenaarendfunc 13563dbfd33SBram Moolenaar 13663dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_Clear() 13763dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 13863dbfd33SBram Moolenaar 13963dbfd33SBram Moolenaar py3 vim.current.buffer[:] = None 14063dbfd33SBram Moolenaar call assert_equal( line( '.' ), 1 ) 14163dbfd33SBram Moolenaar 14263dbfd33SBram Moolenaar bwipe! 14363dbfd33SBram Moolenaarendfunc 14463dbfd33SBram Moolenaar 14563dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_List() 14663dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 14763dbfd33SBram Moolenaar 14863dbfd33SBram Moolenaar py3 vim.current.buffer[:] = [ 'test' ] 14963dbfd33SBram Moolenaar call assert_equal( line( '.' ), 1 ) 15063dbfd33SBram Moolenaar 15163dbfd33SBram Moolenaar bwipe! 15263dbfd33SBram Moolenaarendfunction 15363dbfd33SBram Moolenaar 15463dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_Str() 15563dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 15663dbfd33SBram Moolenaar 15763dbfd33SBram Moolenaar py3 vim.current.buffer[-1] = None 15863dbfd33SBram Moolenaar call assert_equal( line( '.' ), 10 ) 15963dbfd33SBram Moolenaar 16063dbfd33SBram Moolenaar bwipe! 16163dbfd33SBram Moolenaarendfunction 1627f3a2849SBram Moolenaar 1637f3a2849SBram Moolenaarfunc Test_Catch_Exception_Message() 1647f3a2849SBram Moolenaar try 1657f3a2849SBram Moolenaar py3 raise RuntimeError( 'TEST' ) 1667f3a2849SBram Moolenaar catch /.*/ 1677f3a2849SBram Moolenaar call assert_match( '^Vim(.*):RuntimeError: TEST$', v:exception ) 1687f3a2849SBram Moolenaar endtry 1697f3a2849SBram Moolenaarendfunc 170556684ffSBram Moolenaar 171556684ffSBram Moolenaarfunc Test_unicode() 172556684ffSBram Moolenaar " this crashed Vim once 1732466aea5SBram Moolenaar if &tenc != '' 1742466aea5SBram Moolenaar throw "Skipped: 'termencoding' is not empty" 1752466aea5SBram Moolenaar endif 1764b7cdca2SBram Moolenaar 177556684ffSBram Moolenaar set encoding=utf32 178556684ffSBram Moolenaar py3 print('hello') 1794b7cdca2SBram Moolenaar 180955f4e6fSBram Moolenaar if !has('win32') 181d518f952SBram Moolenaar set encoding=debug 182d518f952SBram Moolenaar py3 print('hello') 1834b7cdca2SBram Moolenaar 184d518f952SBram Moolenaar set encoding=euc-tw 185d518f952SBram Moolenaar py3 print('hello') 1867fc4785eSBram Moolenaar endif 1874b7cdca2SBram Moolenaar 188556684ffSBram Moolenaar set encoding=utf8 189556684ffSBram Moolenaarendfunc 190*904edabbSBram Moolenaar 191*904edabbSBram Moolenaar" Test range objects, see :help python-range 192*904edabbSBram Moolenaarfunc Test_range() 193*904edabbSBram Moolenaar new 194*904edabbSBram Moolenaar py3 b = vim.current.buffer 195*904edabbSBram Moolenaar 196*904edabbSBram Moolenaar call setline(1, range(1, 6)) 197*904edabbSBram Moolenaar py3 r = b.range(2, 4) 198*904edabbSBram Moolenaar call assert_equal(6, py3eval('len(b)')) 199*904edabbSBram Moolenaar call assert_equal(3, py3eval('len(r)')) 200*904edabbSBram Moolenaar call assert_equal('3', py3eval('b[2]')) 201*904edabbSBram Moolenaar call assert_equal('4', py3eval('r[2]')) 202*904edabbSBram Moolenaar 203*904edabbSBram Moolenaar call assert_fails('py3 r[3] = "x"', 'IndexError: line number out of range') 204*904edabbSBram Moolenaar call assert_fails('py3 x = r[3]', 'IndexError: line number out of range') 205*904edabbSBram Moolenaar call assert_fails('py3 r["a"] = "x"', 'TypeError') 206*904edabbSBram Moolenaar call assert_fails('py3 x = r["a"]', 'TypeError') 207*904edabbSBram Moolenaar 208*904edabbSBram Moolenaar py3 del r[:] 209*904edabbSBram Moolenaar call assert_equal(['1', '5', '6'], getline(1, '$')) 210*904edabbSBram Moolenaar 211*904edabbSBram Moolenaar %d | call setline(1, range(1, 6)) 212*904edabbSBram Moolenaar py3 r = b.range(2, 5) 213*904edabbSBram Moolenaar py3 del r[2] 214*904edabbSBram Moolenaar call assert_equal(['1', '2', '3', '5', '6'], getline(1, '$')) 215*904edabbSBram Moolenaar 216*904edabbSBram Moolenaar %d | call setline(1, range(1, 6)) 217*904edabbSBram Moolenaar py3 r = b.range(2, 4) 218*904edabbSBram Moolenaar py3 vim.command("%d,%dnorm Ax" % (r.start + 1, r.end + 1)) 219*904edabbSBram Moolenaar call assert_equal(['1', '2x', '3x', '4x', '5', '6'], getline(1, '$')) 220*904edabbSBram Moolenaar 221*904edabbSBram Moolenaar %d | call setline(1, range(1, 4)) 222*904edabbSBram Moolenaar py3 r = b.range(2, 3) 223*904edabbSBram Moolenaar py3 r.append(['a', 'b']) 224*904edabbSBram Moolenaar call assert_equal(['1', '2', '3', 'a', 'b', '4'], getline(1, '$')) 225*904edabbSBram Moolenaar py3 r.append(['c', 'd'], 0) 226*904edabbSBram Moolenaar call assert_equal(['1', 'c', 'd', '2', '3', 'a', 'b', '4'], getline(1, '$')) 227*904edabbSBram Moolenaar 228*904edabbSBram Moolenaar %d | call setline(1, range(1, 5)) 229*904edabbSBram Moolenaar py3 r = b.range(2, 4) 230*904edabbSBram Moolenaar py3 r.append('a') 231*904edabbSBram Moolenaar call assert_equal(['1', '2', '3', '4', 'a', '5'], getline(1, '$')) 232*904edabbSBram Moolenaar py3 r.append('b', 1) 233*904edabbSBram Moolenaar call assert_equal(['1', '2', 'b', '3', '4', 'a', '5'], getline(1, '$')) 234*904edabbSBram Moolenaar 235*904edabbSBram Moolenaar bwipe! 236*904edabbSBram Moolenaarendfunc 237