1a58883b4SBram Moolenaar" Test for python 2 commands. 2a58883b4SBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram MoolenaarCheckFeature python 5*92fdd1e7SBram MoolenaarCheckFeature quickfix 6*92fdd1e7SBram Moolenaar 7*92fdd1e7SBram Moolenaar" NOTE: This will cause errors when run under valgrind. 8*92fdd1e7SBram Moolenaar" This would require recompiling Python with: 9*92fdd1e7SBram Moolenaar" ./configure --without-pymalloc 10*92fdd1e7SBram Moolenaar" See http://svn.python.org/view/python/trunk/Misc/README.valgrind?view=markup 11*92fdd1e7SBram Moolenaar" 12*92fdd1e7SBram Moolenaar 13*92fdd1e7SBram Moolenaar" This function should be called first. This sets up python functions used by 14*92fdd1e7SBram Moolenaar" the other tests. 15*92fdd1e7SBram Moolenaarfunc Test_AAA_python_setup() 16*92fdd1e7SBram Moolenaar py << trim EOF 17*92fdd1e7SBram Moolenaar import vim 18*92fdd1e7SBram Moolenaar import sys 19*92fdd1e7SBram Moolenaar 20*92fdd1e7SBram Moolenaar def emsg(ei): 21*92fdd1e7SBram Moolenaar return ei[0].__name__ + ':' + repr(ei[1].args) 22*92fdd1e7SBram Moolenaar 23*92fdd1e7SBram Moolenaar def ee(expr, g=globals(), l=locals()): 24*92fdd1e7SBram Moolenaar try: 25*92fdd1e7SBram Moolenaar exec(expr, g, l) 26*92fdd1e7SBram Moolenaar except: 27*92fdd1e7SBram Moolenaar ei = sys.exc_info() 28*92fdd1e7SBram Moolenaar msg = emsg(ei) 29*92fdd1e7SBram Moolenaar msg = msg.replace('TypeError:(\'argument 1 ', 'TypeError:(\'') 30*92fdd1e7SBram Moolenaar if expr.find('None') > -1: 31*92fdd1e7SBram Moolenaar msg = msg.replace('TypeError:(\'iteration over non-sequence\',)', 32*92fdd1e7SBram Moolenaar 'TypeError:("\'NoneType\' object is not iterable",)') 33*92fdd1e7SBram Moolenaar if expr.find('FailingNumber') > -1: 34*92fdd1e7SBram Moolenaar msg = msg.replace(', not \'FailingNumber\'', '').replace('"', '\'') 35*92fdd1e7SBram Moolenaar msg = msg.replace('TypeError:(\'iteration over non-sequence\',)', 36*92fdd1e7SBram Moolenaar 'TypeError:("\'FailingNumber\' object is not iterable",)') 37*92fdd1e7SBram Moolenaar if msg.find('(\'\'') > -1 or msg.find('(\'can\'t') > -1: 38*92fdd1e7SBram Moolenaar msg = msg.replace('(\'', '("').replace('\',)', '",)') 39*92fdd1e7SBram Moolenaar # Some Python versions say can't, others cannot. 40*92fdd1e7SBram Moolenaar if msg.find('can\'t') > -1: 41*92fdd1e7SBram Moolenaar msg = msg.replace('can\'t', 'cannot') 42*92fdd1e7SBram Moolenaar # Some Python versions use single quote, some double quote 43*92fdd1e7SBram Moolenaar if msg.find('"cannot ') > -1: 44*92fdd1e7SBram Moolenaar msg = msg.replace('"cannot ', '\'cannot ') 45*92fdd1e7SBram Moolenaar if msg.find(' attributes"') > -1: 46*92fdd1e7SBram Moolenaar msg = msg.replace(' attributes"', ' attributes\'') 47*92fdd1e7SBram Moolenaar if expr == 'fd(self=[])': 48*92fdd1e7SBram Moolenaar # HACK: PyMapping_Check changed meaning 49*92fdd1e7SBram Moolenaar msg = msg.replace('AttributeError:(\'keys\',)', 50*92fdd1e7SBram Moolenaar 'TypeError:(\'unable to convert list to vim dictionary\',)') 51*92fdd1e7SBram Moolenaar vim.current.buffer.append(expr + ':' + msg) 52*92fdd1e7SBram Moolenaar else: 53*92fdd1e7SBram Moolenaar vim.current.buffer.append(expr + ':NOT FAILED') 54*92fdd1e7SBram Moolenaar EOF 55*92fdd1e7SBram Moolenaarendfunc 56a58883b4SBram Moolenaar 57a58883b4SBram Moolenaarfunc Test_pydo() 58a58883b4SBram Moolenaar " Check deleting lines does not trigger ml_get error. 59a58883b4SBram Moolenaar new 60a58883b4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 61a58883b4SBram Moolenaar pydo vim.command("%d_") 62a58883b4SBram Moolenaar bwipe! 63a58883b4SBram Moolenaar 64a58883b4SBram Moolenaar " Check switching to another buffer does not trigger ml_get error. 65a58883b4SBram Moolenaar new 66a58883b4SBram Moolenaar let wincount = winnr('$') 67a58883b4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 68a58883b4SBram Moolenaar pydo vim.command("new") 69a58883b4SBram Moolenaar call assert_equal(wincount + 1, winnr('$')) 70a58883b4SBram Moolenaar bwipe! 71a58883b4SBram Moolenaar bwipe! 72a58883b4SBram Moolenaarendfunc 7353901442SBram Moolenaar 7453901442SBram Moolenaarfunc Test_set_cursor() 7553901442SBram Moolenaar " Check that setting the cursor position works. 7653901442SBram Moolenaar new 7753901442SBram Moolenaar call setline(1, ['first line', 'second line']) 7853901442SBram Moolenaar normal gg 7953901442SBram Moolenaar pydo vim.current.window.cursor = (1, 5) 8053901442SBram Moolenaar call assert_equal([1, 6], [line('.'), col('.')]) 8153901442SBram Moolenaar 8253901442SBram Moolenaar " Check that movement after setting cursor position keeps current column. 8353901442SBram Moolenaar normal j 8453901442SBram Moolenaar call assert_equal([2, 6], [line('.'), col('.')]) 8553901442SBram Moolenaarendfunc 869123c0b3SBram Moolenaar 879123c0b3SBram Moolenaarfunc Test_vim_function() 889123c0b3SBram Moolenaar " Check creating vim.Function object 899123c0b3SBram Moolenaar 909123c0b3SBram Moolenaar func s:foo() 919123c0b3SBram Moolenaar return matchstr(expand('<sfile>'), '<SNR>\zs\d\+_foo$') 929123c0b3SBram Moolenaar endfunc 939123c0b3SBram Moolenaar let name = '<SNR>' . s:foo() 949123c0b3SBram Moolenaar 959123c0b3SBram Moolenaar try 969123c0b3SBram Moolenaar py f = vim.bindeval('function("s:foo")') 979123c0b3SBram Moolenaar call assert_equal(name, pyeval('f.name')) 989123c0b3SBram Moolenaar catch 999123c0b3SBram Moolenaar call assert_false(v:exception) 1009123c0b3SBram Moolenaar endtry 1019123c0b3SBram Moolenaar 1029123c0b3SBram Moolenaar try 1039123c0b3SBram Moolenaar py f = vim.Function('\x80\xfdR' + vim.eval('s:foo()')) 1043f4f3d8eSBram Moolenaar call assert_equal(name, 'f.name'->pyeval()) 1059123c0b3SBram Moolenaar catch 1069123c0b3SBram Moolenaar call assert_false(v:exception) 1079123c0b3SBram Moolenaar endtry 1089123c0b3SBram Moolenaar 109*92fdd1e7SBram Moolenaar let caught_vim_err = v:false 110*92fdd1e7SBram Moolenaar try 111*92fdd1e7SBram Moolenaar let x = pyeval('f.abc') 112*92fdd1e7SBram Moolenaar catch 113*92fdd1e7SBram Moolenaar call assert_match('AttributeError: abc', v:exception) 114*92fdd1e7SBram Moolenaar let caught_vim_err = v:true 115*92fdd1e7SBram Moolenaar endtry 116*92fdd1e7SBram Moolenaar call assert_equal(v:true, caught_vim_err) 117*92fdd1e7SBram Moolenaar 1189123c0b3SBram Moolenaar py del f 1199123c0b3SBram Moolenaar delfunc s:foo 1209123c0b3SBram Moolenaarendfunc 12114816ad6SBram Moolenaar 12214816ad6SBram Moolenaarfunc Test_skipped_python_command_does_not_affect_pyxversion() 12314816ad6SBram Moolenaar set pyxversion=0 12414816ad6SBram Moolenaar if 0 12514816ad6SBram Moolenaar python import vim 12614816ad6SBram Moolenaar endif 12714816ad6SBram Moolenaar call assert_equal(0, &pyxversion) " This assertion would have failed with Vim 8.0.0251. (pyxversion was introduced in 8.0.0251.) 12814816ad6SBram Moolenaarendfunc 12963dbfd33SBram Moolenaar 13063dbfd33SBram Moolenaarfunc _SetUpHiddenBuffer() 13163dbfd33SBram Moolenaar new 13263dbfd33SBram Moolenaar edit hidden 13363dbfd33SBram Moolenaar setlocal bufhidden=hide 13463dbfd33SBram Moolenaar 13563dbfd33SBram Moolenaar enew 13663dbfd33SBram Moolenaar let lnum = 0 13763dbfd33SBram Moolenaar while lnum < 10 13863dbfd33SBram Moolenaar call append( 1, string( lnum ) ) 13963dbfd33SBram Moolenaar let lnum = lnum + 1 14063dbfd33SBram Moolenaar endwhile 14163dbfd33SBram Moolenaar normal G 14263dbfd33SBram Moolenaar 14363dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 14463dbfd33SBram Moolenaarendfunc 14563dbfd33SBram Moolenaar 146bfd36036SBram Moolenaarfunc _CleanUpHiddenBuffer() 147bfd36036SBram Moolenaar bwipe! hidden 148bfd36036SBram Moolenaar bwipe! 149bfd36036SBram Moolenaarendfunc 150bfd36036SBram Moolenaar 15163dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_Clear() 15263dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 15363dbfd33SBram Moolenaar py vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][:] = None 15463dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 155bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 15663dbfd33SBram Moolenaarendfunc 15763dbfd33SBram Moolenaar 15863dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_List() 15963dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 16063dbfd33SBram Moolenaar py vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][:] = [ 'test' ] 16163dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 162bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 16363dbfd33SBram Moolenaarendfunc 16463dbfd33SBram Moolenaar 16563dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_Str() 16663dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 16763dbfd33SBram Moolenaar py vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][0] = 'test' 16863dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 169bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 17063dbfd33SBram Moolenaarendfunc 17163dbfd33SBram Moolenaar 17263dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_ClearLine() 17363dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 17463dbfd33SBram Moolenaar py vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][0] = None 17563dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 176bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 17763dbfd33SBram Moolenaarendfunc 17863dbfd33SBram Moolenaar 17963dbfd33SBram Moolenaarfunc _SetUpVisibleBuffer() 18063dbfd33SBram Moolenaar new 18163dbfd33SBram Moolenaar let lnum = 0 18263dbfd33SBram Moolenaar while lnum < 10 18363dbfd33SBram Moolenaar call append( 1, string( lnum ) ) 18463dbfd33SBram Moolenaar let lnum = lnum + 1 18563dbfd33SBram Moolenaar endwhile 18663dbfd33SBram Moolenaar normal G 18763dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 18863dbfd33SBram Moolenaarendfunc 18963dbfd33SBram Moolenaar 19063dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_Clear() 19163dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 19263dbfd33SBram Moolenaar 19363dbfd33SBram Moolenaar py vim.current.buffer[:] = None 19463dbfd33SBram Moolenaar call assert_equal( line( '.' ), 1 ) 19563dbfd33SBram Moolenaar 19663dbfd33SBram Moolenaar bwipe! 19763dbfd33SBram Moolenaarendfunc 19863dbfd33SBram Moolenaar 19963dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_List() 20063dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 20163dbfd33SBram Moolenaar 20263dbfd33SBram Moolenaar py vim.current.buffer[:] = [ 'test' ] 20363dbfd33SBram Moolenaar call assert_equal( line( '.' ), 1 ) 20463dbfd33SBram Moolenaar 20563dbfd33SBram Moolenaar bwipe! 206*92fdd1e7SBram Moolenaarendfunc 20763dbfd33SBram Moolenaar 20863dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_Str() 20963dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 21063dbfd33SBram Moolenaar 21163dbfd33SBram Moolenaar py vim.current.buffer[-1] = None 21263dbfd33SBram Moolenaar call assert_equal( line( '.' ), 10 ) 21363dbfd33SBram Moolenaar 21463dbfd33SBram Moolenaar bwipe! 215*92fdd1e7SBram Moolenaarendfunc 2167f3a2849SBram Moolenaar 2177f3a2849SBram Moolenaarfunc Test_Catch_Exception_Message() 2187f3a2849SBram Moolenaar try 2197f3a2849SBram Moolenaar py raise RuntimeError( 'TEST' ) 2207f3a2849SBram Moolenaar catch /.*/ 2217f3a2849SBram Moolenaar call assert_match( '^Vim(.*):RuntimeError: TEST$', v:exception ) 2227f3a2849SBram Moolenaar endtry 2237f3a2849SBram Moolenaarendfunc 2246c2b7b80SBram Moolenaar 2256c2b7b80SBram Moolenaar" Test for various heredoc syntax 2266c2b7b80SBram Moolenaarfunc Test_python_heredoc() 2276c2b7b80SBram Moolenaar python << END 2286c2b7b80SBram Moolenaars='A' 2296c2b7b80SBram MoolenaarEND 2306c2b7b80SBram Moolenaar python << 2316c2b7b80SBram Moolenaars+='B' 2326c2b7b80SBram Moolenaar. 2336c2b7b80SBram Moolenaar python << trim END 2346c2b7b80SBram Moolenaar s+='C' 2356c2b7b80SBram Moolenaar END 2366c2b7b80SBram Moolenaar python << trim 2376c2b7b80SBram Moolenaar s+='D' 2386c2b7b80SBram Moolenaar . 2396ab0953fSBram Moolenaar python << trim eof 2406ab0953fSBram Moolenaar s+='E' 2416ab0953fSBram Moolenaar eof 2426ab0953fSBram Moolenaar call assert_equal('ABCDE', pyxeval('s')) 2436c2b7b80SBram Moolenaarendfunc 2446c2b7b80SBram Moolenaar 245*92fdd1e7SBram Moolenaar" Test for the buffer range object 246*92fdd1e7SBram Moolenaarfunc Test_python_range() 247*92fdd1e7SBram Moolenaar new 248*92fdd1e7SBram Moolenaar call setline(1, ['one', 'two', 'three']) 249*92fdd1e7SBram Moolenaar py b = vim.current.buffer 250*92fdd1e7SBram Moolenaar py r = b.range(1, 3) 251*92fdd1e7SBram Moolenaar call assert_equal(0, pyeval('r.start')) 252*92fdd1e7SBram Moolenaar call assert_equal(2, pyeval('r.end')) 253*92fdd1e7SBram Moolenaar call assert_equal(['two', 'three'], pyeval('r[1:]')) 254*92fdd1e7SBram Moolenaar py r[0] = 'green' 255*92fdd1e7SBram Moolenaar call assert_equal(['green', 'two', 'three'], getline(1, '$')) 256*92fdd1e7SBram Moolenaar py r[0:2] = ['red', 'blue'] 257*92fdd1e7SBram Moolenaar call assert_equal(['red', 'blue', 'three'], getline(1, '$')) 258*92fdd1e7SBram Moolenaar call assert_equal(['start', 'end', '__members__'], pyeval('r.__members__')) 259*92fdd1e7SBram Moolenaar 260*92fdd1e7SBram Moolenaar let caught_vim_err = v:false 261*92fdd1e7SBram Moolenaar try 262*92fdd1e7SBram Moolenaar let x = pyeval('r.abc') 263*92fdd1e7SBram Moolenaar catch 264*92fdd1e7SBram Moolenaar call assert_match('AttributeError: abc', v:exception) 265*92fdd1e7SBram Moolenaar let caught_vim_err = v:true 266*92fdd1e7SBram Moolenaar endtry 267*92fdd1e7SBram Moolenaar call assert_equal(v:true, caught_vim_err) 268*92fdd1e7SBram Moolenaar 269*92fdd1e7SBram Moolenaar close! 270*92fdd1e7SBram Moolenaarendfunc 271*92fdd1e7SBram Moolenaar 272*92fdd1e7SBram Moolenaar" Test for the python tabpage object 273*92fdd1e7SBram Moolenaarfunc Test_python_tabpage() 274*92fdd1e7SBram Moolenaar tabnew 275*92fdd1e7SBram Moolenaar py t = vim.tabpages[1] 276*92fdd1e7SBram Moolenaar tabclose 277*92fdd1e7SBram Moolenaar let caught_vim_err = v:false 278*92fdd1e7SBram Moolenaar try 279*92fdd1e7SBram Moolenaar let n = pyeval('t.number') 280*92fdd1e7SBram Moolenaar catch 281*92fdd1e7SBram Moolenaar call assert_match('vim.error: attempt to refer to deleted tab page', 282*92fdd1e7SBram Moolenaar \ v:exception) 283*92fdd1e7SBram Moolenaar let caught_vim_err = v:true 284*92fdd1e7SBram Moolenaar endtry 285*92fdd1e7SBram Moolenaar call assert_equal(v:true, caught_vim_err) 286*92fdd1e7SBram Moolenaar %bw! 287*92fdd1e7SBram Moolenaarendfunc 288*92fdd1e7SBram Moolenaar 289*92fdd1e7SBram Moolenaar" Test for the python window object 290*92fdd1e7SBram Moolenaarfunc Test_python_window() 291*92fdd1e7SBram Moolenaar new 292*92fdd1e7SBram Moolenaar py w = vim.current.window 293*92fdd1e7SBram Moolenaar close 294*92fdd1e7SBram Moolenaar let caught_vim_err = v:false 295*92fdd1e7SBram Moolenaar try 296*92fdd1e7SBram Moolenaar let n = pyeval('w.number') 297*92fdd1e7SBram Moolenaar catch 298*92fdd1e7SBram Moolenaar call assert_match('vim.error: attempt to refer to deleted window', 299*92fdd1e7SBram Moolenaar \ v:exception) 300*92fdd1e7SBram Moolenaar let caught_vim_err = v:true 301*92fdd1e7SBram Moolenaar endtry 302*92fdd1e7SBram Moolenaar call assert_equal(v:true, caught_vim_err) 303*92fdd1e7SBram Moolenaarendfunc 304*92fdd1e7SBram Moolenaar 305*92fdd1e7SBram Moolenaar" Test for the python List object 306*92fdd1e7SBram Moolenaarfunc Test_python_list() 307*92fdd1e7SBram Moolenaar let l = [1, 2] 308*92fdd1e7SBram Moolenaar py pl = vim.bindeval('l') 309*92fdd1e7SBram Moolenaar call assert_equal(['locked', '__members__'], pyeval('pl.__members__')) 310*92fdd1e7SBram Moolenaar 311*92fdd1e7SBram Moolenaar let l = [] 312*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 313*92fdd1e7SBram Moolenaar py f = vim.bindeval('function("strlen")') 314*92fdd1e7SBram Moolenaar " Extending List directly with different types 315*92fdd1e7SBram Moolenaar py l.extend([1, "as'd", [1, 2, f, {'a': 1}]]) 316*92fdd1e7SBram Moolenaar call assert_equal([1, "as'd", [1, 2, function("strlen"), {'a': 1}]], l) 317*92fdd1e7SBram Moolenaar call assert_equal([1, 2, function("strlen"), {'a': 1}], l[-1]) 318*92fdd1e7SBram Moolenaar call assert_fails('echo l[-4]', 'E684:') 319*92fdd1e7SBram Moolenaar 320*92fdd1e7SBram Moolenaar " List assignment 321*92fdd1e7SBram Moolenaar py l[0] = 0 322*92fdd1e7SBram Moolenaar call assert_equal([0, "as'd", [1, 2, function("strlen"), {'a': 1}]], l) 323*92fdd1e7SBram Moolenaar py l[-2] = f 324*92fdd1e7SBram Moolenaar call assert_equal([0, function("strlen"), [1, 2, function("strlen"), {'a': 1}]], l) 325*92fdd1e7SBram Moolenaarendfunc 326*92fdd1e7SBram Moolenaar 327*92fdd1e7SBram Moolenaar" Test for the python Dict object 328*92fdd1e7SBram Moolenaarfunc Test_python_dict() 329*92fdd1e7SBram Moolenaar let d = {} 330*92fdd1e7SBram Moolenaar py pd = vim.bindeval('d') 331*92fdd1e7SBram Moolenaar call assert_equal(['locked', 'scope', '__members__'], 332*92fdd1e7SBram Moolenaar \ pyeval('pd.__members__')) 333*92fdd1e7SBram Moolenaarendfunc 334*92fdd1e7SBram Moolenaar 335*92fdd1e7SBram Moolenaar" Extending Dictionary directly with different types 336*92fdd1e7SBram Moolenaarfunc Test_python_dict_extend() 337*92fdd1e7SBram Moolenaar let d = {} 338*92fdd1e7SBram Moolenaar func d.f() 339*92fdd1e7SBram Moolenaar return 1 340*92fdd1e7SBram Moolenaar endfunc 341*92fdd1e7SBram Moolenaar 342*92fdd1e7SBram Moolenaar py f = vim.bindeval('function("strlen")') 343*92fdd1e7SBram Moolenaar py << trim EOF 344*92fdd1e7SBram Moolenaar d = vim.bindeval('d') 345*92fdd1e7SBram Moolenaar d['1'] = 'asd' 346*92fdd1e7SBram Moolenaar d.update() # Must not do anything, including throwing errors 347*92fdd1e7SBram Moolenaar d.update(b = [1, 2, f]) 348*92fdd1e7SBram Moolenaar d.update((('-1', {'a': 1}),)) 349*92fdd1e7SBram Moolenaar d.update({'0': -1}) 350*92fdd1e7SBram Moolenaar dk = d.keys() 351*92fdd1e7SBram Moolenaar dv = d.values() 352*92fdd1e7SBram Moolenaar di = d.items() 353*92fdd1e7SBram Moolenaar cmpfun = lambda a, b: cmp(repr(a), repr(b)) 354*92fdd1e7SBram Moolenaar dk.sort(cmpfun) 355*92fdd1e7SBram Moolenaar dv.sort(cmpfun) 356*92fdd1e7SBram Moolenaar di.sort(cmpfun) 357*92fdd1e7SBram Moolenaar EOF 358*92fdd1e7SBram Moolenaar 359*92fdd1e7SBram Moolenaar call assert_equal(1, pyeval("d['f'](self={})")) 360*92fdd1e7SBram Moolenaar call assert_equal("['-1', '0', '1', 'b', 'f']", pyeval('repr(dk)')) 361*92fdd1e7SBram Moolenaar call assert_equal("['asd', -1L, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >]", substitute(pyeval('repr(dv)'),'0x\x\+','','g')) 362*92fdd1e7SBram Moolenaar call assert_equal("[('-1', <vim.dictionary object at >), ('0', -1L), ('1', 'asd'), ('b', <vim.list object at >), ('f', <vim.Function '1'>)]", substitute(pyeval('repr(di)'),'0x\x\+','','g')) 363*92fdd1e7SBram Moolenaar call assert_equal(['0', '1', 'b', 'f', '-1'], keys(d)) 364*92fdd1e7SBram Moolenaar call assert_equal("[-1, 'asd', [1, 2, function('strlen')], function('1'), {'a': 1}]", string(values(d))) 365*92fdd1e7SBram Moolenaar py del dk 366*92fdd1e7SBram Moolenaar py del di 367*92fdd1e7SBram Moolenaar py del dv 368*92fdd1e7SBram Moolenaarendfunc 369*92fdd1e7SBram Moolenaar 370*92fdd1e7SBram Moolenaarfunc Test_python_list_del_items() 371*92fdd1e7SBram Moolenaar " removing items with del 372*92fdd1e7SBram Moolenaar let l = [0, function("strlen"), [1, 2, function("strlen"), {'a': 1}]] 373*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 374*92fdd1e7SBram Moolenaar py del l[2] 375*92fdd1e7SBram Moolenaar call assert_equal("[0, function('strlen')]", string(l)) 376*92fdd1e7SBram Moolenaar 377*92fdd1e7SBram Moolenaar let l = range(8) 378*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 379*92fdd1e7SBram Moolenaar py del l[:3] 380*92fdd1e7SBram Moolenaar py del l[1:] 381*92fdd1e7SBram Moolenaar call assert_equal([3], l) 382*92fdd1e7SBram Moolenaar 383*92fdd1e7SBram Moolenaar " removing items out of range: silently skip items that don't exist 384*92fdd1e7SBram Moolenaar 385*92fdd1e7SBram Moolenaar " The following two ranges delete nothing as they match empty list: 386*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 387*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 388*92fdd1e7SBram Moolenaar py del l[2:1] 389*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 390*92fdd1e7SBram Moolenaar py del l[2:2] 391*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 392*92fdd1e7SBram Moolenaar py del l[2:3] 393*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 3], l) 394*92fdd1e7SBram Moolenaar 395*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 396*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 397*92fdd1e7SBram Moolenaar py del l[2:4] 398*92fdd1e7SBram Moolenaar call assert_equal([0, 1], l) 399*92fdd1e7SBram Moolenaar 400*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 401*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 402*92fdd1e7SBram Moolenaar py del l[2:5] 403*92fdd1e7SBram Moolenaar call assert_equal([0, 1], l) 404*92fdd1e7SBram Moolenaar 405*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 406*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 407*92fdd1e7SBram Moolenaar py del l[2:6] 408*92fdd1e7SBram Moolenaar call assert_equal([0, 1], l) 409*92fdd1e7SBram Moolenaar 410*92fdd1e7SBram Moolenaar " The following two ranges delete nothing as they match empty list: 411*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 412*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 413*92fdd1e7SBram Moolenaar py del l[-1:2] 414*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 415*92fdd1e7SBram Moolenaar py del l[-2:2] 416*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 417*92fdd1e7SBram Moolenaar py del l[-3:2] 418*92fdd1e7SBram Moolenaar call assert_equal([0, 2, 3], l) 419*92fdd1e7SBram Moolenaar 420*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 421*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 422*92fdd1e7SBram Moolenaar py del l[-4:2] 423*92fdd1e7SBram Moolenaar call assert_equal([2, 3], l) 424*92fdd1e7SBram Moolenaar 425*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 426*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 427*92fdd1e7SBram Moolenaar py del l[-5:2] 428*92fdd1e7SBram Moolenaar call assert_equal([2, 3], l) 429*92fdd1e7SBram Moolenaar 430*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 431*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 432*92fdd1e7SBram Moolenaar py del l[-6:2] 433*92fdd1e7SBram Moolenaar call assert_equal([2, 3], l) 434*92fdd1e7SBram Moolenaar 435*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 436*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 437*92fdd1e7SBram Moolenaar py del l[::2] 438*92fdd1e7SBram Moolenaar call assert_equal([1, 3], l) 439*92fdd1e7SBram Moolenaar 440*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 441*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 442*92fdd1e7SBram Moolenaar py del l[3:0:-2] 443*92fdd1e7SBram Moolenaar call assert_equal([0, 2], l) 444*92fdd1e7SBram Moolenaar 445*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 446*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 447*92fdd1e7SBram Moolenaar py del l[2:4:-2] 448*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 449*92fdd1e7SBram Moolenaarendfunc 450*92fdd1e7SBram Moolenaar 451*92fdd1e7SBram Moolenaarfunc Test_python_dict_del_items() 452*92fdd1e7SBram Moolenaar let d = eval("{'0' : -1, '1' : 'asd', 'b' : [1, 2, function('strlen')], 'f' : function('min'), '-1' : {'a': 1}}") 453*92fdd1e7SBram Moolenaar py d = vim.bindeval('d') 454*92fdd1e7SBram Moolenaar py del d['-1'] 455*92fdd1e7SBram Moolenaar py del d['f'] 456*92fdd1e7SBram Moolenaar call assert_equal([1, 2, function('strlen')], pyeval('d.get(''b'', 1)')) 457*92fdd1e7SBram Moolenaar call assert_equal([1, 2, function('strlen')], pyeval('d.pop(''b'')')) 458*92fdd1e7SBram Moolenaar call assert_equal(1, pyeval('d.get(''b'', 1)')) 459*92fdd1e7SBram Moolenaar call assert_equal('asd', pyeval('d.pop(''1'', 2)')) 460*92fdd1e7SBram Moolenaar call assert_equal(2, pyeval('d.pop(''1'', 2)')) 461*92fdd1e7SBram Moolenaar call assert_equal('True', pyeval('repr(d.has_key(''0''))')) 462*92fdd1e7SBram Moolenaar call assert_equal('False', pyeval('repr(d.has_key(''1''))')) 463*92fdd1e7SBram Moolenaar call assert_equal('True', pyeval('repr(''0'' in d)')) 464*92fdd1e7SBram Moolenaar call assert_equal('False', pyeval('repr(''1'' in d)')) 465*92fdd1e7SBram Moolenaar call assert_equal("['0']", pyeval('repr(list(iter(d)))')) 466*92fdd1e7SBram Moolenaar call assert_equal({'0' : -1}, d) 467*92fdd1e7SBram Moolenaar call assert_equal("('0', -1L)", pyeval('repr(d.popitem())')) 468*92fdd1e7SBram Moolenaar call assert_equal('None', pyeval('repr(d.get(''0''))')) 469*92fdd1e7SBram Moolenaar call assert_equal('[]', pyeval('repr(list(iter(d)))')) 470*92fdd1e7SBram Moolenaarendfunc 471*92fdd1e7SBram Moolenaar 472*92fdd1e7SBram Moolenaar" Slice assignment to a list 473*92fdd1e7SBram Moolenaarfunc Test_python_slice_assignment() 474*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 475*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 476*92fdd1e7SBram Moolenaar py l[0:0] = ['a'] 477*92fdd1e7SBram Moolenaar call assert_equal(['a', 0, 1, 2, 3], l) 478*92fdd1e7SBram Moolenaar 479*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 480*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 481*92fdd1e7SBram Moolenaar py l[1:2] = ['b'] 482*92fdd1e7SBram Moolenaar call assert_equal([0, 'b', 2, 3], l) 483*92fdd1e7SBram Moolenaar 484*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 485*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 486*92fdd1e7SBram Moolenaar py l[2:4] = ['c'] 487*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 'c'], l) 488*92fdd1e7SBram Moolenaar 489*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 490*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 491*92fdd1e7SBram Moolenaar py l[4:4] = ['d'] 492*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 'd'], l) 493*92fdd1e7SBram Moolenaar 494*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 495*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 496*92fdd1e7SBram Moolenaar py l[-1:2] = ['e'] 497*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 'e', 3], l) 498*92fdd1e7SBram Moolenaar 499*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 500*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 501*92fdd1e7SBram Moolenaar py l[-10:2] = ['f'] 502*92fdd1e7SBram Moolenaar call assert_equal(['f', 2, 3], l) 503*92fdd1e7SBram Moolenaar 504*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 505*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 506*92fdd1e7SBram Moolenaar py l[2:-10] = ['g'] 507*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 'g', 2, 3], l) 508*92fdd1e7SBram Moolenaar 509*92fdd1e7SBram Moolenaar let l = [] 510*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 511*92fdd1e7SBram Moolenaar py l[0:0] = ['h'] 512*92fdd1e7SBram Moolenaar call assert_equal(['h'], l) 513*92fdd1e7SBram Moolenaar 514*92fdd1e7SBram Moolenaar let l = range(8) 515*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 516*92fdd1e7SBram Moolenaar py l[2:6:2] = [10, 20] 517*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 10, 3, 20, 5, 6, 7], l) 518*92fdd1e7SBram Moolenaar 519*92fdd1e7SBram Moolenaar let l = range(8) 520*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 521*92fdd1e7SBram Moolenaar py l[6:2:-2] = [10, 20] 522*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 20, 5, 10, 7], l) 523*92fdd1e7SBram Moolenaar 524*92fdd1e7SBram Moolenaar let l = range(8) 525*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 526*92fdd1e7SBram Moolenaar py l[6:2] = () 527*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l) 528*92fdd1e7SBram Moolenaar 529*92fdd1e7SBram Moolenaar let l = range(8) 530*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 531*92fdd1e7SBram Moolenaar py l[6:2:1] = () 532*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l) 533*92fdd1e7SBram Moolenaar 534*92fdd1e7SBram Moolenaar let l = range(8) 535*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 536*92fdd1e7SBram Moolenaar py l[2:2:1] = () 537*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l) 538*92fdd1e7SBram Moolenaarendfunc 539*92fdd1e7SBram Moolenaar 540*92fdd1e7SBram Moolenaar" Locked variables 541*92fdd1e7SBram Moolenaarfunc Test_python_lockedvar() 542*92fdd1e7SBram Moolenaar new 543*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 544*92fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 545*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 546*92fdd1e7SBram Moolenaar lockvar! l 547*92fdd1e7SBram Moolenaar py << trim EOF 548*92fdd1e7SBram Moolenaar try: 549*92fdd1e7SBram Moolenaar l[2]='i' 550*92fdd1e7SBram Moolenaar except vim.error: 551*92fdd1e7SBram Moolenaar cb.append('l[2] threw vim.error: ' + emsg(sys.exc_info())) 552*92fdd1e7SBram Moolenaar EOF 553*92fdd1e7SBram Moolenaar call assert_equal(['', "l[2] threw vim.error: error:('list is locked',)"], 554*92fdd1e7SBram Moolenaar \ getline(1, '$')) 555*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 556*92fdd1e7SBram Moolenaar unlockvar! l 557*92fdd1e7SBram Moolenaar close! 558*92fdd1e7SBram Moolenaarendfunc 559*92fdd1e7SBram Moolenaar 560*92fdd1e7SBram Moolenaar" Test for calling a function 561*92fdd1e7SBram Moolenaarfunc Test_python_function_call() 562*92fdd1e7SBram Moolenaar func New(...) 563*92fdd1e7SBram Moolenaar return ['NewStart'] + a:000 + ['NewEnd'] 564*92fdd1e7SBram Moolenaar endfunc 565*92fdd1e7SBram Moolenaar 566*92fdd1e7SBram Moolenaar func DictNew(...) dict 567*92fdd1e7SBram Moolenaar return ['DictNewStart'] + a:000 + ['DictNewEnd', self] 568*92fdd1e7SBram Moolenaar endfunc 569*92fdd1e7SBram Moolenaar 570*92fdd1e7SBram Moolenaar new 571*92fdd1e7SBram Moolenaar let l = [function('New'), function('DictNew')] 572*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 573*92fdd1e7SBram Moolenaar py l.extend(list(l[0](1, 2, 3))) 574*92fdd1e7SBram Moolenaar call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd'], l) 575*92fdd1e7SBram Moolenaar py l.extend(list(l[1](1, 2, 3, self={'a': 'b'}))) 576*92fdd1e7SBram Moolenaar call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}], l) 577*92fdd1e7SBram Moolenaar py l.extend([l[0].name]) 578*92fdd1e7SBram Moolenaar call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New'], l) 579*92fdd1e7SBram Moolenaar py ee('l[1](1, 2, 3)') 580*92fdd1e7SBram Moolenaar call assert_equal("l[1](1, 2, 3):error:('Vim:E725: Calling dict function without Dictionary: DictNew',)", getline(2)) 581*92fdd1e7SBram Moolenaar %d 582*92fdd1e7SBram Moolenaar py f = l[0] 583*92fdd1e7SBram Moolenaar delfunction New 584*92fdd1e7SBram Moolenaar py ee('f(1, 2, 3)') 585*92fdd1e7SBram Moolenaar call assert_equal("f(1, 2, 3):error:('Vim:E117: Unknown function: New',)", getline(2)) 586*92fdd1e7SBram Moolenaar close! 587*92fdd1e7SBram Moolenaar delfunction DictNew 588*92fdd1e7SBram Moolenaarendfunc 589*92fdd1e7SBram Moolenaar 590*92fdd1e7SBram Moolenaarfunc Test_python_float() 591*92fdd1e7SBram Moolenaar CheckFeature float 592*92fdd1e7SBram Moolenaar let l = [0.0] 593*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 594*92fdd1e7SBram Moolenaar py l.extend([0.0]) 595*92fdd1e7SBram Moolenaar call assert_equal([0.0, 0.0], l) 596*92fdd1e7SBram Moolenaarendfunc 597*92fdd1e7SBram Moolenaar 598*92fdd1e7SBram Moolenaar" Test for Dict key errors 599*92fdd1e7SBram Moolenaarfunc Test_python_dict_key_error() 600*92fdd1e7SBram Moolenaar let messages = [] 601*92fdd1e7SBram Moolenaar py << trim EOF 602*92fdd1e7SBram Moolenaar d = vim.bindeval('{}') 603*92fdd1e7SBram Moolenaar m = vim.bindeval('messages') 604*92fdd1e7SBram Moolenaar def em(expr, g=globals(), l=locals()): 605*92fdd1e7SBram Moolenaar try: 606*92fdd1e7SBram Moolenaar exec(expr, g, l) 607*92fdd1e7SBram Moolenaar except: 608*92fdd1e7SBram Moolenaar m.extend([sys.exc_type.__name__]) 609*92fdd1e7SBram Moolenaar 610*92fdd1e7SBram Moolenaar em('d["abc1"]') 611*92fdd1e7SBram Moolenaar em('d["abc1"]="\\0"') 612*92fdd1e7SBram Moolenaar em('d["abc1"]=vim') 613*92fdd1e7SBram Moolenaar em('d[""]=1') 614*92fdd1e7SBram Moolenaar em('d["a\\0b"]=1') 615*92fdd1e7SBram Moolenaar em('d[u"a\\0b"]=1') 616*92fdd1e7SBram Moolenaar em('d.pop("abc1")') 617*92fdd1e7SBram Moolenaar em('d.popitem()') 618*92fdd1e7SBram Moolenaar del em 619*92fdd1e7SBram Moolenaar del m 620*92fdd1e7SBram Moolenaar EOF 621*92fdd1e7SBram Moolenaar 622*92fdd1e7SBram Moolenaar call assert_equal(['KeyError', 'TypeError', 'TypeError', 'ValueError', 623*92fdd1e7SBram Moolenaar \ 'TypeError', 'TypeError', 'KeyError', 'KeyError'], messages) 624*92fdd1e7SBram Moolenaar unlet messages 625*92fdd1e7SBram Moolenaarendfunc 626*92fdd1e7SBram Moolenaar 627*92fdd1e7SBram Moolenaar" Test for locked and scope attributes 628*92fdd1e7SBram Moolenaarfunc Test_python_lock_scope_attr() 629*92fdd1e7SBram Moolenaar let d = {} | let dl = {} | lockvar dl 630*92fdd1e7SBram Moolenaar let res = [] 631*92fdd1e7SBram Moolenaar for s in split("d dl v: g:") 632*92fdd1e7SBram Moolenaar let name = tr(s, ':', 's') 633*92fdd1e7SBram Moolenaar execute 'py ' .. name .. ' = vim.bindeval("' .. s .. '")' 634*92fdd1e7SBram Moolenaar call add(res, s .. ' : ' .. join(map(['locked', 'scope'], 635*92fdd1e7SBram Moolenaar \ 'v:val .. ":" .. pyeval(name .. "." .. v:val)'), ';')) 636*92fdd1e7SBram Moolenaar endfor 637*92fdd1e7SBram Moolenaar call assert_equal(['d : locked:0;scope:0', 'dl : locked:1;scope:0', 638*92fdd1e7SBram Moolenaar \ 'v: : locked:2;scope:1', 'g: : locked:0;scope:2'], res) 639*92fdd1e7SBram Moolenaar 640*92fdd1e7SBram Moolenaar silent! let d.abc2 = 1 641*92fdd1e7SBram Moolenaar silent! let dl.abc3 = 1 642*92fdd1e7SBram Moolenaar py d.locked = True 643*92fdd1e7SBram Moolenaar py dl.locked = False 644*92fdd1e7SBram Moolenaar silent! let d.def = 1 645*92fdd1e7SBram Moolenaar silent! let dl.def = 1 646*92fdd1e7SBram Moolenaar call assert_equal({'abc2': 1}, d) 647*92fdd1e7SBram Moolenaar call assert_equal({'def': 1}, dl) 648*92fdd1e7SBram Moolenaar unlet d dl 649*92fdd1e7SBram Moolenaar 650*92fdd1e7SBram Moolenaar let l = [] | let ll = [] | lockvar ll 651*92fdd1e7SBram Moolenaar let res = [] 652*92fdd1e7SBram Moolenaar for s in split("l ll") 653*92fdd1e7SBram Moolenaar let name = tr(s, ':', 's') 654*92fdd1e7SBram Moolenaar execute 'py ' .. name .. '=vim.bindeval("' .. s .. '")' 655*92fdd1e7SBram Moolenaar call add(res, s .. ' : locked:' .. pyeval(name .. '.locked')) 656*92fdd1e7SBram Moolenaar endfor 657*92fdd1e7SBram Moolenaar call assert_equal(['l : locked:0', 'll : locked:1'], res) 658*92fdd1e7SBram Moolenaar 659*92fdd1e7SBram Moolenaar silent! call extend(l, [0]) 660*92fdd1e7SBram Moolenaar silent! call extend(ll, [0]) 661*92fdd1e7SBram Moolenaar py l.locked = True 662*92fdd1e7SBram Moolenaar py ll.locked = False 663*92fdd1e7SBram Moolenaar silent! call extend(l, [1]) 664*92fdd1e7SBram Moolenaar silent! call extend(ll, [1]) 665*92fdd1e7SBram Moolenaar call assert_equal([0], l) 666*92fdd1e7SBram Moolenaar call assert_equal([1], ll) 667*92fdd1e7SBram Moolenaar unlet l ll 668*92fdd1e7SBram Moolenaarendfunc 669*92fdd1e7SBram Moolenaar 670*92fdd1e7SBram Moolenaar" Test for pyeval() 671*92fdd1e7SBram Moolenaarfunc Test_python_pyeval() 672*92fdd1e7SBram Moolenaar let l = pyeval('range(3)') 673*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2], l) 674*92fdd1e7SBram Moolenaar 675*92fdd1e7SBram Moolenaar let d = pyeval('{"a": "b", "c": 1, "d": ["e"]}') 676*92fdd1e7SBram Moolenaar call assert_equal([['a', 'b'], ['c', 1], ['d', ['e']]], sort(items(d))) 677*92fdd1e7SBram Moolenaar 678*92fdd1e7SBram Moolenaar let v:errmsg = '' 679*92fdd1e7SBram Moolenaar call assert_equal(v:none, pyeval('None')) 680*92fdd1e7SBram Moolenaar call assert_equal('', v:errmsg) 681*92fdd1e7SBram Moolenaar 682*92fdd1e7SBram Moolenaar if has('float') 683*92fdd1e7SBram Moolenaar call assert_equal(0.0, pyeval('0.0')) 684*92fdd1e7SBram Moolenaar endif 685*92fdd1e7SBram Moolenaar 686*92fdd1e7SBram Moolenaar " Invalid values: 687*92fdd1e7SBram Moolenaar let caught_859 = 0 688*92fdd1e7SBram Moolenaar try 689*92fdd1e7SBram Moolenaar let v = pyeval('"\0"') 690*92fdd1e7SBram Moolenaar catch /E859:/ 691*92fdd1e7SBram Moolenaar let caught_859 = 1 692*92fdd1e7SBram Moolenaar endtry 693*92fdd1e7SBram Moolenaar call assert_equal(1, caught_859) 694*92fdd1e7SBram Moolenaar 695*92fdd1e7SBram Moolenaar let caught_859 = 0 696*92fdd1e7SBram Moolenaar try 697*92fdd1e7SBram Moolenaar let v = pyeval('{"\0" : 1}') 698*92fdd1e7SBram Moolenaar catch /E859:/ 699*92fdd1e7SBram Moolenaar let caught_859 = 1 700*92fdd1e7SBram Moolenaar endtry 701*92fdd1e7SBram Moolenaar call assert_equal(1, caught_859) 702*92fdd1e7SBram Moolenaar 703*92fdd1e7SBram Moolenaar let caught_nameerr = 0 704*92fdd1e7SBram Moolenaar try 705*92fdd1e7SBram Moolenaar let v = pyeval("undefined_name") 706*92fdd1e7SBram Moolenaar catch /NameError: name 'undefined_name'/ 707*92fdd1e7SBram Moolenaar let caught_nameerr = 1 708*92fdd1e7SBram Moolenaar endtry 709*92fdd1e7SBram Moolenaar call assert_equal(1, caught_nameerr) 710*92fdd1e7SBram Moolenaar 711*92fdd1e7SBram Moolenaar let caught_859 = 0 712*92fdd1e7SBram Moolenaar try 713*92fdd1e7SBram Moolenaar let v = pyeval("vim") 714*92fdd1e7SBram Moolenaar catch /E859:/ 715*92fdd1e7SBram Moolenaar let caught_859 = 1 716*92fdd1e7SBram Moolenaar endtry 717*92fdd1e7SBram Moolenaar call assert_equal(1, caught_859) 718*92fdd1e7SBram Moolenaarendfunc 719*92fdd1e7SBram Moolenaar 720*92fdd1e7SBram Moolenaar" threading 721*92fdd1e7SBram Moolenaar" Running pydo command (Test_pydo) before this test, stops the python thread 722*92fdd1e7SBram Moolenaar" from running. So this test should be run before the pydo test 723*92fdd1e7SBram Moolenaarfunc Test_aaa_python_threading() 724*92fdd1e7SBram Moolenaar let l = [0] 725*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 726*92fdd1e7SBram Moolenaar py << trim EOF 727*92fdd1e7SBram Moolenaar import threading 728*92fdd1e7SBram Moolenaar import time 729*92fdd1e7SBram Moolenaar 730*92fdd1e7SBram Moolenaar class T(threading.Thread): 731*92fdd1e7SBram Moolenaar def __init__(self): 732*92fdd1e7SBram Moolenaar threading.Thread.__init__(self) 733*92fdd1e7SBram Moolenaar self.t = 0 734*92fdd1e7SBram Moolenaar self.running = True 735*92fdd1e7SBram Moolenaar 736*92fdd1e7SBram Moolenaar def run(self): 737*92fdd1e7SBram Moolenaar while self.running: 738*92fdd1e7SBram Moolenaar self.t += 1 739*92fdd1e7SBram Moolenaar time.sleep(0.1) 740*92fdd1e7SBram Moolenaar 741*92fdd1e7SBram Moolenaar t = T() 742*92fdd1e7SBram Moolenaar del T 743*92fdd1e7SBram Moolenaar t.start() 744*92fdd1e7SBram Moolenaar EOF 745*92fdd1e7SBram Moolenaar 746*92fdd1e7SBram Moolenaar sleep 1 747*92fdd1e7SBram Moolenaar py t.running = False 748*92fdd1e7SBram Moolenaar py t.join() 749*92fdd1e7SBram Moolenaar 750*92fdd1e7SBram Moolenaar " Check if the background thread is working. Count should be 10, but on a 751*92fdd1e7SBram Moolenaar " busy system (AppVeyor) it can be much lower. 752*92fdd1e7SBram Moolenaar py l[0] = t.t > 4 753*92fdd1e7SBram Moolenaar py del time 754*92fdd1e7SBram Moolenaar py del threading 755*92fdd1e7SBram Moolenaar py del t 756*92fdd1e7SBram Moolenaar call assert_equal([1], l) 757*92fdd1e7SBram Moolenaarendfunc 758*92fdd1e7SBram Moolenaar 759*92fdd1e7SBram Moolenaar" settrace 760*92fdd1e7SBram Moolenaarfunc Test_python_settrace() 761*92fdd1e7SBram Moolenaar let l = [] 762*92fdd1e7SBram Moolenaar py l = vim.bindeval('l') 763*92fdd1e7SBram Moolenaar py << trim EOF 764*92fdd1e7SBram Moolenaar import sys 765*92fdd1e7SBram Moolenaar 766*92fdd1e7SBram Moolenaar def traceit(frame, event, arg): 767*92fdd1e7SBram Moolenaar global l 768*92fdd1e7SBram Moolenaar if event == "line": 769*92fdd1e7SBram Moolenaar l.extend([frame.f_lineno]) 770*92fdd1e7SBram Moolenaar return traceit 771*92fdd1e7SBram Moolenaar 772*92fdd1e7SBram Moolenaar def trace_main(): 773*92fdd1e7SBram Moolenaar for i in range(5): 774*92fdd1e7SBram Moolenaar pass 775*92fdd1e7SBram Moolenaar EOF 776*92fdd1e7SBram Moolenaar py sys.settrace(traceit) 777*92fdd1e7SBram Moolenaar py trace_main() 778*92fdd1e7SBram Moolenaar py sys.settrace(None) 779*92fdd1e7SBram Moolenaar py del traceit 780*92fdd1e7SBram Moolenaar py del trace_main 781*92fdd1e7SBram Moolenaar call assert_equal([1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1], l) 782*92fdd1e7SBram Moolenaarendfunc 783*92fdd1e7SBram Moolenaar 784*92fdd1e7SBram Moolenaar" Slice 785*92fdd1e7SBram Moolenaarfunc Test_python_list_slice() 786*92fdd1e7SBram Moolenaar py ll = vim.bindeval('[0, 1, 2, 3, 4, 5]') 787*92fdd1e7SBram Moolenaar py l = ll[:4] 788*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], pyeval('l')) 789*92fdd1e7SBram Moolenaar py l = ll[2:] 790*92fdd1e7SBram Moolenaar call assert_equal([2, 3, 4, 5], pyeval('l')) 791*92fdd1e7SBram Moolenaar py l = ll[:-4] 792*92fdd1e7SBram Moolenaar call assert_equal([0, 1], pyeval('l')) 793*92fdd1e7SBram Moolenaar py l = ll[-2:] 794*92fdd1e7SBram Moolenaar call assert_equal([4, 5], pyeval('l')) 795*92fdd1e7SBram Moolenaar py l = ll[2:4] 796*92fdd1e7SBram Moolenaar call assert_equal([2, 3], pyeval('l')) 797*92fdd1e7SBram Moolenaar py l = ll[4:2] 798*92fdd1e7SBram Moolenaar call assert_equal([], pyeval('l')) 799*92fdd1e7SBram Moolenaar py l = ll[-4:-2] 800*92fdd1e7SBram Moolenaar call assert_equal([2, 3], pyeval('l')) 801*92fdd1e7SBram Moolenaar py l = ll[-2:-4] 802*92fdd1e7SBram Moolenaar call assert_equal([], pyeval('l')) 803*92fdd1e7SBram Moolenaar py l = ll[:] 804*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l')) 805*92fdd1e7SBram Moolenaar py l = ll[0:6] 806*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l')) 807*92fdd1e7SBram Moolenaar py l = ll[-10:10] 808*92fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l')) 809*92fdd1e7SBram Moolenaar py l = ll[4:2:-1] 810*92fdd1e7SBram Moolenaar call assert_equal([4, 3], pyeval('l')) 811*92fdd1e7SBram Moolenaar py l = ll[::2] 812*92fdd1e7SBram Moolenaar call assert_equal([0, 2, 4], pyeval('l')) 813*92fdd1e7SBram Moolenaar py l = ll[4:2:1] 814*92fdd1e7SBram Moolenaar call assert_equal([], pyeval('l')) 815*92fdd1e7SBram Moolenaar py del l 816*92fdd1e7SBram Moolenaarendfunc 817*92fdd1e7SBram Moolenaar 818*92fdd1e7SBram Moolenaar" Vars 819*92fdd1e7SBram Moolenaarfunc Test_python_vars() 820*92fdd1e7SBram Moolenaar let g:foo = 'bac' 821*92fdd1e7SBram Moolenaar let w:abc3 = 'def' 822*92fdd1e7SBram Moolenaar let b:baz = 'bar' 823*92fdd1e7SBram Moolenaar let t:bar = 'jkl' 824*92fdd1e7SBram Moolenaar try 825*92fdd1e7SBram Moolenaar throw "Abc" 826*92fdd1e7SBram Moolenaar catch /Abc/ 827*92fdd1e7SBram Moolenaar call assert_equal('Abc', pyeval('vim.vvars[''exception'']')) 828*92fdd1e7SBram Moolenaar endtry 829*92fdd1e7SBram Moolenaar call assert_equal('bac', pyeval('vim.vars[''foo'']')) 830*92fdd1e7SBram Moolenaar call assert_equal('def', pyeval('vim.current.window.vars[''abc3'']')) 831*92fdd1e7SBram Moolenaar call assert_equal('bar', pyeval('vim.current.buffer.vars[''baz'']')) 832*92fdd1e7SBram Moolenaar call assert_equal('jkl', pyeval('vim.current.tabpage.vars[''bar'']')) 833*92fdd1e7SBram Moolenaarendfunc 834*92fdd1e7SBram Moolenaar 835*92fdd1e7SBram Moolenaar" Options 836*92fdd1e7SBram Moolenaar" paste: boolean, global 837*92fdd1e7SBram Moolenaar" previewheight number, global 838*92fdd1e7SBram Moolenaar" operatorfunc: string, global 839*92fdd1e7SBram Moolenaar" number: boolean, window-local 840*92fdd1e7SBram Moolenaar" numberwidth: number, window-local 841*92fdd1e7SBram Moolenaar" colorcolumn: string, window-local 842*92fdd1e7SBram Moolenaar" statusline: string, window-local/global 843*92fdd1e7SBram Moolenaar" autoindent: boolean, buffer-local 844*92fdd1e7SBram Moolenaar" shiftwidth: number, buffer-local 845*92fdd1e7SBram Moolenaar" omnifunc: string, buffer-local 846*92fdd1e7SBram Moolenaar" preserveindent: boolean, buffer-local/global 847*92fdd1e7SBram Moolenaar" path: string, buffer-local/global 848*92fdd1e7SBram Moolenaarfunc Test_python_opts() 849*92fdd1e7SBram Moolenaar let g:res = [] 850*92fdd1e7SBram Moolenaar let g:bufs = [bufnr('%')] 851*92fdd1e7SBram Moolenaar new 852*92fdd1e7SBram Moolenaar let g:bufs += [bufnr('%')] 853*92fdd1e7SBram Moolenaar vnew 854*92fdd1e7SBram Moolenaar let g:bufs += [bufnr('%')] 855*92fdd1e7SBram Moolenaar wincmd j 856*92fdd1e7SBram Moolenaar vnew 857*92fdd1e7SBram Moolenaar let g:bufs += [bufnr('%')] 858*92fdd1e7SBram Moolenaar wincmd l 859*92fdd1e7SBram Moolenaar 860*92fdd1e7SBram Moolenaar func RecVars(opt) 861*92fdd1e7SBram Moolenaar let gval = string(eval('&g:' .. a:opt)) 862*92fdd1e7SBram Moolenaar let wvals = join(map(range(1, 4), 863*92fdd1e7SBram Moolenaar \ 'v:val .. ":" .. string(getwinvar(v:val, "&" .. a:opt))')) 864*92fdd1e7SBram Moolenaar let bvals = join(map(copy(g:bufs), 865*92fdd1e7SBram Moolenaar \ 'v:val .. ":" .. string(getbufvar(v:val, "&" .. a:opt))')) 866*92fdd1e7SBram Moolenaar call add(g:res, ' G: ' .. gval) 867*92fdd1e7SBram Moolenaar call add(g:res, ' W: ' .. wvals) 868*92fdd1e7SBram Moolenaar call add(g:res, ' B: ' .. wvals) 869*92fdd1e7SBram Moolenaar endfunc 870*92fdd1e7SBram Moolenaar 871*92fdd1e7SBram Moolenaar py << trim EOF 872*92fdd1e7SBram Moolenaar def e(s, g=globals(), l=locals()): 873*92fdd1e7SBram Moolenaar try: 874*92fdd1e7SBram Moolenaar exec(s, g, l) 875*92fdd1e7SBram Moolenaar except: 876*92fdd1e7SBram Moolenaar vim.command('return ' + repr(sys.exc_type.__name__)) 877*92fdd1e7SBram Moolenaar 878*92fdd1e7SBram Moolenaar def ev(s, g=globals(), l=locals()): 879*92fdd1e7SBram Moolenaar try: 880*92fdd1e7SBram Moolenaar return eval(s, g, l) 881*92fdd1e7SBram Moolenaar except: 882*92fdd1e7SBram Moolenaar vim.command('let exc=' + repr(sys.exc_type.__name__)) 883*92fdd1e7SBram Moolenaar return 0 884*92fdd1e7SBram Moolenaar EOF 885*92fdd1e7SBram Moolenaar 886*92fdd1e7SBram Moolenaar func E(s) 887*92fdd1e7SBram Moolenaar python e(vim.eval('a:s')) 888*92fdd1e7SBram Moolenaar endfunc 889*92fdd1e7SBram Moolenaar 890*92fdd1e7SBram Moolenaar func Ev(s) 891*92fdd1e7SBram Moolenaar let r = pyeval('ev(vim.eval("a:s"))') 892*92fdd1e7SBram Moolenaar if exists('exc') 893*92fdd1e7SBram Moolenaar throw exc 894*92fdd1e7SBram Moolenaar endif 895*92fdd1e7SBram Moolenaar return r 896*92fdd1e7SBram Moolenaar endfunc 897*92fdd1e7SBram Moolenaar 898*92fdd1e7SBram Moolenaar py gopts1 = vim.options 899*92fdd1e7SBram Moolenaar py wopts1 = vim.windows[2].options 900*92fdd1e7SBram Moolenaar py wopts2 = vim.windows[0].options 901*92fdd1e7SBram Moolenaar py wopts3 = vim.windows[1].options 902*92fdd1e7SBram Moolenaar py bopts1 = vim.buffers[vim.bindeval("g:bufs")[2]].options 903*92fdd1e7SBram Moolenaar py bopts2 = vim.buffers[vim.bindeval("g:bufs")[1]].options 904*92fdd1e7SBram Moolenaar py bopts3 = vim.buffers[vim.bindeval("g:bufs")[0]].options 905*92fdd1e7SBram Moolenaar call add(g:res, 'wopts iters equal: ' .. 906*92fdd1e7SBram Moolenaar \ pyeval('list(wopts1) == list(wopts2)')) 907*92fdd1e7SBram Moolenaar call add(g:res, 'bopts iters equal: ' .. 908*92fdd1e7SBram Moolenaar \ pyeval('list(bopts1) == list(bopts2)')) 909*92fdd1e7SBram Moolenaar py gset = set(iter(gopts1)) 910*92fdd1e7SBram Moolenaar py wset = set(iter(wopts1)) 911*92fdd1e7SBram Moolenaar py bset = set(iter(bopts1)) 912*92fdd1e7SBram Moolenaar 913*92fdd1e7SBram Moolenaar set path=.,..,, 914*92fdd1e7SBram Moolenaar let lst = [] 915*92fdd1e7SBram Moolenaar let lst += [['paste', 1, 0, 1, 2, 1, 1, 0]] 916*92fdd1e7SBram Moolenaar let lst += [['previewheight', 5, 1, 6, 'a', 0, 1, 0]] 917*92fdd1e7SBram Moolenaar let lst += [['operatorfunc', 'A', 'B', 'C', 2, 0, 1, 0]] 918*92fdd1e7SBram Moolenaar let lst += [['number', 0, 1, 1, 0, 1, 0, 1]] 919*92fdd1e7SBram Moolenaar let lst += [['numberwidth', 2, 3, 5, -100, 0, 0, 1]] 920*92fdd1e7SBram Moolenaar let lst += [['colorcolumn', '+1', '+2', '+3', 'abc4', 0, 0, 1]] 921*92fdd1e7SBram Moolenaar let lst += [['statusline', '1', '2', '4', 0, 0, 1, 1]] 922*92fdd1e7SBram Moolenaar let lst += [['autoindent', 0, 1, 1, 2, 1, 0, 2]] 923*92fdd1e7SBram Moolenaar let lst += [['shiftwidth', 0, 2, 1, 3, 0, 0, 2]] 924*92fdd1e7SBram Moolenaar let lst += [['omnifunc', 'A', 'B', 'C', 1, 0, 0, 2]] 925*92fdd1e7SBram Moolenaar let lst += [['preserveindent', 0, 1, 1, 2, 1, 1, 2]] 926*92fdd1e7SBram Moolenaar let lst += [['path', '.,,', ',,', '.', 0, 0, 1, 2]] 927*92fdd1e7SBram Moolenaar for [oname, oval1, oval2, oval3, invval, bool, global, local] in lst 928*92fdd1e7SBram Moolenaar py oname = vim.eval('oname') 929*92fdd1e7SBram Moolenaar py oval1 = vim.bindeval('oval1') 930*92fdd1e7SBram Moolenaar py oval2 = vim.bindeval('oval2') 931*92fdd1e7SBram Moolenaar py oval3 = vim.bindeval('oval3') 932*92fdd1e7SBram Moolenaar if invval is 0 || invval is 1 933*92fdd1e7SBram Moolenaar py invval = bool(vim.bindeval('invval')) 934*92fdd1e7SBram Moolenaar else 935*92fdd1e7SBram Moolenaar py invval = vim.bindeval('invval') 936*92fdd1e7SBram Moolenaar endif 937*92fdd1e7SBram Moolenaar if bool 938*92fdd1e7SBram Moolenaar py oval1 = bool(oval1) 939*92fdd1e7SBram Moolenaar py oval2 = bool(oval2) 940*92fdd1e7SBram Moolenaar py oval3 = bool(oval3) 941*92fdd1e7SBram Moolenaar endif 942*92fdd1e7SBram Moolenaar call add(g:res, '>>> ' .. oname) 943*92fdd1e7SBram Moolenaar call add(g:res, ' g/w/b:' .. pyeval('oname in gset') .. '/' .. 944*92fdd1e7SBram Moolenaar \ pyeval('oname in wset') .. '/' .. pyeval('oname in bset')) 945*92fdd1e7SBram Moolenaar call add(g:res, ' g/w/b (in):' .. pyeval('oname in gopts1') .. '/' .. 946*92fdd1e7SBram Moolenaar \ pyeval('oname in wopts1') .. '/' .. pyeval('oname in bopts1')) 947*92fdd1e7SBram Moolenaar for v in ['gopts1', 'wopts1', 'bopts1'] 948*92fdd1e7SBram Moolenaar try 949*92fdd1e7SBram Moolenaar call add(g:res, ' p/' .. v .. ': ' .. Ev('repr(' .. v .. '[''' .. oname .. '''])')) 950*92fdd1e7SBram Moolenaar catch 951*92fdd1e7SBram Moolenaar call add(g:res, ' p/' .. v .. '! ' .. v:exception) 952*92fdd1e7SBram Moolenaar endtry 953*92fdd1e7SBram Moolenaar let r = E(v .. '[''' .. oname .. ''']=invval') 954*92fdd1e7SBram Moolenaar if r isnot 0 955*92fdd1e7SBram Moolenaar call add(g:res, ' inv: ' .. string(invval) .. '! ' .. r) 956*92fdd1e7SBram Moolenaar endif 957*92fdd1e7SBram Moolenaar for vv in (v is# 'gopts1' ? [v] : [v, v[:-2] .. '2', v[:-2] .. '3']) 958*92fdd1e7SBram Moolenaar let val = substitute(vv, '^.opts', 'oval', '') 959*92fdd1e7SBram Moolenaar let r = E(vv .. '[''' .. oname .. ''']=' .. val) 960*92fdd1e7SBram Moolenaar if r isnot 0 961*92fdd1e7SBram Moolenaar call add(g:res, ' ' .. vv .. '! ' .. r) 962*92fdd1e7SBram Moolenaar endif 963*92fdd1e7SBram Moolenaar endfor 964*92fdd1e7SBram Moolenaar endfor 965*92fdd1e7SBram Moolenaar call RecVars(oname) 966*92fdd1e7SBram Moolenaar for v in ['wopts3', 'bopts3'] 967*92fdd1e7SBram Moolenaar let r = E('del ' .. v .. '["' .. oname .. '"]') 968*92fdd1e7SBram Moolenaar if r isnot 0 969*92fdd1e7SBram Moolenaar call add(g:res, ' del ' .. v .. '! ' .. r) 970*92fdd1e7SBram Moolenaar endif 971*92fdd1e7SBram Moolenaar endfor 972*92fdd1e7SBram Moolenaar call RecVars(oname) 973*92fdd1e7SBram Moolenaar endfor 974*92fdd1e7SBram Moolenaar delfunction RecVars 975*92fdd1e7SBram Moolenaar delfunction E 976*92fdd1e7SBram Moolenaar delfunction Ev 977*92fdd1e7SBram Moolenaar py del ev 978*92fdd1e7SBram Moolenaar py del e 979*92fdd1e7SBram Moolenaar only 980*92fdd1e7SBram Moolenaar for buf in g:bufs[1:] 981*92fdd1e7SBram Moolenaar execute 'bwipeout!' buf 982*92fdd1e7SBram Moolenaar endfor 983*92fdd1e7SBram Moolenaar py del gopts1 984*92fdd1e7SBram Moolenaar py del wopts1 985*92fdd1e7SBram Moolenaar py del wopts2 986*92fdd1e7SBram Moolenaar py del wopts3 987*92fdd1e7SBram Moolenaar py del bopts1 988*92fdd1e7SBram Moolenaar py del bopts2 989*92fdd1e7SBram Moolenaar py del bopts3 990*92fdd1e7SBram Moolenaar py del oval1 991*92fdd1e7SBram Moolenaar py del oval2 992*92fdd1e7SBram Moolenaar py del oval3 993*92fdd1e7SBram Moolenaar py del oname 994*92fdd1e7SBram Moolenaar py del invval 995*92fdd1e7SBram Moolenaar 996*92fdd1e7SBram Moolenaar let expected =<< trim END 997*92fdd1e7SBram Moolenaar wopts iters equal: 1 998*92fdd1e7SBram Moolenaar bopts iters equal: 1 999*92fdd1e7SBram Moolenaar >>> paste 1000*92fdd1e7SBram Moolenaar g/w/b:1/0/0 1001*92fdd1e7SBram Moolenaar g/w/b (in):1/0/0 1002*92fdd1e7SBram Moolenaar p/gopts1: False 1003*92fdd1e7SBram Moolenaar p/wopts1! KeyError 1004*92fdd1e7SBram Moolenaar inv: 2! KeyError 1005*92fdd1e7SBram Moolenaar wopts1! KeyError 1006*92fdd1e7SBram Moolenaar wopts2! KeyError 1007*92fdd1e7SBram Moolenaar wopts3! KeyError 1008*92fdd1e7SBram Moolenaar p/bopts1! KeyError 1009*92fdd1e7SBram Moolenaar inv: 2! KeyError 1010*92fdd1e7SBram Moolenaar bopts1! KeyError 1011*92fdd1e7SBram Moolenaar bopts2! KeyError 1012*92fdd1e7SBram Moolenaar bopts3! KeyError 1013*92fdd1e7SBram Moolenaar G: 1 1014*92fdd1e7SBram Moolenaar W: 1:1 2:1 3:1 4:1 1015*92fdd1e7SBram Moolenaar B: 1:1 2:1 3:1 4:1 1016*92fdd1e7SBram Moolenaar del wopts3! KeyError 1017*92fdd1e7SBram Moolenaar del bopts3! KeyError 1018*92fdd1e7SBram Moolenaar G: 1 1019*92fdd1e7SBram Moolenaar W: 1:1 2:1 3:1 4:1 1020*92fdd1e7SBram Moolenaar B: 1:1 2:1 3:1 4:1 1021*92fdd1e7SBram Moolenaar >>> previewheight 1022*92fdd1e7SBram Moolenaar g/w/b:1/0/0 1023*92fdd1e7SBram Moolenaar g/w/b (in):1/0/0 1024*92fdd1e7SBram Moolenaar p/gopts1: 12 1025*92fdd1e7SBram Moolenaar inv: 'a'! TypeError 1026*92fdd1e7SBram Moolenaar p/wopts1! KeyError 1027*92fdd1e7SBram Moolenaar inv: 'a'! KeyError 1028*92fdd1e7SBram Moolenaar wopts1! KeyError 1029*92fdd1e7SBram Moolenaar wopts2! KeyError 1030*92fdd1e7SBram Moolenaar wopts3! KeyError 1031*92fdd1e7SBram Moolenaar p/bopts1! KeyError 1032*92fdd1e7SBram Moolenaar inv: 'a'! KeyError 1033*92fdd1e7SBram Moolenaar bopts1! KeyError 1034*92fdd1e7SBram Moolenaar bopts2! KeyError 1035*92fdd1e7SBram Moolenaar bopts3! KeyError 1036*92fdd1e7SBram Moolenaar G: 5 1037*92fdd1e7SBram Moolenaar W: 1:5 2:5 3:5 4:5 1038*92fdd1e7SBram Moolenaar B: 1:5 2:5 3:5 4:5 1039*92fdd1e7SBram Moolenaar del wopts3! KeyError 1040*92fdd1e7SBram Moolenaar del bopts3! KeyError 1041*92fdd1e7SBram Moolenaar G: 5 1042*92fdd1e7SBram Moolenaar W: 1:5 2:5 3:5 4:5 1043*92fdd1e7SBram Moolenaar B: 1:5 2:5 3:5 4:5 1044*92fdd1e7SBram Moolenaar >>> operatorfunc 1045*92fdd1e7SBram Moolenaar g/w/b:1/0/0 1046*92fdd1e7SBram Moolenaar g/w/b (in):1/0/0 1047*92fdd1e7SBram Moolenaar p/gopts1: '' 1048*92fdd1e7SBram Moolenaar inv: 2! TypeError 1049*92fdd1e7SBram Moolenaar p/wopts1! KeyError 1050*92fdd1e7SBram Moolenaar inv: 2! KeyError 1051*92fdd1e7SBram Moolenaar wopts1! KeyError 1052*92fdd1e7SBram Moolenaar wopts2! KeyError 1053*92fdd1e7SBram Moolenaar wopts3! KeyError 1054*92fdd1e7SBram Moolenaar p/bopts1! KeyError 1055*92fdd1e7SBram Moolenaar inv: 2! KeyError 1056*92fdd1e7SBram Moolenaar bopts1! KeyError 1057*92fdd1e7SBram Moolenaar bopts2! KeyError 1058*92fdd1e7SBram Moolenaar bopts3! KeyError 1059*92fdd1e7SBram Moolenaar G: 'A' 1060*92fdd1e7SBram Moolenaar W: 1:'A' 2:'A' 3:'A' 4:'A' 1061*92fdd1e7SBram Moolenaar B: 1:'A' 2:'A' 3:'A' 4:'A' 1062*92fdd1e7SBram Moolenaar del wopts3! KeyError 1063*92fdd1e7SBram Moolenaar del bopts3! KeyError 1064*92fdd1e7SBram Moolenaar G: 'A' 1065*92fdd1e7SBram Moolenaar W: 1:'A' 2:'A' 3:'A' 4:'A' 1066*92fdd1e7SBram Moolenaar B: 1:'A' 2:'A' 3:'A' 4:'A' 1067*92fdd1e7SBram Moolenaar >>> number 1068*92fdd1e7SBram Moolenaar g/w/b:0/1/0 1069*92fdd1e7SBram Moolenaar g/w/b (in):0/1/0 1070*92fdd1e7SBram Moolenaar p/gopts1! KeyError 1071*92fdd1e7SBram Moolenaar inv: 0! KeyError 1072*92fdd1e7SBram Moolenaar gopts1! KeyError 1073*92fdd1e7SBram Moolenaar p/wopts1: False 1074*92fdd1e7SBram Moolenaar p/bopts1! KeyError 1075*92fdd1e7SBram Moolenaar inv: 0! KeyError 1076*92fdd1e7SBram Moolenaar bopts1! KeyError 1077*92fdd1e7SBram Moolenaar bopts2! KeyError 1078*92fdd1e7SBram Moolenaar bopts3! KeyError 1079*92fdd1e7SBram Moolenaar G: 0 1080*92fdd1e7SBram Moolenaar W: 1:1 2:1 3:0 4:0 1081*92fdd1e7SBram Moolenaar B: 1:1 2:1 3:0 4:0 1082*92fdd1e7SBram Moolenaar del wopts3! ValueError 1083*92fdd1e7SBram Moolenaar del bopts3! KeyError 1084*92fdd1e7SBram Moolenaar G: 0 1085*92fdd1e7SBram Moolenaar W: 1:1 2:1 3:0 4:0 1086*92fdd1e7SBram Moolenaar B: 1:1 2:1 3:0 4:0 1087*92fdd1e7SBram Moolenaar >>> numberwidth 1088*92fdd1e7SBram Moolenaar g/w/b:0/1/0 1089*92fdd1e7SBram Moolenaar g/w/b (in):0/1/0 1090*92fdd1e7SBram Moolenaar p/gopts1! KeyError 1091*92fdd1e7SBram Moolenaar inv: -100! KeyError 1092*92fdd1e7SBram Moolenaar gopts1! KeyError 1093*92fdd1e7SBram Moolenaar p/wopts1: 4 1094*92fdd1e7SBram Moolenaar inv: -100! error 1095*92fdd1e7SBram Moolenaar p/bopts1! KeyError 1096*92fdd1e7SBram Moolenaar inv: -100! KeyError 1097*92fdd1e7SBram Moolenaar bopts1! KeyError 1098*92fdd1e7SBram Moolenaar bopts2! KeyError 1099*92fdd1e7SBram Moolenaar bopts3! KeyError 1100*92fdd1e7SBram Moolenaar G: 4 1101*92fdd1e7SBram Moolenaar W: 1:3 2:5 3:2 4:4 1102*92fdd1e7SBram Moolenaar B: 1:3 2:5 3:2 4:4 1103*92fdd1e7SBram Moolenaar del wopts3! ValueError 1104*92fdd1e7SBram Moolenaar del bopts3! KeyError 1105*92fdd1e7SBram Moolenaar G: 4 1106*92fdd1e7SBram Moolenaar W: 1:3 2:5 3:2 4:4 1107*92fdd1e7SBram Moolenaar B: 1:3 2:5 3:2 4:4 1108*92fdd1e7SBram Moolenaar >>> colorcolumn 1109*92fdd1e7SBram Moolenaar g/w/b:0/1/0 1110*92fdd1e7SBram Moolenaar g/w/b (in):0/1/0 1111*92fdd1e7SBram Moolenaar p/gopts1! KeyError 1112*92fdd1e7SBram Moolenaar inv: 'abc4'! KeyError 1113*92fdd1e7SBram Moolenaar gopts1! KeyError 1114*92fdd1e7SBram Moolenaar p/wopts1: '' 1115*92fdd1e7SBram Moolenaar inv: 'abc4'! error 1116*92fdd1e7SBram Moolenaar p/bopts1! KeyError 1117*92fdd1e7SBram Moolenaar inv: 'abc4'! KeyError 1118*92fdd1e7SBram Moolenaar bopts1! KeyError 1119*92fdd1e7SBram Moolenaar bopts2! KeyError 1120*92fdd1e7SBram Moolenaar bopts3! KeyError 1121*92fdd1e7SBram Moolenaar G: '' 1122*92fdd1e7SBram Moolenaar W: 1:'+2' 2:'+3' 3:'+1' 4:'' 1123*92fdd1e7SBram Moolenaar B: 1:'+2' 2:'+3' 3:'+1' 4:'' 1124*92fdd1e7SBram Moolenaar del wopts3! ValueError 1125*92fdd1e7SBram Moolenaar del bopts3! KeyError 1126*92fdd1e7SBram Moolenaar G: '' 1127*92fdd1e7SBram Moolenaar W: 1:'+2' 2:'+3' 3:'+1' 4:'' 1128*92fdd1e7SBram Moolenaar B: 1:'+2' 2:'+3' 3:'+1' 4:'' 1129*92fdd1e7SBram Moolenaar >>> statusline 1130*92fdd1e7SBram Moolenaar g/w/b:1/1/0 1131*92fdd1e7SBram Moolenaar g/w/b (in):1/1/0 1132*92fdd1e7SBram Moolenaar p/gopts1: '' 1133*92fdd1e7SBram Moolenaar inv: 0! TypeError 1134*92fdd1e7SBram Moolenaar p/wopts1: None 1135*92fdd1e7SBram Moolenaar inv: 0! TypeError 1136*92fdd1e7SBram Moolenaar p/bopts1! KeyError 1137*92fdd1e7SBram Moolenaar inv: 0! KeyError 1138*92fdd1e7SBram Moolenaar bopts1! KeyError 1139*92fdd1e7SBram Moolenaar bopts2! KeyError 1140*92fdd1e7SBram Moolenaar bopts3! KeyError 1141*92fdd1e7SBram Moolenaar G: '1' 1142*92fdd1e7SBram Moolenaar W: 1:'2' 2:'4' 3:'1' 4:'1' 1143*92fdd1e7SBram Moolenaar B: 1:'2' 2:'4' 3:'1' 4:'1' 1144*92fdd1e7SBram Moolenaar del bopts3! KeyError 1145*92fdd1e7SBram Moolenaar G: '1' 1146*92fdd1e7SBram Moolenaar W: 1:'2' 2:'1' 3:'1' 4:'1' 1147*92fdd1e7SBram Moolenaar B: 1:'2' 2:'1' 3:'1' 4:'1' 1148*92fdd1e7SBram Moolenaar >>> autoindent 1149*92fdd1e7SBram Moolenaar g/w/b:0/0/1 1150*92fdd1e7SBram Moolenaar g/w/b (in):0/0/1 1151*92fdd1e7SBram Moolenaar p/gopts1! KeyError 1152*92fdd1e7SBram Moolenaar inv: 2! KeyError 1153*92fdd1e7SBram Moolenaar gopts1! KeyError 1154*92fdd1e7SBram Moolenaar p/wopts1! KeyError 1155*92fdd1e7SBram Moolenaar inv: 2! KeyError 1156*92fdd1e7SBram Moolenaar wopts1! KeyError 1157*92fdd1e7SBram Moolenaar wopts2! KeyError 1158*92fdd1e7SBram Moolenaar wopts3! KeyError 1159*92fdd1e7SBram Moolenaar p/bopts1: False 1160*92fdd1e7SBram Moolenaar G: 0 1161*92fdd1e7SBram Moolenaar W: 1:0 2:1 3:0 4:1 1162*92fdd1e7SBram Moolenaar B: 1:0 2:1 3:0 4:1 1163*92fdd1e7SBram Moolenaar del wopts3! KeyError 1164*92fdd1e7SBram Moolenaar del bopts3! ValueError 1165*92fdd1e7SBram Moolenaar G: 0 1166*92fdd1e7SBram Moolenaar W: 1:0 2:1 3:0 4:1 1167*92fdd1e7SBram Moolenaar B: 1:0 2:1 3:0 4:1 1168*92fdd1e7SBram Moolenaar >>> shiftwidth 1169*92fdd1e7SBram Moolenaar g/w/b:0/0/1 1170*92fdd1e7SBram Moolenaar g/w/b (in):0/0/1 1171*92fdd1e7SBram Moolenaar p/gopts1! KeyError 1172*92fdd1e7SBram Moolenaar inv: 3! KeyError 1173*92fdd1e7SBram Moolenaar gopts1! KeyError 1174*92fdd1e7SBram Moolenaar p/wopts1! KeyError 1175*92fdd1e7SBram Moolenaar inv: 3! KeyError 1176*92fdd1e7SBram Moolenaar wopts1! KeyError 1177*92fdd1e7SBram Moolenaar wopts2! KeyError 1178*92fdd1e7SBram Moolenaar wopts3! KeyError 1179*92fdd1e7SBram Moolenaar p/bopts1: 8 1180*92fdd1e7SBram Moolenaar G: 8 1181*92fdd1e7SBram Moolenaar W: 1:0 2:2 3:8 4:1 1182*92fdd1e7SBram Moolenaar B: 1:0 2:2 3:8 4:1 1183*92fdd1e7SBram Moolenaar del wopts3! KeyError 1184*92fdd1e7SBram Moolenaar del bopts3! ValueError 1185*92fdd1e7SBram Moolenaar G: 8 1186*92fdd1e7SBram Moolenaar W: 1:0 2:2 3:8 4:1 1187*92fdd1e7SBram Moolenaar B: 1:0 2:2 3:8 4:1 1188*92fdd1e7SBram Moolenaar >>> omnifunc 1189*92fdd1e7SBram Moolenaar g/w/b:0/0/1 1190*92fdd1e7SBram Moolenaar g/w/b (in):0/0/1 1191*92fdd1e7SBram Moolenaar p/gopts1! KeyError 1192*92fdd1e7SBram Moolenaar inv: 1! KeyError 1193*92fdd1e7SBram Moolenaar gopts1! KeyError 1194*92fdd1e7SBram Moolenaar p/wopts1! KeyError 1195*92fdd1e7SBram Moolenaar inv: 1! KeyError 1196*92fdd1e7SBram Moolenaar wopts1! KeyError 1197*92fdd1e7SBram Moolenaar wopts2! KeyError 1198*92fdd1e7SBram Moolenaar wopts3! KeyError 1199*92fdd1e7SBram Moolenaar p/bopts1: '' 1200*92fdd1e7SBram Moolenaar inv: 1! TypeError 1201*92fdd1e7SBram Moolenaar G: '' 1202*92fdd1e7SBram Moolenaar W: 1:'A' 2:'B' 3:'' 4:'C' 1203*92fdd1e7SBram Moolenaar B: 1:'A' 2:'B' 3:'' 4:'C' 1204*92fdd1e7SBram Moolenaar del wopts3! KeyError 1205*92fdd1e7SBram Moolenaar del bopts3! ValueError 1206*92fdd1e7SBram Moolenaar G: '' 1207*92fdd1e7SBram Moolenaar W: 1:'A' 2:'B' 3:'' 4:'C' 1208*92fdd1e7SBram Moolenaar B: 1:'A' 2:'B' 3:'' 4:'C' 1209*92fdd1e7SBram Moolenaar >>> preserveindent 1210*92fdd1e7SBram Moolenaar g/w/b:0/0/1 1211*92fdd1e7SBram Moolenaar g/w/b (in):0/0/1 1212*92fdd1e7SBram Moolenaar p/gopts1! KeyError 1213*92fdd1e7SBram Moolenaar inv: 2! KeyError 1214*92fdd1e7SBram Moolenaar gopts1! KeyError 1215*92fdd1e7SBram Moolenaar p/wopts1! KeyError 1216*92fdd1e7SBram Moolenaar inv: 2! KeyError 1217*92fdd1e7SBram Moolenaar wopts1! KeyError 1218*92fdd1e7SBram Moolenaar wopts2! KeyError 1219*92fdd1e7SBram Moolenaar wopts3! KeyError 1220*92fdd1e7SBram Moolenaar p/bopts1: False 1221*92fdd1e7SBram Moolenaar G: 0 1222*92fdd1e7SBram Moolenaar W: 1:0 2:1 3:0 4:1 1223*92fdd1e7SBram Moolenaar B: 1:0 2:1 3:0 4:1 1224*92fdd1e7SBram Moolenaar del wopts3! KeyError 1225*92fdd1e7SBram Moolenaar del bopts3! ValueError 1226*92fdd1e7SBram Moolenaar G: 0 1227*92fdd1e7SBram Moolenaar W: 1:0 2:1 3:0 4:1 1228*92fdd1e7SBram Moolenaar B: 1:0 2:1 3:0 4:1 1229*92fdd1e7SBram Moolenaar >>> path 1230*92fdd1e7SBram Moolenaar g/w/b:1/0/1 1231*92fdd1e7SBram Moolenaar g/w/b (in):1/0/1 1232*92fdd1e7SBram Moolenaar p/gopts1: '.,..,,' 1233*92fdd1e7SBram Moolenaar inv: 0! TypeError 1234*92fdd1e7SBram Moolenaar p/wopts1! KeyError 1235*92fdd1e7SBram Moolenaar inv: 0! KeyError 1236*92fdd1e7SBram Moolenaar wopts1! KeyError 1237*92fdd1e7SBram Moolenaar wopts2! KeyError 1238*92fdd1e7SBram Moolenaar wopts3! KeyError 1239*92fdd1e7SBram Moolenaar p/bopts1: None 1240*92fdd1e7SBram Moolenaar inv: 0! TypeError 1241*92fdd1e7SBram Moolenaar G: '.,,' 1242*92fdd1e7SBram Moolenaar W: 1:'.,,' 2:',,' 3:'.,,' 4:'.' 1243*92fdd1e7SBram Moolenaar B: 1:'.,,' 2:',,' 3:'.,,' 4:'.' 1244*92fdd1e7SBram Moolenaar del wopts3! KeyError 1245*92fdd1e7SBram Moolenaar G: '.,,' 1246*92fdd1e7SBram Moolenaar W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,' 1247*92fdd1e7SBram Moolenaar B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,' 1248*92fdd1e7SBram Moolenaar END 1249*92fdd1e7SBram Moolenaar 1250*92fdd1e7SBram Moolenaar call assert_equal(expected, g:res) 1251*92fdd1e7SBram Moolenaar unlet g:res 1252*92fdd1e7SBram Moolenaarendfunc 1253*92fdd1e7SBram Moolenaar 1254*92fdd1e7SBram Moolenaar" Test for vim.buffer object 1255*92fdd1e7SBram Moolenaarfunc Test_python_buffer() 1256*92fdd1e7SBram Moolenaar new 1257*92fdd1e7SBram Moolenaar call setline(1, "Hello\nWorld") 1258*92fdd1e7SBram Moolenaar call assert_fails("let x = pyeval('vim.current.buffer[0]')", 'E859:') 1259*92fdd1e7SBram Moolenaar %bw! 1260*92fdd1e7SBram Moolenaar 1261*92fdd1e7SBram Moolenaar edit Xfile1 1262*92fdd1e7SBram Moolenaar let bnr1 = bufnr() 1263*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 1264*92fdd1e7SBram Moolenaar vnew Xfile2 1265*92fdd1e7SBram Moolenaar let bnr2 = bufnr() 1266*92fdd1e7SBram Moolenaar call setline(1, ['First line', 'Second line', 'Third line']) 1267*92fdd1e7SBram Moolenaar py b = vim.current.buffer 1268*92fdd1e7SBram Moolenaar wincmd w 1269*92fdd1e7SBram Moolenaar 1270*92fdd1e7SBram Moolenaar " Tests BufferAppend and BufferItem 1271*92fdd1e7SBram Moolenaar py cb.append(b[0]) 1272*92fdd1e7SBram Moolenaar call assert_equal(['First line'], getbufline(bnr1, 2)) 1273*92fdd1e7SBram Moolenaar %d 1274*92fdd1e7SBram Moolenaar 1275*92fdd1e7SBram Moolenaar " Tests BufferSlice and BufferAssSlice 1276*92fdd1e7SBram Moolenaar py cb.append('abc5') # Will be overwritten 1277*92fdd1e7SBram Moolenaar py cb[-1:] = b[:-2] 1278*92fdd1e7SBram Moolenaar call assert_equal(['First line'], getbufline(bnr1, 2)) 1279*92fdd1e7SBram Moolenaar %d 1280*92fdd1e7SBram Moolenaar 1281*92fdd1e7SBram Moolenaar " Test BufferLength and BufferAssSlice 1282*92fdd1e7SBram Moolenaar py cb.append('def') # Will not be overwritten 1283*92fdd1e7SBram Moolenaar py cb[len(cb):] = b[:] 1284*92fdd1e7SBram Moolenaar call assert_equal(['def', 'First line', 'Second line', 'Third line'], 1285*92fdd1e7SBram Moolenaar \ getbufline(bnr1, 2, '$')) 1286*92fdd1e7SBram Moolenaar %d 1287*92fdd1e7SBram Moolenaar 1288*92fdd1e7SBram Moolenaar " Test BufferAssItem and BufferMark 1289*92fdd1e7SBram Moolenaar call setbufline(bnr1, 1, ['one', 'two', 'three']) 1290*92fdd1e7SBram Moolenaar call cursor(1, 3) 1291*92fdd1e7SBram Moolenaar normal ma 1292*92fdd1e7SBram Moolenaar py cb.append('ghi') # Will be overwritten 1293*92fdd1e7SBram Moolenaar py cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1])) 1294*92fdd1e7SBram Moolenaar call assert_equal(['(3, 2)'], getbufline(bnr1, 4)) 1295*92fdd1e7SBram Moolenaar %d 1296*92fdd1e7SBram Moolenaar 1297*92fdd1e7SBram Moolenaar " Test BufferRepr 1298*92fdd1e7SBram Moolenaar py cb.append(repr(cb) + repr(b)) 1299*92fdd1e7SBram Moolenaar call assert_equal(['<buffer Xfile1><buffer Xfile2>'], getbufline(bnr1, 2)) 1300*92fdd1e7SBram Moolenaar %d 1301*92fdd1e7SBram Moolenaar 1302*92fdd1e7SBram Moolenaar " Modify foreign buffer 1303*92fdd1e7SBram Moolenaar py << trim EOF 1304*92fdd1e7SBram Moolenaar b.append('foo') 1305*92fdd1e7SBram Moolenaar b[0]='bar' 1306*92fdd1e7SBram Moolenaar b[0:0]=['baz'] 1307*92fdd1e7SBram Moolenaar vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number) 1308*92fdd1e7SBram Moolenaar EOF 1309*92fdd1e7SBram Moolenaar call assert_equal(['baz', 'bar', 'Second line', 'Third line', 'foo'], 1310*92fdd1e7SBram Moolenaar \ getbufline(bnr2, 1, '$')) 1311*92fdd1e7SBram Moolenaar %d 1312*92fdd1e7SBram Moolenaar 1313*92fdd1e7SBram Moolenaar " Test assigning to name property 1314*92fdd1e7SBram Moolenaar augroup BUFS 1315*92fdd1e7SBram Moolenaar autocmd BufFilePost * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")')) 1316*92fdd1e7SBram Moolenaar autocmd BufFilePre * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")')) 1317*92fdd1e7SBram Moolenaar augroup END 1318*92fdd1e7SBram Moolenaar py << trim EOF 1319*92fdd1e7SBram Moolenaar import os 1320*92fdd1e7SBram Moolenaar old_name = cb.name 1321*92fdd1e7SBram Moolenaar cb.name = 'foo' 1322*92fdd1e7SBram Moolenaar cb.append(cb.name[-11:].replace(os.path.sep, '/')) 1323*92fdd1e7SBram Moolenaar b.name = 'bar' 1324*92fdd1e7SBram Moolenaar cb.append(b.name[-11:].replace(os.path.sep, '/')) 1325*92fdd1e7SBram Moolenaar cb.name = old_name 1326*92fdd1e7SBram Moolenaar cb.append(cb.name[-14:].replace(os.path.sep, '/')) 1327*92fdd1e7SBram Moolenaar del old_name 1328*92fdd1e7SBram Moolenaar EOF 1329*92fdd1e7SBram Moolenaar call assert_equal([bnr1 .. ':BufFilePre:' .. bnr1, 1330*92fdd1e7SBram Moolenaar \ bnr1 .. ':BufFilePost:' .. bnr1, 1331*92fdd1e7SBram Moolenaar \ 'testdir/foo', 1332*92fdd1e7SBram Moolenaar \ bnr2 .. ':BufFilePre:' .. bnr2, 1333*92fdd1e7SBram Moolenaar \ bnr2 .. ':BufFilePost:' .. bnr2, 1334*92fdd1e7SBram Moolenaar \ 'testdir/bar', 1335*92fdd1e7SBram Moolenaar \ bnr1 .. ':BufFilePre:' .. bnr1, 1336*92fdd1e7SBram Moolenaar \ bnr1 .. ':BufFilePost:' .. bnr1, 1337*92fdd1e7SBram Moolenaar \ 'testdir/Xfile1'], getbufline(bnr1, 2, '$')) 1338*92fdd1e7SBram Moolenaar %d 1339*92fdd1e7SBram Moolenaar 1340*92fdd1e7SBram Moolenaar " Test CheckBuffer 1341*92fdd1e7SBram Moolenaar py << trim EOF 1342*92fdd1e7SBram Moolenaar for _b in vim.buffers: 1343*92fdd1e7SBram Moolenaar if _b is not cb: 1344*92fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(_b.number)) 1345*92fdd1e7SBram Moolenaar del _b 1346*92fdd1e7SBram Moolenaar cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid))) 1347*92fdd1e7SBram Moolenaar EOF 1348*92fdd1e7SBram Moolenaar call assert_equal('valid: b:False, cb:True', getline(2)) 1349*92fdd1e7SBram Moolenaar %d 1350*92fdd1e7SBram Moolenaar 1351*92fdd1e7SBram Moolenaar py << trim EOF 1352*92fdd1e7SBram Moolenaar for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")', 'b.name = "!"'): 1353*92fdd1e7SBram Moolenaar try: 1354*92fdd1e7SBram Moolenaar exec(expr) 1355*92fdd1e7SBram Moolenaar except vim.error: 1356*92fdd1e7SBram Moolenaar pass 1357*92fdd1e7SBram Moolenaar else: 1358*92fdd1e7SBram Moolenaar # Usually a SEGV here 1359*92fdd1e7SBram Moolenaar # Should not happen in any case 1360*92fdd1e7SBram Moolenaar cb.append('No exception for ' + expr) 1361*92fdd1e7SBram Moolenaar vim.command('cd .') 1362*92fdd1e7SBram Moolenaar del b 1363*92fdd1e7SBram Moolenaar EOF 1364*92fdd1e7SBram Moolenaar call assert_equal([''], getline(1, '$')) 1365*92fdd1e7SBram Moolenaar 1366*92fdd1e7SBram Moolenaar augroup BUFS 1367*92fdd1e7SBram Moolenaar autocmd! 1368*92fdd1e7SBram Moolenaar augroup END 1369*92fdd1e7SBram Moolenaar augroup! BUFS 1370*92fdd1e7SBram Moolenaar %bw! 1371*92fdd1e7SBram Moolenaarendfunc 1372*92fdd1e7SBram Moolenaar 1373*92fdd1e7SBram Moolenaar" Test vim.buffers object 1374*92fdd1e7SBram Moolenaarfunc Test_python_buffers() 1375*92fdd1e7SBram Moolenaar %bw! 1376*92fdd1e7SBram Moolenaar edit Xfile 1377*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 1378*92fdd1e7SBram Moolenaar set hidden 1379*92fdd1e7SBram Moolenaar edit a 1380*92fdd1e7SBram Moolenaar buffer # 1381*92fdd1e7SBram Moolenaar edit b 1382*92fdd1e7SBram Moolenaar buffer # 1383*92fdd1e7SBram Moolenaar edit c 1384*92fdd1e7SBram Moolenaar buffer # 1385*92fdd1e7SBram Moolenaar py << trim EOF 1386*92fdd1e7SBram Moolenaar try: 1387*92fdd1e7SBram Moolenaar from __builtin__ import next 1388*92fdd1e7SBram Moolenaar except ImportError: 1389*92fdd1e7SBram Moolenaar next = lambda o: o.next() 1390*92fdd1e7SBram Moolenaar # Check GCing iterator that was not fully exhausted 1391*92fdd1e7SBram Moolenaar i = iter(vim.buffers) 1392*92fdd1e7SBram Moolenaar cb.append('i:' + str(next(i))) 1393*92fdd1e7SBram Moolenaar # and also check creating more than one iterator at a time 1394*92fdd1e7SBram Moolenaar i2 = iter(vim.buffers) 1395*92fdd1e7SBram Moolenaar cb.append('i2:' + str(next(i2))) 1396*92fdd1e7SBram Moolenaar cb.append('i:' + str(next(i))) 1397*92fdd1e7SBram Moolenaar # The following should trigger GC and not cause any problems 1398*92fdd1e7SBram Moolenaar del i 1399*92fdd1e7SBram Moolenaar del i2 1400*92fdd1e7SBram Moolenaar i3 = iter(vim.buffers) 1401*92fdd1e7SBram Moolenaar cb.append('i3:' + str(next(i3))) 1402*92fdd1e7SBram Moolenaar del i3 1403*92fdd1e7SBram Moolenaar EOF 1404*92fdd1e7SBram Moolenaar call assert_equal(['i:<buffer Xfile>', 1405*92fdd1e7SBram Moolenaar \ 'i2:<buffer Xfile>', 'i:<buffer a>', 'i3:<buffer Xfile>'], 1406*92fdd1e7SBram Moolenaar \ getline(2, '$')) 1407*92fdd1e7SBram Moolenaar %d 1408*92fdd1e7SBram Moolenaar 1409*92fdd1e7SBram Moolenaar py << trim EOF 1410*92fdd1e7SBram Moolenaar prevnum = 0 1411*92fdd1e7SBram Moolenaar for b in vim.buffers: 1412*92fdd1e7SBram Moolenaar # Check buffer order 1413*92fdd1e7SBram Moolenaar if prevnum >= b.number: 1414*92fdd1e7SBram Moolenaar cb.append('!!! Buffer numbers not in strictly ascending order') 1415*92fdd1e7SBram Moolenaar # Check indexing: vim.buffers[number].number == number 1416*92fdd1e7SBram Moolenaar cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + \ 1417*92fdd1e7SBram Moolenaar '=' + repr(b)) 1418*92fdd1e7SBram Moolenaar prevnum = b.number 1419*92fdd1e7SBram Moolenaar del prevnum 1420*92fdd1e7SBram Moolenaar 1421*92fdd1e7SBram Moolenaar cb.append(str(len(vim.buffers))) 1422*92fdd1e7SBram Moolenaar EOF 1423*92fdd1e7SBram Moolenaar call assert_equal([bufnr('Xfile') .. ':<buffer Xfile>=<buffer Xfile>', 1424*92fdd1e7SBram Moolenaar \ bufnr('a') .. ':<buffer a>=<buffer a>', 1425*92fdd1e7SBram Moolenaar \ bufnr('b') .. ':<buffer b>=<buffer b>', 1426*92fdd1e7SBram Moolenaar \ bufnr('c') .. ':<buffer c>=<buffer c>', '4'], getline(2, '$')) 1427*92fdd1e7SBram Moolenaar %d 1428*92fdd1e7SBram Moolenaar 1429*92fdd1e7SBram Moolenaar py << trim EOF 1430*92fdd1e7SBram Moolenaar bnums = list(map(lambda b: b.number, vim.buffers))[1:] 1431*92fdd1e7SBram Moolenaar 1432*92fdd1e7SBram Moolenaar # Test wiping out buffer with existing iterator 1433*92fdd1e7SBram Moolenaar i4 = iter(vim.buffers) 1434*92fdd1e7SBram Moolenaar cb.append('i4:' + str(next(i4))) 1435*92fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(bnums.pop(0))) 1436*92fdd1e7SBram Moolenaar try: 1437*92fdd1e7SBram Moolenaar next(i4) 1438*92fdd1e7SBram Moolenaar except vim.error: 1439*92fdd1e7SBram Moolenaar pass 1440*92fdd1e7SBram Moolenaar else: 1441*92fdd1e7SBram Moolenaar cb.append('!!!! No vim.error') 1442*92fdd1e7SBram Moolenaar i4 = iter(vim.buffers) 1443*92fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(bnums.pop(-1))) 1444*92fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(bnums.pop(-1))) 1445*92fdd1e7SBram Moolenaar cb.append('i4:' + str(next(i4))) 1446*92fdd1e7SBram Moolenaar try: 1447*92fdd1e7SBram Moolenaar next(i4) 1448*92fdd1e7SBram Moolenaar except StopIteration: 1449*92fdd1e7SBram Moolenaar cb.append('StopIteration') 1450*92fdd1e7SBram Moolenaar del i4 1451*92fdd1e7SBram Moolenaar del bnums 1452*92fdd1e7SBram Moolenaar EOF 1453*92fdd1e7SBram Moolenaar call assert_equal(['i4:<buffer Xfile>', 1454*92fdd1e7SBram Moolenaar \ 'i4:<buffer Xfile>', 'StopIteration'], getline(2, '$')) 1455*92fdd1e7SBram Moolenaar %bw! 1456*92fdd1e7SBram Moolenaarendfunc 1457*92fdd1e7SBram Moolenaar 1458*92fdd1e7SBram Moolenaar" Test vim.{tabpage,window}list and vim.{tabpage,window} objects 1459*92fdd1e7SBram Moolenaarfunc Test_python_tabpage_window() 1460*92fdd1e7SBram Moolenaar %bw 1461*92fdd1e7SBram Moolenaar edit Xfile 1462*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 1463*92fdd1e7SBram Moolenaar tabnew 0 1464*92fdd1e7SBram Moolenaar tabnew 1 1465*92fdd1e7SBram Moolenaar vnew a.1 1466*92fdd1e7SBram Moolenaar tabnew 2 1467*92fdd1e7SBram Moolenaar vnew a.2 1468*92fdd1e7SBram Moolenaar vnew b.2 1469*92fdd1e7SBram Moolenaar vnew c.2 1470*92fdd1e7SBram Moolenaar 1471*92fdd1e7SBram Moolenaar py << trim EOF 1472*92fdd1e7SBram Moolenaar cb.append('Number of tabs: ' + str(len(vim.tabpages))) 1473*92fdd1e7SBram Moolenaar cb.append('Current tab pages:') 1474*92fdd1e7SBram Moolenaar def W(w): 1475*92fdd1e7SBram Moolenaar if repr(w).find('(unknown)') != -1: 1476*92fdd1e7SBram Moolenaar return '<window object (unknown)>' 1477*92fdd1e7SBram Moolenaar else: 1478*92fdd1e7SBram Moolenaar return repr(w) 1479*92fdd1e7SBram Moolenaar 1480*92fdd1e7SBram Moolenaar start = len(cb) 1481*92fdd1e7SBram Moolenaar 1482*92fdd1e7SBram Moolenaar def Cursor(w): 1483*92fdd1e7SBram Moolenaar if w.buffer is cb: 1484*92fdd1e7SBram Moolenaar return repr((start - w.cursor[0], w.cursor[1])) 1485*92fdd1e7SBram Moolenaar else: 1486*92fdd1e7SBram Moolenaar return repr(w.cursor) 1487*92fdd1e7SBram Moolenaar 1488*92fdd1e7SBram Moolenaar for t in vim.tabpages: 1489*92fdd1e7SBram Moolenaar cb.append(' ' + repr(t) + '(' + str(t.number) + ')' + ': ' + \ 1490*92fdd1e7SBram Moolenaar str(len(t.windows)) + ' windows, current is ' + W(t.window)) 1491*92fdd1e7SBram Moolenaar cb.append(' Windows:') 1492*92fdd1e7SBram Moolenaar for w in t.windows: 1493*92fdd1e7SBram Moolenaar cb.append(' ' + W(w) + '(' + str(w.number) + ')' + \ 1494*92fdd1e7SBram Moolenaar ': displays buffer ' + repr(w.buffer) + \ 1495*92fdd1e7SBram Moolenaar '; cursor is at ' + Cursor(w)) 1496*92fdd1e7SBram Moolenaar # Other values depend on the size of the terminal, so they are checked 1497*92fdd1e7SBram Moolenaar # partly: 1498*92fdd1e7SBram Moolenaar for attr in ('height', 'row', 'width', 'col'): 1499*92fdd1e7SBram Moolenaar try: 1500*92fdd1e7SBram Moolenaar aval = getattr(w, attr) 1501*92fdd1e7SBram Moolenaar if type(aval) is not long: 1502*92fdd1e7SBram Moolenaar raise TypeError 1503*92fdd1e7SBram Moolenaar if aval < 0: 1504*92fdd1e7SBram Moolenaar raise ValueError 1505*92fdd1e7SBram Moolenaar except Exception: 1506*92fdd1e7SBram Moolenaar cb.append('!!!!!! Error while getting attribute ' + attr + \ 1507*92fdd1e7SBram Moolenaar ': ' + sys.exc_type.__name__) 1508*92fdd1e7SBram Moolenaar del aval 1509*92fdd1e7SBram Moolenaar del attr 1510*92fdd1e7SBram Moolenaar w.cursor = (len(w.buffer), 0) 1511*92fdd1e7SBram Moolenaar del W 1512*92fdd1e7SBram Moolenaar del Cursor 1513*92fdd1e7SBram Moolenaar cb.append('Number of windows in current tab page: ' + \ 1514*92fdd1e7SBram Moolenaar str(len(vim.windows))) 1515*92fdd1e7SBram Moolenaar if list(vim.windows) != list(vim.current.tabpage.windows): 1516*92fdd1e7SBram Moolenaar cb.append('!!!!!! Windows differ') 1517*92fdd1e7SBram Moolenaar EOF 1518*92fdd1e7SBram Moolenaar 1519*92fdd1e7SBram Moolenaar let expected =<< trim END 1520*92fdd1e7SBram Moolenaar Number of tabs: 4 1521*92fdd1e7SBram Moolenaar Current tab pages: 1522*92fdd1e7SBram Moolenaar <tabpage 0>(1): 1 windows, current is <window object (unknown)> 1523*92fdd1e7SBram Moolenaar Windows: 1524*92fdd1e7SBram Moolenaar <window object (unknown)>(1): displays buffer <buffer Xfile>; cursor is at (2, 0) 1525*92fdd1e7SBram Moolenaar <tabpage 1>(2): 1 windows, current is <window object (unknown)> 1526*92fdd1e7SBram Moolenaar Windows: 1527*92fdd1e7SBram Moolenaar <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0) 1528*92fdd1e7SBram Moolenaar <tabpage 2>(3): 2 windows, current is <window object (unknown)> 1529*92fdd1e7SBram Moolenaar Windows: 1530*92fdd1e7SBram Moolenaar <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0) 1531*92fdd1e7SBram Moolenaar <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0) 1532*92fdd1e7SBram Moolenaar <tabpage 3>(4): 4 windows, current is <window 0> 1533*92fdd1e7SBram Moolenaar Windows: 1534*92fdd1e7SBram Moolenaar <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0) 1535*92fdd1e7SBram Moolenaar <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0) 1536*92fdd1e7SBram Moolenaar <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0) 1537*92fdd1e7SBram Moolenaar <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0) 1538*92fdd1e7SBram Moolenaar Number of windows in current tab page: 4 1539*92fdd1e7SBram Moolenaar END 1540*92fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 1541*92fdd1e7SBram Moolenaar %bw! 1542*92fdd1e7SBram Moolenaarendfunc 1543*92fdd1e7SBram Moolenaar 1544*92fdd1e7SBram Moolenaar" Test vim.current 1545*92fdd1e7SBram Moolenaarfunc Test_python_vim_current() 1546*92fdd1e7SBram Moolenaar %bw 1547*92fdd1e7SBram Moolenaar edit Xfile 1548*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 1549*92fdd1e7SBram Moolenaar tabnew 0 1550*92fdd1e7SBram Moolenaar tabnew 1 1551*92fdd1e7SBram Moolenaar vnew a.1 1552*92fdd1e7SBram Moolenaar tabnew 2 1553*92fdd1e7SBram Moolenaar vnew a.2 1554*92fdd1e7SBram Moolenaar vnew b.2 1555*92fdd1e7SBram Moolenaar vnew c.2 1556*92fdd1e7SBram Moolenaar 1557*92fdd1e7SBram Moolenaar py << trim EOF 1558*92fdd1e7SBram Moolenaar def H(o): 1559*92fdd1e7SBram Moolenaar return repr(o) 1560*92fdd1e7SBram Moolenaar cb.append('Current tab page: ' + repr(vim.current.tabpage)) 1561*92fdd1e7SBram Moolenaar cb.append('Current window: ' + repr(vim.current.window) + ': ' + \ 1562*92fdd1e7SBram Moolenaar H(vim.current.window) + ' is ' + H(vim.current.tabpage.window)) 1563*92fdd1e7SBram Moolenaar cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + \ 1564*92fdd1e7SBram Moolenaar H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ \ 1565*92fdd1e7SBram Moolenaar ' is ' + H(vim.current.tabpage.window.buffer)) 1566*92fdd1e7SBram Moolenaar del H 1567*92fdd1e7SBram Moolenaar EOF 1568*92fdd1e7SBram Moolenaar let expected =<< trim END 1569*92fdd1e7SBram Moolenaar Current tab page: <tabpage 3> 1570*92fdd1e7SBram Moolenaar Current window: <window 0>: <window 0> is <window 0> 1571*92fdd1e7SBram Moolenaar Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2> 1572*92fdd1e7SBram Moolenaar END 1573*92fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 1574*92fdd1e7SBram Moolenaar call deletebufline(bufnr('Xfile'), 1, '$') 1575*92fdd1e7SBram Moolenaar 1576*92fdd1e7SBram Moolenaar " Assigning: fails 1577*92fdd1e7SBram Moolenaar py << trim EOF 1578*92fdd1e7SBram Moolenaar try: 1579*92fdd1e7SBram Moolenaar vim.current.window = vim.tabpages[0].window 1580*92fdd1e7SBram Moolenaar except ValueError: 1581*92fdd1e7SBram Moolenaar cb.append('ValueError at assigning foreign tab window') 1582*92fdd1e7SBram Moolenaar 1583*92fdd1e7SBram Moolenaar for attr in ('window', 'tabpage', 'buffer'): 1584*92fdd1e7SBram Moolenaar try: 1585*92fdd1e7SBram Moolenaar setattr(vim.current, attr, None) 1586*92fdd1e7SBram Moolenaar except TypeError: 1587*92fdd1e7SBram Moolenaar cb.append('Type error at assigning None to vim.current.' + attr) 1588*92fdd1e7SBram Moolenaar del attr 1589*92fdd1e7SBram Moolenaar EOF 1590*92fdd1e7SBram Moolenaar 1591*92fdd1e7SBram Moolenaar let expected =<< trim END 1592*92fdd1e7SBram Moolenaar ValueError at assigning foreign tab window 1593*92fdd1e7SBram Moolenaar Type error at assigning None to vim.current.window 1594*92fdd1e7SBram Moolenaar Type error at assigning None to vim.current.tabpage 1595*92fdd1e7SBram Moolenaar Type error at assigning None to vim.current.buffer 1596*92fdd1e7SBram Moolenaar END 1597*92fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 1598*92fdd1e7SBram Moolenaar call deletebufline(bufnr('Xfile'), 1, '$') 1599*92fdd1e7SBram Moolenaar 1600*92fdd1e7SBram Moolenaar call setbufline(bufnr('Xfile'), 1, 'python interface') 1601*92fdd1e7SBram Moolenaar py << trim EOF 1602*92fdd1e7SBram Moolenaar # Assigning: success 1603*92fdd1e7SBram Moolenaar vim.current.tabpage = vim.tabpages[-2] 1604*92fdd1e7SBram Moolenaar vim.current.buffer = cb 1605*92fdd1e7SBram Moolenaar vim.current.window = vim.windows[0] 1606*92fdd1e7SBram Moolenaar vim.current.window.cursor = (len(vim.current.buffer), 0) 1607*92fdd1e7SBram Moolenaar cb.append('Current tab page: ' + repr(vim.current.tabpage)) 1608*92fdd1e7SBram Moolenaar cb.append('Current window: ' + repr(vim.current.window)) 1609*92fdd1e7SBram Moolenaar cb.append('Current buffer: ' + repr(vim.current.buffer)) 1610*92fdd1e7SBram Moolenaar cb.append('Current line: ' + repr(vim.current.line)) 1611*92fdd1e7SBram Moolenaar EOF 1612*92fdd1e7SBram Moolenaar 1613*92fdd1e7SBram Moolenaar let expected =<< trim END 1614*92fdd1e7SBram Moolenaar Current tab page: <tabpage 2> 1615*92fdd1e7SBram Moolenaar Current window: <window 0> 1616*92fdd1e7SBram Moolenaar Current buffer: <buffer Xfile> 1617*92fdd1e7SBram Moolenaar Current line: 'python interface' 1618*92fdd1e7SBram Moolenaar END 1619*92fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 1620*92fdd1e7SBram Moolenaar call deletebufline(bufnr('Xfile'), 1, '$') 1621*92fdd1e7SBram Moolenaar 1622*92fdd1e7SBram Moolenaar py << trim EOF 1623*92fdd1e7SBram Moolenaar ws = list(vim.windows) 1624*92fdd1e7SBram Moolenaar ts = list(vim.tabpages) 1625*92fdd1e7SBram Moolenaar for b in vim.buffers: 1626*92fdd1e7SBram Moolenaar if b is not cb: 1627*92fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(b.number)) 1628*92fdd1e7SBram Moolenaar del b 1629*92fdd1e7SBram Moolenaar cb.append('w.valid: ' + repr([w.valid for w in ws])) 1630*92fdd1e7SBram Moolenaar cb.append('t.valid: ' + repr([t.valid for t in ts])) 1631*92fdd1e7SBram Moolenaar del w 1632*92fdd1e7SBram Moolenaar del t 1633*92fdd1e7SBram Moolenaar del ts 1634*92fdd1e7SBram Moolenaar del ws 1635*92fdd1e7SBram Moolenaar EOF 1636*92fdd1e7SBram Moolenaar let expected =<< trim END 1637*92fdd1e7SBram Moolenaar w.valid: [True, False] 1638*92fdd1e7SBram Moolenaar t.valid: [True, False, True, False] 1639*92fdd1e7SBram Moolenaar END 1640*92fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 1641*92fdd1e7SBram Moolenaar %bw! 1642*92fdd1e7SBram Moolenaarendfunc 1643*92fdd1e7SBram Moolenaar 1644*92fdd1e7SBram Moolenaar" Test types 1645*92fdd1e7SBram Moolenaarfunc Test_python_types() 1646*92fdd1e7SBram Moolenaar %d 1647*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 1648*92fdd1e7SBram Moolenaar py << trim EOF 1649*92fdd1e7SBram Moolenaar for expr, attr in ( 1650*92fdd1e7SBram Moolenaar ('vim.vars', 'Dictionary'), 1651*92fdd1e7SBram Moolenaar ('vim.options', 'Options'), 1652*92fdd1e7SBram Moolenaar ('vim.bindeval("{}")', 'Dictionary'), 1653*92fdd1e7SBram Moolenaar ('vim.bindeval("[]")', 'List'), 1654*92fdd1e7SBram Moolenaar ('vim.bindeval("function(\'tr\')")', 'Function'), 1655*92fdd1e7SBram Moolenaar ('vim.current.buffer', 'Buffer'), 1656*92fdd1e7SBram Moolenaar ('vim.current.range', 'Range'), 1657*92fdd1e7SBram Moolenaar ('vim.current.window', 'Window'), 1658*92fdd1e7SBram Moolenaar ('vim.current.tabpage', 'TabPage'), 1659*92fdd1e7SBram Moolenaar ): 1660*92fdd1e7SBram Moolenaar cb.append(expr + ':' + attr + ':' + \ 1661*92fdd1e7SBram Moolenaar repr(type(eval(expr)) is getattr(vim, attr))) 1662*92fdd1e7SBram Moolenaar del expr 1663*92fdd1e7SBram Moolenaar del attr 1664*92fdd1e7SBram Moolenaar EOF 1665*92fdd1e7SBram Moolenaar let expected =<< trim END 1666*92fdd1e7SBram Moolenaar vim.vars:Dictionary:True 1667*92fdd1e7SBram Moolenaar vim.options:Options:True 1668*92fdd1e7SBram Moolenaar vim.bindeval("{}"):Dictionary:True 1669*92fdd1e7SBram Moolenaar vim.bindeval("[]"):List:True 1670*92fdd1e7SBram Moolenaar vim.bindeval("function('tr')"):Function:True 1671*92fdd1e7SBram Moolenaar vim.current.buffer:Buffer:True 1672*92fdd1e7SBram Moolenaar vim.current.range:Range:True 1673*92fdd1e7SBram Moolenaar vim.current.window:Window:True 1674*92fdd1e7SBram Moolenaar vim.current.tabpage:TabPage:True 1675*92fdd1e7SBram Moolenaar END 1676*92fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 1677*92fdd1e7SBram Moolenaarendfunc 1678*92fdd1e7SBram Moolenaar 1679*92fdd1e7SBram Moolenaar" Test __dir__() method 1680*92fdd1e7SBram Moolenaarfunc Test_python_dir_method() 1681*92fdd1e7SBram Moolenaar %d 1682*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 1683*92fdd1e7SBram Moolenaar py << trim EOF 1684*92fdd1e7SBram Moolenaar for name, o in ( 1685*92fdd1e7SBram Moolenaar ('current', vim.current), 1686*92fdd1e7SBram Moolenaar ('buffer', vim.current.buffer), 1687*92fdd1e7SBram Moolenaar ('window', vim.current.window), 1688*92fdd1e7SBram Moolenaar ('tabpage', vim.current.tabpage), 1689*92fdd1e7SBram Moolenaar ('range', vim.current.range), 1690*92fdd1e7SBram Moolenaar ('dictionary', vim.bindeval('{}')), 1691*92fdd1e7SBram Moolenaar ('list', vim.bindeval('[]')), 1692*92fdd1e7SBram Moolenaar ('function', vim.bindeval('function("tr")')), 1693*92fdd1e7SBram Moolenaar ('output', sys.stdout), 1694*92fdd1e7SBram Moolenaar ): 1695*92fdd1e7SBram Moolenaar cb.append(name + ':' + ','.join(dir(o))) 1696*92fdd1e7SBram Moolenaar del name 1697*92fdd1e7SBram Moolenaar del o 1698*92fdd1e7SBram Moolenaar EOF 1699*92fdd1e7SBram Moolenaar let expected =<< trim END 1700*92fdd1e7SBram Moolenaar current:__dir__,__members__,buffer,line,range,tabpage,window 1701*92fdd1e7SBram Moolenaar buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars 1702*92fdd1e7SBram Moolenaar window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width 1703*92fdd1e7SBram Moolenaar tabpage:__dir__,__members__,number,valid,vars,window,windows 1704*92fdd1e7SBram Moolenaar range:__dir__,__members__,append,end,start 1705*92fdd1e7SBram Moolenaar dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values 1706*92fdd1e7SBram Moolenaar list:__dir__,__members__,extend,locked 1707*92fdd1e7SBram Moolenaar function:__dir__,__members__,args,auto_rebind,self,softspace 1708*92fdd1e7SBram Moolenaar output:__dir__,__members__,close,closed,flush,isatty,readable,seekable,softspace,writable,write,writelines 1709*92fdd1e7SBram Moolenaar END 1710*92fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 1711*92fdd1e7SBram Moolenaarendfunc 1712*92fdd1e7SBram Moolenaar 1713*92fdd1e7SBram Moolenaar" Test vim.*.__new__ 1714*92fdd1e7SBram Moolenaarfunc Test_python_new() 1715*92fdd1e7SBram Moolenaar call assert_equal({}, pyeval('vim.Dictionary({})')) 1716*92fdd1e7SBram Moolenaar call assert_equal({'a': 1}, pyeval('vim.Dictionary(a=1)')) 1717*92fdd1e7SBram Moolenaar call assert_equal({'a': 1}, pyeval('vim.Dictionary(((''a'', 1),))')) 1718*92fdd1e7SBram Moolenaar call assert_equal([], pyeval('vim.List()')) 1719*92fdd1e7SBram Moolenaar call assert_equal(['a', 'b', 'c', '7'], pyeval('vim.List(iter(''abc7''))')) 1720*92fdd1e7SBram Moolenaar call assert_equal(function('tr'), pyeval('vim.Function(''tr'')')) 1721*92fdd1e7SBram Moolenaar call assert_equal(function('tr', [123, 3, 4]), 1722*92fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[123, 3, 4])')) 1723*92fdd1e7SBram Moolenaar call assert_equal(function('tr'), pyeval('vim.Function(''tr'', args=[])')) 1724*92fdd1e7SBram Moolenaar call assert_equal(function('tr', {}), 1725*92fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', self={})')) 1726*92fdd1e7SBram Moolenaar call assert_equal(function('tr', [123, 3, 4], {}), 1727*92fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[123, 3, 4], self={})')) 1728*92fdd1e7SBram Moolenaar call assert_equal(function('tr'), 1729*92fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', auto_rebind=False)')) 1730*92fdd1e7SBram Moolenaar call assert_equal(function('tr', [123, 3, 4]), 1731*92fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[123, 3, 4], auto_rebind=False)')) 1732*92fdd1e7SBram Moolenaar call assert_equal(function('tr'), 1733*92fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[], auto_rebind=False)')) 1734*92fdd1e7SBram Moolenaar call assert_equal(function('tr', {}), 1735*92fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', self={}, auto_rebind=False)')) 1736*92fdd1e7SBram Moolenaar call assert_equal(function('tr', [123, 3, 4], {}), 1737*92fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[123, 3, 4], self={}, auto_rebind=False)')) 1738*92fdd1e7SBram Moolenaarendfunc 1739*92fdd1e7SBram Moolenaar 1740*92fdd1e7SBram Moolenaar" Test vim.Function 1741*92fdd1e7SBram Moolenaarfunc Test_python_vim_func() 1742*92fdd1e7SBram Moolenaar function Args(...) 1743*92fdd1e7SBram Moolenaar return a:000 1744*92fdd1e7SBram Moolenaar endfunction 1745*92fdd1e7SBram Moolenaar 1746*92fdd1e7SBram Moolenaar function SelfArgs(...) dict 1747*92fdd1e7SBram Moolenaar return [a:000, self] 1748*92fdd1e7SBram Moolenaar endfunction 1749*92fdd1e7SBram Moolenaar 1750*92fdd1e7SBram Moolenaar " The following four lines should not crash 1751*92fdd1e7SBram Moolenaar let Pt = function('tr', [[]], {'l': []}) 1752*92fdd1e7SBram Moolenaar py Pt = vim.bindeval('Pt') 1753*92fdd1e7SBram Moolenaar unlet Pt 1754*92fdd1e7SBram Moolenaar py del Pt 1755*92fdd1e7SBram Moolenaar 1756*92fdd1e7SBram Moolenaar %bw! 1757*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 1758*92fdd1e7SBram Moolenaar py << trim EOF 1759*92fdd1e7SBram Moolenaar def ecall(out_prefix, func, *args, **kwargs): 1760*92fdd1e7SBram Moolenaar line = out_prefix + ': ' 1761*92fdd1e7SBram Moolenaar try: 1762*92fdd1e7SBram Moolenaar ret = func(*args, **kwargs) 1763*92fdd1e7SBram Moolenaar except Exception: 1764*92fdd1e7SBram Moolenaar line += '!exception: ' + emsg(sys.exc_info()) 1765*92fdd1e7SBram Moolenaar else: 1766*92fdd1e7SBram Moolenaar line += '!result: ' + vim.Function('string')(ret) 1767*92fdd1e7SBram Moolenaar cb.append(line) 1768*92fdd1e7SBram Moolenaar a = vim.Function('Args') 1769*92fdd1e7SBram Moolenaar pa1 = vim.Function('Args', args=['abcArgsPA1']) 1770*92fdd1e7SBram Moolenaar pa2 = vim.Function('Args', args=[]) 1771*92fdd1e7SBram Moolenaar pa3 = vim.Function('Args', args=['abcArgsPA3'], self={'abcSelfPA3': 'abcSelfPA3Val'}) 1772*92fdd1e7SBram Moolenaar pa4 = vim.Function('Args', self={'abcSelfPA4': 'abcSelfPA4Val'}) 1773*92fdd1e7SBram Moolenaar cb.append('a: ' + repr(a)) 1774*92fdd1e7SBram Moolenaar cb.append('pa1: ' + repr(pa1)) 1775*92fdd1e7SBram Moolenaar cb.append('pa2: ' + repr(pa2)) 1776*92fdd1e7SBram Moolenaar cb.append('pa3: ' + repr(pa3)) 1777*92fdd1e7SBram Moolenaar cb.append('pa4: ' + repr(pa4)) 1778*92fdd1e7SBram Moolenaar sa = vim.Function('SelfArgs') 1779*92fdd1e7SBram Moolenaar psa1 = vim.Function('SelfArgs', args=['abcArgsPSA1']) 1780*92fdd1e7SBram Moolenaar psa2 = vim.Function('SelfArgs', args=[]) 1781*92fdd1e7SBram Moolenaar psa3 = vim.Function('SelfArgs', args=['abcArgsPSA3'], self={'abcSelfPSA3': 'abcSelfPSA3Val'}) 1782*92fdd1e7SBram Moolenaar psa4 = vim.Function('SelfArgs', self={'abcSelfPSA4': 'abcSelfPSA4Val'}) 1783*92fdd1e7SBram Moolenaar psa5 = vim.Function('SelfArgs', self={'abcSelfPSA5': 'abcSelfPSA5Val'}, auto_rebind=0) 1784*92fdd1e7SBram Moolenaar psa6 = vim.Function('SelfArgs', args=['abcArgsPSA6'], self={'abcSelfPSA6': 'abcSelfPSA6Val'}, auto_rebind=()) 1785*92fdd1e7SBram Moolenaar psa7 = vim.Function('SelfArgs', args=['abcArgsPSA7'], auto_rebind=[]) 1786*92fdd1e7SBram Moolenaar psa8 = vim.Function('SelfArgs', auto_rebind=False) 1787*92fdd1e7SBram Moolenaar psa9 = vim.Function('SelfArgs', self={'abcSelfPSA9': 'abcSelfPSA9Val'}, auto_rebind=True) 1788*92fdd1e7SBram Moolenaar psaA = vim.Function('SelfArgs', args=['abcArgsPSAA'], self={'abcSelfPSAA': 'abcSelfPSAAVal'}, auto_rebind=1) 1789*92fdd1e7SBram Moolenaar psaB = vim.Function('SelfArgs', args=['abcArgsPSAB'], auto_rebind={'abcARPSAB': 'abcARPSABVal'}) 1790*92fdd1e7SBram Moolenaar psaC = vim.Function('SelfArgs', auto_rebind=['abcARPSAC']) 1791*92fdd1e7SBram Moolenaar cb.append('sa: ' + repr(sa)) 1792*92fdd1e7SBram Moolenaar cb.append('psa1: ' + repr(psa1)) 1793*92fdd1e7SBram Moolenaar cb.append('psa2: ' + repr(psa2)) 1794*92fdd1e7SBram Moolenaar cb.append('psa3: ' + repr(psa3)) 1795*92fdd1e7SBram Moolenaar cb.append('psa4: ' + repr(psa4)) 1796*92fdd1e7SBram Moolenaar cb.append('psa5: ' + repr(psa5)) 1797*92fdd1e7SBram Moolenaar cb.append('psa6: ' + repr(psa6)) 1798*92fdd1e7SBram Moolenaar cb.append('psa7: ' + repr(psa7)) 1799*92fdd1e7SBram Moolenaar cb.append('psa8: ' + repr(psa8)) 1800*92fdd1e7SBram Moolenaar cb.append('psa9: ' + repr(psa9)) 1801*92fdd1e7SBram Moolenaar cb.append('psaA: ' + repr(psaA)) 1802*92fdd1e7SBram Moolenaar cb.append('psaB: ' + repr(psaB)) 1803*92fdd1e7SBram Moolenaar cb.append('psaC: ' + repr(psaC)) 1804*92fdd1e7SBram Moolenaar 1805*92fdd1e7SBram Moolenaar psar = vim.Function('SelfArgs', args=[{'abcArgsPSAr': 'abcArgsPSArVal'}], self={'abcSelfPSAr': 'abcSelfPSArVal'}) 1806*92fdd1e7SBram Moolenaar psar.args[0]['abcArgsPSAr2'] = [psar.self, psar.args[0]] 1807*92fdd1e7SBram Moolenaar psar.self['rec'] = psar 1808*92fdd1e7SBram Moolenaar psar.self['self'] = psar.self 1809*92fdd1e7SBram Moolenaar psar.self['args'] = psar.args 1810*92fdd1e7SBram Moolenaar 1811*92fdd1e7SBram Moolenaar try: 1812*92fdd1e7SBram Moolenaar cb.append('psar: ' + repr(psar)) 1813*92fdd1e7SBram Moolenaar except Exception: 1814*92fdd1e7SBram Moolenaar cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info())) 1815*92fdd1e7SBram Moolenaar EOF 1816*92fdd1e7SBram Moolenaar 1817*92fdd1e7SBram Moolenaar let expected =<< trim END 1818*92fdd1e7SBram Moolenaar a: <vim.Function 'Args'> 1819*92fdd1e7SBram Moolenaar pa1: <vim.Function 'Args', args=['abcArgsPA1']> 1820*92fdd1e7SBram Moolenaar pa2: <vim.Function 'Args'> 1821*92fdd1e7SBram Moolenaar pa3: <vim.Function 'Args', args=['abcArgsPA3'], self={'abcSelfPA3': 'abcSelfPA3Val'}> 1822*92fdd1e7SBram Moolenaar pa4: <vim.Function 'Args', self={'abcSelfPA4': 'abcSelfPA4Val'}> 1823*92fdd1e7SBram Moolenaar sa: <vim.Function 'SelfArgs'> 1824*92fdd1e7SBram Moolenaar psa1: <vim.Function 'SelfArgs', args=['abcArgsPSA1']> 1825*92fdd1e7SBram Moolenaar psa2: <vim.Function 'SelfArgs'> 1826*92fdd1e7SBram Moolenaar psa3: <vim.Function 'SelfArgs', args=['abcArgsPSA3'], self={'abcSelfPSA3': 'abcSelfPSA3Val'}> 1827*92fdd1e7SBram Moolenaar psa4: <vim.Function 'SelfArgs', self={'abcSelfPSA4': 'abcSelfPSA4Val'}> 1828*92fdd1e7SBram Moolenaar psa5: <vim.Function 'SelfArgs', self={'abcSelfPSA5': 'abcSelfPSA5Val'}> 1829*92fdd1e7SBram Moolenaar psa6: <vim.Function 'SelfArgs', args=['abcArgsPSA6'], self={'abcSelfPSA6': 'abcSelfPSA6Val'}> 1830*92fdd1e7SBram Moolenaar psa7: <vim.Function 'SelfArgs', args=['abcArgsPSA7']> 1831*92fdd1e7SBram Moolenaar psa8: <vim.Function 'SelfArgs'> 1832*92fdd1e7SBram Moolenaar psa9: <vim.Function 'SelfArgs', self={'abcSelfPSA9': 'abcSelfPSA9Val'}, auto_rebind=True> 1833*92fdd1e7SBram Moolenaar psaA: <vim.Function 'SelfArgs', args=['abcArgsPSAA'], self={'abcSelfPSAA': 'abcSelfPSAAVal'}, auto_rebind=True> 1834*92fdd1e7SBram Moolenaar psaB: <vim.Function 'SelfArgs', args=['abcArgsPSAB']> 1835*92fdd1e7SBram Moolenaar psaC: <vim.Function 'SelfArgs'> 1836*92fdd1e7SBram Moolenaar psar: <vim.Function 'SelfArgs', args=[{'abcArgsPSAr2': [{'rec': function('SelfArgs', [{...}], {...}), 'self': {...}, 'abcSelfPSAr': 'abcSelfPSArVal', 'args': [{...}]}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}], self={'rec': function('SelfArgs', [{'abcArgsPSAr2': [{...}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}], {...}), 'self': {...}, 'abcSelfPSAr': 'abcSelfPSArVal', 'args': [{'abcArgsPSAr2': [{...}, {...}], 'abcArgsPSAr': 'abcArgsPSArVal'}]}> 1837*92fdd1e7SBram Moolenaar END 1838*92fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 1839*92fdd1e7SBram Moolenaar %d 1840*92fdd1e7SBram Moolenaar 1841*92fdd1e7SBram Moolenaar call assert_equal(function('Args'), pyeval('a')) 1842*92fdd1e7SBram Moolenaar call assert_equal(function('Args', ['abcArgsPA1']), pyeval('pa1')) 1843*92fdd1e7SBram Moolenaar call assert_equal(function('Args'), pyeval('pa2')) 1844*92fdd1e7SBram Moolenaar call assert_equal(function('Args', ['abcArgsPA3'], {'abcSelfPA3': 'abcSelfPA3Val'}), pyeval('pa3')) 1845*92fdd1e7SBram Moolenaar call assert_equal(function('Args', {'abcSelfPA4': 'abcSelfPA4Val'}), pyeval('pa4')) 1846*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs'), pyeval('sa')) 1847*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSA1']), pyeval('psa1')) 1848*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs'), pyeval('psa2')) 1849*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}), pyeval('psa3')) 1850*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', {'abcSelfPSA4': 'abcSelfPSA4Val'}), pyeval('psa4')) 1851*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', {'abcSelfPSA5': 'abcSelfPSA5Val'}), pyeval('psa5')) 1852*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'}), pyeval('psa6')) 1853*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSA7']), pyeval('psa7')) 1854*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs'), pyeval('psa8')) 1855*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'}), pyeval('psa9')) 1856*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'}), pyeval('psaA')) 1857*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSAB']), pyeval('psaB')) 1858*92fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs'), pyeval('psaC')) 1859*92fdd1e7SBram Moolenaar 1860*92fdd1e7SBram Moolenaar let res = [] 1861*92fdd1e7SBram Moolenaar for v in ['sa', 'psa1', 'psa2', 'psa3', 'psa4', 'psa5', 'psa6', 'psa7', 1862*92fdd1e7SBram Moolenaar \ 'psa8', 'psa9', 'psaA', 'psaB', 'psaC'] 1863*92fdd1e7SBram Moolenaar let d = {'f': pyeval(v)} 1864*92fdd1e7SBram Moolenaar call add(res, 'd.' .. v .. '(): ' .. string(d.f())) 1865*92fdd1e7SBram Moolenaar endfor 1866*92fdd1e7SBram Moolenaar 1867*92fdd1e7SBram Moolenaar let expected =<< trim END 1868*92fdd1e7SBram Moolenaar d.sa(): [[], {'f': function('SelfArgs')}] 1869*92fdd1e7SBram Moolenaar d.psa1(): [['abcArgsPSA1'], {'f': function('SelfArgs', ['abcArgsPSA1'])}] 1870*92fdd1e7SBram Moolenaar d.psa2(): [[], {'f': function('SelfArgs')}] 1871*92fdd1e7SBram Moolenaar d.psa3(): [['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}] 1872*92fdd1e7SBram Moolenaar d.psa4(): [[], {'abcSelfPSA4': 'abcSelfPSA4Val'}] 1873*92fdd1e7SBram Moolenaar d.psa5(): [[], {'abcSelfPSA5': 'abcSelfPSA5Val'}] 1874*92fdd1e7SBram Moolenaar d.psa6(): [['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'}] 1875*92fdd1e7SBram Moolenaar d.psa7(): [['abcArgsPSA7'], {'f': function('SelfArgs', ['abcArgsPSA7'])}] 1876*92fdd1e7SBram Moolenaar d.psa8(): [[], {'f': function('SelfArgs')}] 1877*92fdd1e7SBram Moolenaar d.psa9(): [[], {'f': function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'})}] 1878*92fdd1e7SBram Moolenaar d.psaA(): [['abcArgsPSAA'], {'f': function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'})}] 1879*92fdd1e7SBram Moolenaar d.psaB(): [['abcArgsPSAB'], {'f': function('SelfArgs', ['abcArgsPSAB'])}] 1880*92fdd1e7SBram Moolenaar d.psaC(): [[], {'f': function('SelfArgs')}] 1881*92fdd1e7SBram Moolenaar END 1882*92fdd1e7SBram Moolenaar call assert_equal(expected, res) 1883*92fdd1e7SBram Moolenaar 1884*92fdd1e7SBram Moolenaar py ecall('a()', a, ) 1885*92fdd1e7SBram Moolenaar py ecall('pa1()', pa1, ) 1886*92fdd1e7SBram Moolenaar py ecall('pa2()', pa2, ) 1887*92fdd1e7SBram Moolenaar py ecall('pa3()', pa3, ) 1888*92fdd1e7SBram Moolenaar py ecall('pa4()', pa4, ) 1889*92fdd1e7SBram Moolenaar py ecall('sa()', sa, ) 1890*92fdd1e7SBram Moolenaar py ecall('psa1()', psa1, ) 1891*92fdd1e7SBram Moolenaar py ecall('psa2()', psa2, ) 1892*92fdd1e7SBram Moolenaar py ecall('psa3()', psa3, ) 1893*92fdd1e7SBram Moolenaar py ecall('psa4()', psa4, ) 1894*92fdd1e7SBram Moolenaar 1895*92fdd1e7SBram Moolenaar py ecall('a(42, 43)', a, 42, 43) 1896*92fdd1e7SBram Moolenaar py ecall('pa1(42, 43)', pa1, 42, 43) 1897*92fdd1e7SBram Moolenaar py ecall('pa2(42, 43)', pa2, 42, 43) 1898*92fdd1e7SBram Moolenaar py ecall('pa3(42, 43)', pa3, 42, 43) 1899*92fdd1e7SBram Moolenaar py ecall('pa4(42, 43)', pa4, 42, 43) 1900*92fdd1e7SBram Moolenaar py ecall('sa(42, 43)', sa, 42, 43) 1901*92fdd1e7SBram Moolenaar py ecall('psa1(42, 43)', psa1, 42, 43) 1902*92fdd1e7SBram Moolenaar py ecall('psa2(42, 43)', psa2, 42, 43) 1903*92fdd1e7SBram Moolenaar py ecall('psa3(42, 43)', psa3, 42, 43) 1904*92fdd1e7SBram Moolenaar py ecall('psa4(42, 43)', psa4, 42, 43) 1905*92fdd1e7SBram Moolenaar 1906*92fdd1e7SBram Moolenaar py ecall('a(42, self={"20": 1})', a, 42, self={'20': 1}) 1907*92fdd1e7SBram Moolenaar py ecall('pa1(42, self={"20": 1})', pa1, 42, self={'20': 1}) 1908*92fdd1e7SBram Moolenaar py ecall('pa2(42, self={"20": 1})', pa2, 42, self={'20': 1}) 1909*92fdd1e7SBram Moolenaar py ecall('pa3(42, self={"20": 1})', pa3, 42, self={'20': 1}) 1910*92fdd1e7SBram Moolenaar py ecall('pa4(42, self={"20": 1})', pa4, 42, self={'20': 1}) 1911*92fdd1e7SBram Moolenaar py ecall('sa(42, self={"20": 1})', sa, 42, self={'20': 1}) 1912*92fdd1e7SBram Moolenaar py ecall('psa1(42, self={"20": 1})', psa1, 42, self={'20': 1}) 1913*92fdd1e7SBram Moolenaar py ecall('psa2(42, self={"20": 1})', psa2, 42, self={'20': 1}) 1914*92fdd1e7SBram Moolenaar py ecall('psa3(42, self={"20": 1})', psa3, 42, self={'20': 1}) 1915*92fdd1e7SBram Moolenaar py ecall('psa4(42, self={"20": 1})', psa4, 42, self={'20': 1}) 1916*92fdd1e7SBram Moolenaar 1917*92fdd1e7SBram Moolenaar py ecall('a(self={"20": 1})', a, self={'20': 1}) 1918*92fdd1e7SBram Moolenaar py ecall('pa1(self={"20": 1})', pa1, self={'20': 1}) 1919*92fdd1e7SBram Moolenaar py ecall('pa2(self={"20": 1})', pa2, self={'20': 1}) 1920*92fdd1e7SBram Moolenaar py ecall('pa3(self={"20": 1})', pa3, self={'20': 1}) 1921*92fdd1e7SBram Moolenaar py ecall('pa4(self={"20": 1})', pa4, self={'20': 1}) 1922*92fdd1e7SBram Moolenaar py ecall('sa(self={"20": 1})', sa, self={'20': 1}) 1923*92fdd1e7SBram Moolenaar py ecall('psa1(self={"20": 1})', psa1, self={'20': 1}) 1924*92fdd1e7SBram Moolenaar py ecall('psa2(self={"20": 1})', psa2, self={'20': 1}) 1925*92fdd1e7SBram Moolenaar py ecall('psa3(self={"20": 1})', psa3, self={'20': 1}) 1926*92fdd1e7SBram Moolenaar py ecall('psa4(self={"20": 1})', psa4, self={'20': 1}) 1927*92fdd1e7SBram Moolenaar 1928*92fdd1e7SBram Moolenaar py << trim EOF 1929*92fdd1e7SBram Moolenaar def s(v): 1930*92fdd1e7SBram Moolenaar if v is None: 1931*92fdd1e7SBram Moolenaar return repr(v) 1932*92fdd1e7SBram Moolenaar else: 1933*92fdd1e7SBram Moolenaar return vim.Function('string')(v) 1934*92fdd1e7SBram Moolenaar 1935*92fdd1e7SBram Moolenaar cb.append('a.args: ' + s(a.args)) 1936*92fdd1e7SBram Moolenaar cb.append('pa1.args: ' + s(pa1.args)) 1937*92fdd1e7SBram Moolenaar cb.append('pa2.args: ' + s(pa2.args)) 1938*92fdd1e7SBram Moolenaar cb.append('pa3.args: ' + s(pa3.args)) 1939*92fdd1e7SBram Moolenaar cb.append('pa4.args: ' + s(pa4.args)) 1940*92fdd1e7SBram Moolenaar cb.append('sa.args: ' + s(sa.args)) 1941*92fdd1e7SBram Moolenaar cb.append('psa1.args: ' + s(psa1.args)) 1942*92fdd1e7SBram Moolenaar cb.append('psa2.args: ' + s(psa2.args)) 1943*92fdd1e7SBram Moolenaar cb.append('psa3.args: ' + s(psa3.args)) 1944*92fdd1e7SBram Moolenaar cb.append('psa4.args: ' + s(psa4.args)) 1945*92fdd1e7SBram Moolenaar 1946*92fdd1e7SBram Moolenaar cb.append('a.self: ' + s(a.self)) 1947*92fdd1e7SBram Moolenaar cb.append('pa1.self: ' + s(pa1.self)) 1948*92fdd1e7SBram Moolenaar cb.append('pa2.self: ' + s(pa2.self)) 1949*92fdd1e7SBram Moolenaar cb.append('pa3.self: ' + s(pa3.self)) 1950*92fdd1e7SBram Moolenaar cb.append('pa4.self: ' + s(pa4.self)) 1951*92fdd1e7SBram Moolenaar cb.append('sa.self: ' + s(sa.self)) 1952*92fdd1e7SBram Moolenaar cb.append('psa1.self: ' + s(psa1.self)) 1953*92fdd1e7SBram Moolenaar cb.append('psa2.self: ' + s(psa2.self)) 1954*92fdd1e7SBram Moolenaar cb.append('psa3.self: ' + s(psa3.self)) 1955*92fdd1e7SBram Moolenaar cb.append('psa4.self: ' + s(psa4.self)) 1956*92fdd1e7SBram Moolenaar 1957*92fdd1e7SBram Moolenaar cb.append('a.name: ' + s(a.name)) 1958*92fdd1e7SBram Moolenaar cb.append('pa1.name: ' + s(pa1.name)) 1959*92fdd1e7SBram Moolenaar cb.append('pa2.name: ' + s(pa2.name)) 1960*92fdd1e7SBram Moolenaar cb.append('pa3.name: ' + s(pa3.name)) 1961*92fdd1e7SBram Moolenaar cb.append('pa4.name: ' + s(pa4.name)) 1962*92fdd1e7SBram Moolenaar cb.append('sa.name: ' + s(sa.name)) 1963*92fdd1e7SBram Moolenaar cb.append('psa1.name: ' + s(psa1.name)) 1964*92fdd1e7SBram Moolenaar cb.append('psa2.name: ' + s(psa2.name)) 1965*92fdd1e7SBram Moolenaar cb.append('psa3.name: ' + s(psa3.name)) 1966*92fdd1e7SBram Moolenaar cb.append('psa4.name: ' + s(psa4.name)) 1967*92fdd1e7SBram Moolenaar 1968*92fdd1e7SBram Moolenaar cb.append('a.auto_rebind: ' + s(a.auto_rebind)) 1969*92fdd1e7SBram Moolenaar cb.append('pa1.auto_rebind: ' + s(pa1.auto_rebind)) 1970*92fdd1e7SBram Moolenaar cb.append('pa2.auto_rebind: ' + s(pa2.auto_rebind)) 1971*92fdd1e7SBram Moolenaar cb.append('pa3.auto_rebind: ' + s(pa3.auto_rebind)) 1972*92fdd1e7SBram Moolenaar cb.append('pa4.auto_rebind: ' + s(pa4.auto_rebind)) 1973*92fdd1e7SBram Moolenaar cb.append('sa.auto_rebind: ' + s(sa.auto_rebind)) 1974*92fdd1e7SBram Moolenaar cb.append('psa1.auto_rebind: ' + s(psa1.auto_rebind)) 1975*92fdd1e7SBram Moolenaar cb.append('psa2.auto_rebind: ' + s(psa2.auto_rebind)) 1976*92fdd1e7SBram Moolenaar cb.append('psa3.auto_rebind: ' + s(psa3.auto_rebind)) 1977*92fdd1e7SBram Moolenaar cb.append('psa4.auto_rebind: ' + s(psa4.auto_rebind)) 1978*92fdd1e7SBram Moolenaar cb.append('psa5.auto_rebind: ' + s(psa5.auto_rebind)) 1979*92fdd1e7SBram Moolenaar cb.append('psa6.auto_rebind: ' + s(psa6.auto_rebind)) 1980*92fdd1e7SBram Moolenaar cb.append('psa7.auto_rebind: ' + s(psa7.auto_rebind)) 1981*92fdd1e7SBram Moolenaar cb.append('psa8.auto_rebind: ' + s(psa8.auto_rebind)) 1982*92fdd1e7SBram Moolenaar cb.append('psa9.auto_rebind: ' + s(psa9.auto_rebind)) 1983*92fdd1e7SBram Moolenaar cb.append('psaA.auto_rebind: ' + s(psaA.auto_rebind)) 1984*92fdd1e7SBram Moolenaar cb.append('psaB.auto_rebind: ' + s(psaB.auto_rebind)) 1985*92fdd1e7SBram Moolenaar cb.append('psaC.auto_rebind: ' + s(psaC.auto_rebind)) 1986*92fdd1e7SBram Moolenaar 1987*92fdd1e7SBram Moolenaar del s 1988*92fdd1e7SBram Moolenaar 1989*92fdd1e7SBram Moolenaar del a 1990*92fdd1e7SBram Moolenaar del pa1 1991*92fdd1e7SBram Moolenaar del pa2 1992*92fdd1e7SBram Moolenaar del pa3 1993*92fdd1e7SBram Moolenaar del pa4 1994*92fdd1e7SBram Moolenaar del sa 1995*92fdd1e7SBram Moolenaar del psa1 1996*92fdd1e7SBram Moolenaar del psa2 1997*92fdd1e7SBram Moolenaar del psa3 1998*92fdd1e7SBram Moolenaar del psa4 1999*92fdd1e7SBram Moolenaar del psa5 2000*92fdd1e7SBram Moolenaar del psa6 2001*92fdd1e7SBram Moolenaar del psa7 2002*92fdd1e7SBram Moolenaar del psa8 2003*92fdd1e7SBram Moolenaar del psa9 2004*92fdd1e7SBram Moolenaar del psaA 2005*92fdd1e7SBram Moolenaar del psaB 2006*92fdd1e7SBram Moolenaar del psaC 2007*92fdd1e7SBram Moolenaar del psar 2008*92fdd1e7SBram Moolenaar 2009*92fdd1e7SBram Moolenaar del ecall 2010*92fdd1e7SBram Moolenaar EOF 2011*92fdd1e7SBram Moolenaar 2012*92fdd1e7SBram Moolenaar let expected =<< trim END 2013*92fdd1e7SBram Moolenaar a(): !result: [] 2014*92fdd1e7SBram Moolenaar pa1(): !result: ['abcArgsPA1'] 2015*92fdd1e7SBram Moolenaar pa2(): !result: [] 2016*92fdd1e7SBram Moolenaar pa3(): !result: ['abcArgsPA3'] 2017*92fdd1e7SBram Moolenaar pa4(): !result: [] 2018*92fdd1e7SBram Moolenaar sa(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 2019*92fdd1e7SBram Moolenaar psa1(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 2020*92fdd1e7SBram Moolenaar psa2(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 2021*92fdd1e7SBram Moolenaar psa3(): !result: [['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}] 2022*92fdd1e7SBram Moolenaar psa4(): !result: [[], {'abcSelfPSA4': 'abcSelfPSA4Val'}] 2023*92fdd1e7SBram Moolenaar a(42, 43): !result: [42, 43] 2024*92fdd1e7SBram Moolenaar pa1(42, 43): !result: ['abcArgsPA1', 42, 43] 2025*92fdd1e7SBram Moolenaar pa2(42, 43): !result: [42, 43] 2026*92fdd1e7SBram Moolenaar pa3(42, 43): !result: ['abcArgsPA3', 42, 43] 2027*92fdd1e7SBram Moolenaar pa4(42, 43): !result: [42, 43] 2028*92fdd1e7SBram Moolenaar sa(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 2029*92fdd1e7SBram Moolenaar psa1(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 2030*92fdd1e7SBram Moolenaar psa2(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 2031*92fdd1e7SBram Moolenaar psa3(42, 43): !result: [['abcArgsPSA3', 42, 43], {'abcSelfPSA3': 'abcSelfPSA3Val'}] 2032*92fdd1e7SBram Moolenaar psa4(42, 43): !result: [[42, 43], {'abcSelfPSA4': 'abcSelfPSA4Val'}] 2033*92fdd1e7SBram Moolenaar a(42, self={"20": 1}): !result: [42] 2034*92fdd1e7SBram Moolenaar pa1(42, self={"20": 1}): !result: ['abcArgsPA1', 42] 2035*92fdd1e7SBram Moolenaar pa2(42, self={"20": 1}): !result: [42] 2036*92fdd1e7SBram Moolenaar pa3(42, self={"20": 1}): !result: ['abcArgsPA3', 42] 2037*92fdd1e7SBram Moolenaar pa4(42, self={"20": 1}): !result: [42] 2038*92fdd1e7SBram Moolenaar sa(42, self={"20": 1}): !result: [[42], {'20': 1}] 2039*92fdd1e7SBram Moolenaar psa1(42, self={"20": 1}): !result: [['abcArgsPSA1', 42], {'20': 1}] 2040*92fdd1e7SBram Moolenaar psa2(42, self={"20": 1}): !result: [[42], {'20': 1}] 2041*92fdd1e7SBram Moolenaar psa3(42, self={"20": 1}): !result: [['abcArgsPSA3', 42], {'20': 1}] 2042*92fdd1e7SBram Moolenaar psa4(42, self={"20": 1}): !result: [[42], {'20': 1}] 2043*92fdd1e7SBram Moolenaar a(self={"20": 1}): !result: [] 2044*92fdd1e7SBram Moolenaar pa1(self={"20": 1}): !result: ['abcArgsPA1'] 2045*92fdd1e7SBram Moolenaar pa2(self={"20": 1}): !result: [] 2046*92fdd1e7SBram Moolenaar pa3(self={"20": 1}): !result: ['abcArgsPA3'] 2047*92fdd1e7SBram Moolenaar pa4(self={"20": 1}): !result: [] 2048*92fdd1e7SBram Moolenaar sa(self={"20": 1}): !result: [[], {'20': 1}] 2049*92fdd1e7SBram Moolenaar psa1(self={"20": 1}): !result: [['abcArgsPSA1'], {'20': 1}] 2050*92fdd1e7SBram Moolenaar psa2(self={"20": 1}): !result: [[], {'20': 1}] 2051*92fdd1e7SBram Moolenaar psa3(self={"20": 1}): !result: [['abcArgsPSA3'], {'20': 1}] 2052*92fdd1e7SBram Moolenaar psa4(self={"20": 1}): !result: [[], {'20': 1}] 2053*92fdd1e7SBram Moolenaar a.args: None 2054*92fdd1e7SBram Moolenaar pa1.args: ['abcArgsPA1'] 2055*92fdd1e7SBram Moolenaar pa2.args: None 2056*92fdd1e7SBram Moolenaar pa3.args: ['abcArgsPA3'] 2057*92fdd1e7SBram Moolenaar pa4.args: None 2058*92fdd1e7SBram Moolenaar sa.args: None 2059*92fdd1e7SBram Moolenaar psa1.args: ['abcArgsPSA1'] 2060*92fdd1e7SBram Moolenaar psa2.args: None 2061*92fdd1e7SBram Moolenaar psa3.args: ['abcArgsPSA3'] 2062*92fdd1e7SBram Moolenaar psa4.args: None 2063*92fdd1e7SBram Moolenaar a.self: None 2064*92fdd1e7SBram Moolenaar pa1.self: None 2065*92fdd1e7SBram Moolenaar pa2.self: None 2066*92fdd1e7SBram Moolenaar pa3.self: {'abcSelfPA3': 'abcSelfPA3Val'} 2067*92fdd1e7SBram Moolenaar pa4.self: {'abcSelfPA4': 'abcSelfPA4Val'} 2068*92fdd1e7SBram Moolenaar sa.self: None 2069*92fdd1e7SBram Moolenaar psa1.self: None 2070*92fdd1e7SBram Moolenaar psa2.self: None 2071*92fdd1e7SBram Moolenaar psa3.self: {'abcSelfPSA3': 'abcSelfPSA3Val'} 2072*92fdd1e7SBram Moolenaar psa4.self: {'abcSelfPSA4': 'abcSelfPSA4Val'} 2073*92fdd1e7SBram Moolenaar a.name: 'Args' 2074*92fdd1e7SBram Moolenaar pa1.name: 'Args' 2075*92fdd1e7SBram Moolenaar pa2.name: 'Args' 2076*92fdd1e7SBram Moolenaar pa3.name: 'Args' 2077*92fdd1e7SBram Moolenaar pa4.name: 'Args' 2078*92fdd1e7SBram Moolenaar sa.name: 'SelfArgs' 2079*92fdd1e7SBram Moolenaar psa1.name: 'SelfArgs' 2080*92fdd1e7SBram Moolenaar psa2.name: 'SelfArgs' 2081*92fdd1e7SBram Moolenaar psa3.name: 'SelfArgs' 2082*92fdd1e7SBram Moolenaar psa4.name: 'SelfArgs' 2083*92fdd1e7SBram Moolenaar a.auto_rebind: 1 2084*92fdd1e7SBram Moolenaar pa1.auto_rebind: 1 2085*92fdd1e7SBram Moolenaar pa2.auto_rebind: 1 2086*92fdd1e7SBram Moolenaar pa3.auto_rebind: 0 2087*92fdd1e7SBram Moolenaar pa4.auto_rebind: 0 2088*92fdd1e7SBram Moolenaar sa.auto_rebind: 1 2089*92fdd1e7SBram Moolenaar psa1.auto_rebind: 1 2090*92fdd1e7SBram Moolenaar psa2.auto_rebind: 1 2091*92fdd1e7SBram Moolenaar psa3.auto_rebind: 0 2092*92fdd1e7SBram Moolenaar psa4.auto_rebind: 0 2093*92fdd1e7SBram Moolenaar psa5.auto_rebind: 0 2094*92fdd1e7SBram Moolenaar psa6.auto_rebind: 0 2095*92fdd1e7SBram Moolenaar psa7.auto_rebind: 1 2096*92fdd1e7SBram Moolenaar psa8.auto_rebind: 1 2097*92fdd1e7SBram Moolenaar psa9.auto_rebind: 1 2098*92fdd1e7SBram Moolenaar psaA.auto_rebind: 1 2099*92fdd1e7SBram Moolenaar psaB.auto_rebind: 1 2100*92fdd1e7SBram Moolenaar psaC.auto_rebind: 1 2101*92fdd1e7SBram Moolenaar END 2102*92fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 2103*92fdd1e7SBram Moolenaar %bw! 2104*92fdd1e7SBram Moolenaarendfunc 2105*92fdd1e7SBram Moolenaar 2106*92fdd1e7SBram Moolenaar" Test stdout/stderr 2107*92fdd1e7SBram Moolenaarfunc Test_python_stdin_stderr() 2108*92fdd1e7SBram Moolenaar let caught_writeerr = 0 2109*92fdd1e7SBram Moolenaar let caught_writelineerr = 0 2110*92fdd1e7SBram Moolenaar redir => messages 2111*92fdd1e7SBram Moolenaar py sys.stdout.write('abc8') ; sys.stdout.write('def') 2112*92fdd1e7SBram Moolenaar try 2113*92fdd1e7SBram Moolenaar py sys.stderr.write('abc9') ; sys.stderr.write('def') 2114*92fdd1e7SBram Moolenaar catch /abc9def/ 2115*92fdd1e7SBram Moolenaar let caught_writeerr = 1 2116*92fdd1e7SBram Moolenaar endtry 2117*92fdd1e7SBram Moolenaar py sys.stdout.writelines(iter('abcA')) 2118*92fdd1e7SBram Moolenaar try 2119*92fdd1e7SBram Moolenaar py sys.stderr.writelines(iter('abcB')) 2120*92fdd1e7SBram Moolenaar catch /abcB/ 2121*92fdd1e7SBram Moolenaar let caught_writelineerr = 1 2122*92fdd1e7SBram Moolenaar endtry 2123*92fdd1e7SBram Moolenaar redir END 2124*92fdd1e7SBram Moolenaar call assert_equal("\nabc8def\nabcA", messages) 2125*92fdd1e7SBram Moolenaar call assert_equal(1, caught_writeerr) 2126*92fdd1e7SBram Moolenaar call assert_equal(1, caught_writelineerr) 2127*92fdd1e7SBram Moolenaarendfunc 2128*92fdd1e7SBram Moolenaar 2129*92fdd1e7SBram Moolenaar" Test subclassing 2130*92fdd1e7SBram Moolenaarfunc Test_python_subclass() 2131*92fdd1e7SBram Moolenaar new 2132*92fdd1e7SBram Moolenaar fun Put(...) 2133*92fdd1e7SBram Moolenaar return a:000 2134*92fdd1e7SBram Moolenaar endfun 2135*92fdd1e7SBram Moolenaar 2136*92fdd1e7SBram Moolenaar py << trim EOF 2137*92fdd1e7SBram Moolenaar class DupDict(vim.Dictionary): 2138*92fdd1e7SBram Moolenaar def __setitem__(self, key, value): 2139*92fdd1e7SBram Moolenaar super(DupDict, self).__setitem__(key, value) 2140*92fdd1e7SBram Moolenaar super(DupDict, self).__setitem__('dup_' + key, value) 2141*92fdd1e7SBram Moolenaar dd = DupDict() 2142*92fdd1e7SBram Moolenaar dd['a'] = 'b' 2143*92fdd1e7SBram Moolenaar 2144*92fdd1e7SBram Moolenaar class DupList(vim.List): 2145*92fdd1e7SBram Moolenaar def __getitem__(self, idx): 2146*92fdd1e7SBram Moolenaar return [super(DupList, self).__getitem__(idx)] * 2 2147*92fdd1e7SBram Moolenaar 2148*92fdd1e7SBram Moolenaar dl = DupList() 2149*92fdd1e7SBram Moolenaar dl2 = DupList(iter('abcC')) 2150*92fdd1e7SBram Moolenaar dl.extend(dl2[0]) 2151*92fdd1e7SBram Moolenaar 2152*92fdd1e7SBram Moolenaar class DupFun(vim.Function): 2153*92fdd1e7SBram Moolenaar def __call__(self, arg): 2154*92fdd1e7SBram Moolenaar return super(DupFun, self).__call__(arg, arg) 2155*92fdd1e7SBram Moolenaar 2156*92fdd1e7SBram Moolenaar df = DupFun('Put') 2157*92fdd1e7SBram Moolenaar EOF 2158*92fdd1e7SBram Moolenaar 2159*92fdd1e7SBram Moolenaar call assert_equal(['a', 'dup_a'], sort(keys(pyeval('dd')))) 2160*92fdd1e7SBram Moolenaar call assert_equal(['a', 'a'], pyeval('dl')) 2161*92fdd1e7SBram Moolenaar call assert_equal(['a', 'b', 'c', 'C'], pyeval('dl2')) 2162*92fdd1e7SBram Moolenaar call assert_equal([2, 2], pyeval('df(2)')) 2163*92fdd1e7SBram Moolenaar call assert_equal(1, pyeval('dl') is# pyeval('dl')) 2164*92fdd1e7SBram Moolenaar call assert_equal(1, pyeval('dd') is# pyeval('dd')) 2165*92fdd1e7SBram Moolenaar call assert_equal(function('Put'), pyeval('df')) 2166*92fdd1e7SBram Moolenaar delfunction Put 2167*92fdd1e7SBram Moolenaar py << trim EOF 2168*92fdd1e7SBram Moolenaar del DupDict 2169*92fdd1e7SBram Moolenaar del DupList 2170*92fdd1e7SBram Moolenaar del DupFun 2171*92fdd1e7SBram Moolenaar del dd 2172*92fdd1e7SBram Moolenaar del dl 2173*92fdd1e7SBram Moolenaar del dl2 2174*92fdd1e7SBram Moolenaar del df 2175*92fdd1e7SBram Moolenaar EOF 2176*92fdd1e7SBram Moolenaar close! 2177*92fdd1e7SBram Moolenaarendfunc 2178*92fdd1e7SBram Moolenaar 2179*92fdd1e7SBram Moolenaar" Test chdir 2180*92fdd1e7SBram Moolenaarfunc Test_python_chdir() 2181*92fdd1e7SBram Moolenaar new Xfile 2182*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 2183*92fdd1e7SBram Moolenaar py << trim EOF 2184*92fdd1e7SBram Moolenaar import os 2185*92fdd1e7SBram Moolenaar fnamemodify = vim.Function('fnamemodify') 2186*92fdd1e7SBram Moolenaar cb.append(fnamemodify('.', ':p:h:t')) 2187*92fdd1e7SBram Moolenaar cb.append(vim.eval('@%')) 2188*92fdd1e7SBram Moolenaar os.chdir('..') 2189*92fdd1e7SBram Moolenaar path = fnamemodify('.', ':p:h:t') 2190*92fdd1e7SBram Moolenaar if path != 'src': 2191*92fdd1e7SBram Moolenaar # Running tests from a shadow directory, so move up another level 2192*92fdd1e7SBram Moolenaar # This will result in @% looking like shadow/testdir/Xfile, hence the 2193*92fdd1e7SBram Moolenaar # extra fnamemodify 2194*92fdd1e7SBram Moolenaar os.chdir('..') 2195*92fdd1e7SBram Moolenaar cb.append(fnamemodify('.', ':p:h:t')) 2196*92fdd1e7SBram Moolenaar cb.append(fnamemodify(vim.eval('@%'), ':s?^%s.??' % path).replace(os.path.sep, '/')) 2197*92fdd1e7SBram Moolenaar os.chdir(path) 2198*92fdd1e7SBram Moolenaar del path 2199*92fdd1e7SBram Moolenaar else: 2200*92fdd1e7SBram Moolenaar cb.append(fnamemodify('.', ':p:h:t')) 2201*92fdd1e7SBram Moolenaar cb.append(vim.eval('@%').replace(os.path.sep, '/')) 2202*92fdd1e7SBram Moolenaar os.chdir('testdir') 2203*92fdd1e7SBram Moolenaar cb.append(fnamemodify('.', ':p:h:t')) 2204*92fdd1e7SBram Moolenaar cb.append(vim.eval('@%')) 2205*92fdd1e7SBram Moolenaar del fnamemodify 2206*92fdd1e7SBram Moolenaar EOF 2207*92fdd1e7SBram Moolenaar call assert_equal(['testdir', 'Xfile', 'src', 'testdir/Xfile', 'testdir', 2208*92fdd1e7SBram Moolenaar \ 'Xfile'], getline(2, '$')) 2209*92fdd1e7SBram Moolenaar close! 2210*92fdd1e7SBram Moolenaarendfunc 2211*92fdd1e7SBram Moolenaar 2212*92fdd1e7SBram Moolenaar" Test errors 2213*92fdd1e7SBram Moolenaarfunc Test_python_errors() 2214*92fdd1e7SBram Moolenaar fun F() dict 2215*92fdd1e7SBram Moolenaar endfun 2216*92fdd1e7SBram Moolenaar 2217*92fdd1e7SBram Moolenaar fun D() 2218*92fdd1e7SBram Moolenaar endfun 2219*92fdd1e7SBram Moolenaar 2220*92fdd1e7SBram Moolenaar new 2221*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 2222*92fdd1e7SBram Moolenaar 2223*92fdd1e7SBram Moolenaar py << trim EOF 2224*92fdd1e7SBram Moolenaar d = vim.Dictionary() 2225*92fdd1e7SBram Moolenaar ned = vim.Dictionary(foo='bar', baz='abcD') 2226*92fdd1e7SBram Moolenaar dl = vim.Dictionary(a=1) 2227*92fdd1e7SBram Moolenaar dl.locked = True 2228*92fdd1e7SBram Moolenaar l = vim.List() 2229*92fdd1e7SBram Moolenaar ll = vim.List('abcE') 2230*92fdd1e7SBram Moolenaar ll.locked = True 2231*92fdd1e7SBram Moolenaar nel = vim.List('abcO') 2232*92fdd1e7SBram Moolenaar f = vim.Function('string') 2233*92fdd1e7SBram Moolenaar fd = vim.Function('F') 2234*92fdd1e7SBram Moolenaar fdel = vim.Function('D') 2235*92fdd1e7SBram Moolenaar vim.command('delfunction D') 2236*92fdd1e7SBram Moolenaar 2237*92fdd1e7SBram Moolenaar def subexpr_test(expr, name, subexprs): 2238*92fdd1e7SBram Moolenaar cb.append('>>> Testing %s using %s' % (name, expr)) 2239*92fdd1e7SBram Moolenaar for subexpr in subexprs: 2240*92fdd1e7SBram Moolenaar ee(expr % subexpr) 2241*92fdd1e7SBram Moolenaar cb.append('<<< Finished') 2242*92fdd1e7SBram Moolenaar 2243*92fdd1e7SBram Moolenaar def stringtochars_test(expr): 2244*92fdd1e7SBram Moolenaar return subexpr_test(expr, 'StringToChars', ( 2245*92fdd1e7SBram Moolenaar '1', # Fail type checks 2246*92fdd1e7SBram Moolenaar 'u"\\0"', # Fail PyString_AsStringAndSize(bytes, , NULL) check 2247*92fdd1e7SBram Moolenaar '"\\0"', # Fail PyString_AsStringAndSize(object, , NULL) check 2248*92fdd1e7SBram Moolenaar )) 2249*92fdd1e7SBram Moolenaar 2250*92fdd1e7SBram Moolenaar class Mapping(object): 2251*92fdd1e7SBram Moolenaar def __init__(self, d): 2252*92fdd1e7SBram Moolenaar self.d = d 2253*92fdd1e7SBram Moolenaar 2254*92fdd1e7SBram Moolenaar def __getitem__(self, key): 2255*92fdd1e7SBram Moolenaar return self.d[key] 2256*92fdd1e7SBram Moolenaar 2257*92fdd1e7SBram Moolenaar def keys(self): 2258*92fdd1e7SBram Moolenaar return self.d.keys() 2259*92fdd1e7SBram Moolenaar 2260*92fdd1e7SBram Moolenaar def items(self): 2261*92fdd1e7SBram Moolenaar return self.d.items() 2262*92fdd1e7SBram Moolenaar 2263*92fdd1e7SBram Moolenaar def convertfrompyobject_test(expr, recurse=True): 2264*92fdd1e7SBram Moolenaar # pydict_to_tv 2265*92fdd1e7SBram Moolenaar stringtochars_test(expr % '{%s : 1}') 2266*92fdd1e7SBram Moolenaar if recurse: 2267*92fdd1e7SBram Moolenaar convertfrompyobject_test(expr % '{"abcF" : %s}', False) 2268*92fdd1e7SBram Moolenaar # pymap_to_tv 2269*92fdd1e7SBram Moolenaar stringtochars_test(expr % 'Mapping({%s : 1})') 2270*92fdd1e7SBram Moolenaar if recurse: 2271*92fdd1e7SBram Moolenaar convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False) 2272*92fdd1e7SBram Moolenaar # pyseq_to_tv 2273*92fdd1e7SBram Moolenaar iter_test(expr) 2274*92fdd1e7SBram Moolenaar return subexpr_test(expr, 'ConvertFromPyObject', ( 2275*92fdd1e7SBram Moolenaar 'None', # Not conversible 2276*92fdd1e7SBram Moolenaar '{"": 1}', # Empty key not allowed 2277*92fdd1e7SBram Moolenaar '{u"": 1}', # Same, but with unicode object 2278*92fdd1e7SBram Moolenaar 'FailingMapping()', # 2279*92fdd1e7SBram Moolenaar 'FailingMappingKey()', # 2280*92fdd1e7SBram Moolenaar 'FailingNumber()', # 2281*92fdd1e7SBram Moolenaar )) 2282*92fdd1e7SBram Moolenaar 2283*92fdd1e7SBram Moolenaar def convertfrompymapping_test(expr): 2284*92fdd1e7SBram Moolenaar convertfrompyobject_test(expr) 2285*92fdd1e7SBram Moolenaar return subexpr_test(expr, 'ConvertFromPyMapping', ( 2286*92fdd1e7SBram Moolenaar '[]', 2287*92fdd1e7SBram Moolenaar )) 2288*92fdd1e7SBram Moolenaar 2289*92fdd1e7SBram Moolenaar def iter_test(expr): 2290*92fdd1e7SBram Moolenaar return subexpr_test(expr, '*Iter*', ( 2291*92fdd1e7SBram Moolenaar 'FailingIter()', 2292*92fdd1e7SBram Moolenaar 'FailingIterNext()', 2293*92fdd1e7SBram Moolenaar )) 2294*92fdd1e7SBram Moolenaar 2295*92fdd1e7SBram Moolenaar def number_test(expr, natural=False, unsigned=False): 2296*92fdd1e7SBram Moolenaar if natural: 2297*92fdd1e7SBram Moolenaar unsigned = True 2298*92fdd1e7SBram Moolenaar return subexpr_test(expr, 'NumberToLong', ( 2299*92fdd1e7SBram Moolenaar '[]', 2300*92fdd1e7SBram Moolenaar 'None', 2301*92fdd1e7SBram Moolenaar ) + (unsigned and ('-1',) or ()) 2302*92fdd1e7SBram Moolenaar + (natural and ('0',) or ())) 2303*92fdd1e7SBram Moolenaar 2304*92fdd1e7SBram Moolenaar class FailingTrue(object): 2305*92fdd1e7SBram Moolenaar def __nonzero__(self): 2306*92fdd1e7SBram Moolenaar raise NotImplementedError('bool') 2307*92fdd1e7SBram Moolenaar 2308*92fdd1e7SBram Moolenaar class FailingIter(object): 2309*92fdd1e7SBram Moolenaar def __iter__(self): 2310*92fdd1e7SBram Moolenaar raise NotImplementedError('iter') 2311*92fdd1e7SBram Moolenaar 2312*92fdd1e7SBram Moolenaar class FailingIterNext(object): 2313*92fdd1e7SBram Moolenaar def __iter__(self): 2314*92fdd1e7SBram Moolenaar return self 2315*92fdd1e7SBram Moolenaar 2316*92fdd1e7SBram Moolenaar def next(self): 2317*92fdd1e7SBram Moolenaar raise NotImplementedError('next') 2318*92fdd1e7SBram Moolenaar 2319*92fdd1e7SBram Moolenaar class FailingIterNextN(object): 2320*92fdd1e7SBram Moolenaar def __init__(self, n): 2321*92fdd1e7SBram Moolenaar self.n = n 2322*92fdd1e7SBram Moolenaar 2323*92fdd1e7SBram Moolenaar def __iter__(self): 2324*92fdd1e7SBram Moolenaar return self 2325*92fdd1e7SBram Moolenaar 2326*92fdd1e7SBram Moolenaar def next(self): 2327*92fdd1e7SBram Moolenaar if self.n: 2328*92fdd1e7SBram Moolenaar self.n -= 1 2329*92fdd1e7SBram Moolenaar return 1 2330*92fdd1e7SBram Moolenaar else: 2331*92fdd1e7SBram Moolenaar raise NotImplementedError('next N') 2332*92fdd1e7SBram Moolenaar 2333*92fdd1e7SBram Moolenaar class FailingMappingKey(object): 2334*92fdd1e7SBram Moolenaar def __getitem__(self, item): 2335*92fdd1e7SBram Moolenaar raise NotImplementedError('getitem:mappingkey') 2336*92fdd1e7SBram Moolenaar 2337*92fdd1e7SBram Moolenaar def keys(self): 2338*92fdd1e7SBram Moolenaar return list("abcH") 2339*92fdd1e7SBram Moolenaar 2340*92fdd1e7SBram Moolenaar class FailingMapping(object): 2341*92fdd1e7SBram Moolenaar def __getitem__(self): 2342*92fdd1e7SBram Moolenaar raise NotImplementedError('getitem:mapping') 2343*92fdd1e7SBram Moolenaar 2344*92fdd1e7SBram Moolenaar def keys(self): 2345*92fdd1e7SBram Moolenaar raise NotImplementedError('keys') 2346*92fdd1e7SBram Moolenaar 2347*92fdd1e7SBram Moolenaar class FailingList(list): 2348*92fdd1e7SBram Moolenaar def __getitem__(self, idx): 2349*92fdd1e7SBram Moolenaar if i == 2: 2350*92fdd1e7SBram Moolenaar raise NotImplementedError('getitem:list') 2351*92fdd1e7SBram Moolenaar else: 2352*92fdd1e7SBram Moolenaar return super(FailingList, self).__getitem__(idx) 2353*92fdd1e7SBram Moolenaar 2354*92fdd1e7SBram Moolenaar class NoArgsCall(object): 2355*92fdd1e7SBram Moolenaar def __call__(self): 2356*92fdd1e7SBram Moolenaar pass 2357*92fdd1e7SBram Moolenaar 2358*92fdd1e7SBram Moolenaar class FailingCall(object): 2359*92fdd1e7SBram Moolenaar def __call__(self, path): 2360*92fdd1e7SBram Moolenaar raise NotImplementedError('call') 2361*92fdd1e7SBram Moolenaar 2362*92fdd1e7SBram Moolenaar class FailingNumber(object): 2363*92fdd1e7SBram Moolenaar def __int__(self): 2364*92fdd1e7SBram Moolenaar raise NotImplementedError('int') 2365*92fdd1e7SBram Moolenaar 2366*92fdd1e7SBram Moolenaar cb.append("> Output") 2367*92fdd1e7SBram Moolenaar cb.append(">> OutputSetattr") 2368*92fdd1e7SBram Moolenaar ee('del sys.stdout.softspace') 2369*92fdd1e7SBram Moolenaar number_test('sys.stdout.softspace = %s', unsigned=True) 2370*92fdd1e7SBram Moolenaar number_test('sys.stderr.softspace = %s', unsigned=True) 2371*92fdd1e7SBram Moolenaar ee('assert sys.stdout.isatty()==False') 2372*92fdd1e7SBram Moolenaar ee('assert sys.stdout.seekable()==False') 2373*92fdd1e7SBram Moolenaar ee('sys.stdout.close()') 2374*92fdd1e7SBram Moolenaar ee('sys.stdout.flush()') 2375*92fdd1e7SBram Moolenaar ee('assert sys.stderr.isatty()==False') 2376*92fdd1e7SBram Moolenaar ee('assert sys.stderr.seekable()==False') 2377*92fdd1e7SBram Moolenaar ee('sys.stderr.close()') 2378*92fdd1e7SBram Moolenaar ee('sys.stderr.flush()') 2379*92fdd1e7SBram Moolenaar ee('sys.stdout.attr = None') 2380*92fdd1e7SBram Moolenaar cb.append(">> OutputWrite") 2381*92fdd1e7SBram Moolenaar ee('assert sys.stdout.writable()==True') 2382*92fdd1e7SBram Moolenaar ee('assert sys.stdout.readable()==False') 2383*92fdd1e7SBram Moolenaar ee('assert sys.stderr.writable()==True') 2384*92fdd1e7SBram Moolenaar ee('assert sys.stderr.readable()==False') 2385*92fdd1e7SBram Moolenaar ee('assert sys.stdout.closed()==False') 2386*92fdd1e7SBram Moolenaar ee('assert sys.stderr.closed()==False') 2387*92fdd1e7SBram Moolenaar ee('assert sys.stdout.errors=="strict"') 2388*92fdd1e7SBram Moolenaar ee('assert sys.stderr.errors=="strict"') 2389*92fdd1e7SBram Moolenaar ee('assert sys.stdout.encoding==sys.stderr.encoding') 2390*92fdd1e7SBram Moolenaar ee('sys.stdout.write(None)') 2391*92fdd1e7SBram Moolenaar cb.append(">> OutputWriteLines") 2392*92fdd1e7SBram Moolenaar ee('sys.stdout.writelines(None)') 2393*92fdd1e7SBram Moolenaar ee('sys.stdout.writelines([1])') 2394*92fdd1e7SBram Moolenaar iter_test('sys.stdout.writelines(%s)') 2395*92fdd1e7SBram Moolenaar cb.append("> VimCommand") 2396*92fdd1e7SBram Moolenaar stringtochars_test('vim.command(%s)') 2397*92fdd1e7SBram Moolenaar ee('vim.command("", 2)') 2398*92fdd1e7SBram Moolenaar #! Not checked: vim->python exceptions translating: checked later 2399*92fdd1e7SBram Moolenaar cb.append("> VimToPython") 2400*92fdd1e7SBram Moolenaar #! Not checked: everything: needs errors in internal python functions 2401*92fdd1e7SBram Moolenaar cb.append("> VimEval") 2402*92fdd1e7SBram Moolenaar stringtochars_test('vim.eval(%s)') 2403*92fdd1e7SBram Moolenaar ee('vim.eval("", FailingTrue())') 2404*92fdd1e7SBram Moolenaar #! Not checked: everything: needs errors in internal python functions 2405*92fdd1e7SBram Moolenaar cb.append("> VimEvalPy") 2406*92fdd1e7SBram Moolenaar stringtochars_test('vim.bindeval(%s)') 2407*92fdd1e7SBram Moolenaar ee('vim.eval("", 2)') 2408*92fdd1e7SBram Moolenaar #! Not checked: vim->python exceptions translating: checked later 2409*92fdd1e7SBram Moolenaar cb.append("> VimStrwidth") 2410*92fdd1e7SBram Moolenaar stringtochars_test('vim.strwidth(%s)') 2411*92fdd1e7SBram Moolenaar cb.append("> VimForeachRTP") 2412*92fdd1e7SBram Moolenaar ee('vim.foreach_rtp(None)') 2413*92fdd1e7SBram Moolenaar ee('vim.foreach_rtp(NoArgsCall())') 2414*92fdd1e7SBram Moolenaar ee('vim.foreach_rtp(FailingCall())') 2415*92fdd1e7SBram Moolenaar ee('vim.foreach_rtp(int, 2)') 2416*92fdd1e7SBram Moolenaar cb.append('> import') 2417*92fdd1e7SBram Moolenaar old_rtp = vim.options['rtp'] 2418*92fdd1e7SBram Moolenaar vim.options['rtp'] = os.getcwd().replace('\\', '\\\\').replace(',', '\\,') 2419*92fdd1e7SBram Moolenaar ee('import xxx_no_such_module_xxx') 2420*92fdd1e7SBram Moolenaar ee('import failing_import') 2421*92fdd1e7SBram Moolenaar ee('import failing') 2422*92fdd1e7SBram Moolenaar vim.options['rtp'] = old_rtp 2423*92fdd1e7SBram Moolenaar del old_rtp 2424*92fdd1e7SBram Moolenaar cb.append("> Options") 2425*92fdd1e7SBram Moolenaar cb.append(">> OptionsItem") 2426*92fdd1e7SBram Moolenaar ee('vim.options["abcQ"]') 2427*92fdd1e7SBram Moolenaar ee('vim.options[""]') 2428*92fdd1e7SBram Moolenaar stringtochars_test('vim.options[%s]') 2429*92fdd1e7SBram Moolenaar cb.append(">> OptionsContains") 2430*92fdd1e7SBram Moolenaar stringtochars_test('%s in vim.options') 2431*92fdd1e7SBram Moolenaar cb.append("> Dictionary") 2432*92fdd1e7SBram Moolenaar cb.append(">> DictionaryConstructor") 2433*92fdd1e7SBram Moolenaar ee('vim.Dictionary("abcI")') 2434*92fdd1e7SBram Moolenaar ##! Not checked: py_dict_alloc failure 2435*92fdd1e7SBram Moolenaar cb.append(">> DictionarySetattr") 2436*92fdd1e7SBram Moolenaar ee('del d.locked') 2437*92fdd1e7SBram Moolenaar ee('d.locked = FailingTrue()') 2438*92fdd1e7SBram Moolenaar ee('vim.vvars.locked = False') 2439*92fdd1e7SBram Moolenaar ee('d.scope = True') 2440*92fdd1e7SBram Moolenaar ee('d.xxx = True') 2441*92fdd1e7SBram Moolenaar cb.append(">> _DictionaryItem") 2442*92fdd1e7SBram Moolenaar ee('d.get("a", 2, 3)') 2443*92fdd1e7SBram Moolenaar stringtochars_test('d.get(%s)') 2444*92fdd1e7SBram Moolenaar ee('d.pop("a")') 2445*92fdd1e7SBram Moolenaar ee('dl.pop("a")') 2446*92fdd1e7SBram Moolenaar cb.append(">> DictionaryContains") 2447*92fdd1e7SBram Moolenaar ee('"" in d') 2448*92fdd1e7SBram Moolenaar ee('0 in d') 2449*92fdd1e7SBram Moolenaar cb.append(">> DictionaryIterNext") 2450*92fdd1e7SBram Moolenaar ee('for i in ned: ned["a"] = 1') 2451*92fdd1e7SBram Moolenaar del i 2452*92fdd1e7SBram Moolenaar cb.append(">> DictionaryAssItem") 2453*92fdd1e7SBram Moolenaar ee('dl["b"] = 1') 2454*92fdd1e7SBram Moolenaar stringtochars_test('d[%s] = 1') 2455*92fdd1e7SBram Moolenaar convertfrompyobject_test('d["a"] = %s') 2456*92fdd1e7SBram Moolenaar cb.append(">> DictionaryUpdate") 2457*92fdd1e7SBram Moolenaar cb.append(">>> kwargs") 2458*92fdd1e7SBram Moolenaar cb.append(">>> iter") 2459*92fdd1e7SBram Moolenaar ee('d.update(FailingMapping())') 2460*92fdd1e7SBram Moolenaar ee('d.update([FailingIterNext()])') 2461*92fdd1e7SBram Moolenaar ee('d.update([FailingIterNextN(1)])') 2462*92fdd1e7SBram Moolenaar iter_test('d.update(%s)') 2463*92fdd1e7SBram Moolenaar convertfrompyobject_test('d.update(%s)') 2464*92fdd1e7SBram Moolenaar stringtochars_test('d.update(((%s, 0),))') 2465*92fdd1e7SBram Moolenaar convertfrompyobject_test('d.update((("a", %s),))') 2466*92fdd1e7SBram Moolenaar cb.append(">> DictionaryPopItem") 2467*92fdd1e7SBram Moolenaar ee('d.popitem(1, 2)') 2468*92fdd1e7SBram Moolenaar cb.append(">> DictionaryHasKey") 2469*92fdd1e7SBram Moolenaar ee('d.has_key()') 2470*92fdd1e7SBram Moolenaar cb.append("> List") 2471*92fdd1e7SBram Moolenaar cb.append(">> ListConstructor") 2472*92fdd1e7SBram Moolenaar ee('vim.List(1, 2)') 2473*92fdd1e7SBram Moolenaar ee('vim.List(a=1)') 2474*92fdd1e7SBram Moolenaar iter_test('vim.List(%s)') 2475*92fdd1e7SBram Moolenaar convertfrompyobject_test('vim.List([%s])') 2476*92fdd1e7SBram Moolenaar cb.append(">> ListItem") 2477*92fdd1e7SBram Moolenaar ee('l[1000]') 2478*92fdd1e7SBram Moolenaar cb.append(">> ListAssItem") 2479*92fdd1e7SBram Moolenaar ee('ll[1] = 2') 2480*92fdd1e7SBram Moolenaar ee('l[1000] = 3') 2481*92fdd1e7SBram Moolenaar cb.append(">> ListAssSlice") 2482*92fdd1e7SBram Moolenaar ee('ll[1:100] = "abcJ"') 2483*92fdd1e7SBram Moolenaar iter_test('l[:] = %s') 2484*92fdd1e7SBram Moolenaar ee('nel[1:10:2] = "abcK"') 2485*92fdd1e7SBram Moolenaar cb.append(repr(tuple(nel))) 2486*92fdd1e7SBram Moolenaar ee('nel[1:10:2] = "a"') 2487*92fdd1e7SBram Moolenaar cb.append(repr(tuple(nel))) 2488*92fdd1e7SBram Moolenaar ee('nel[1:1:-1] = "a"') 2489*92fdd1e7SBram Moolenaar cb.append(repr(tuple(nel))) 2490*92fdd1e7SBram Moolenaar ee('nel[:] = FailingIterNextN(2)') 2491*92fdd1e7SBram Moolenaar cb.append(repr(tuple(nel))) 2492*92fdd1e7SBram Moolenaar convertfrompyobject_test('l[:] = [%s]') 2493*92fdd1e7SBram Moolenaar cb.append(">> ListConcatInPlace") 2494*92fdd1e7SBram Moolenaar iter_test('l.extend(%s)') 2495*92fdd1e7SBram Moolenaar convertfrompyobject_test('l.extend([%s])') 2496*92fdd1e7SBram Moolenaar cb.append(">> ListSetattr") 2497*92fdd1e7SBram Moolenaar ee('del l.locked') 2498*92fdd1e7SBram Moolenaar ee('l.locked = FailingTrue()') 2499*92fdd1e7SBram Moolenaar ee('l.xxx = True') 2500*92fdd1e7SBram Moolenaar cb.append("> Function") 2501*92fdd1e7SBram Moolenaar cb.append(">> FunctionConstructor") 2502*92fdd1e7SBram Moolenaar cb.append(">>> FunctionConstructor") 2503*92fdd1e7SBram Moolenaar ee('vim.Function("123")') 2504*92fdd1e7SBram Moolenaar ee('vim.Function("xxx_non_existent_function_xxx")') 2505*92fdd1e7SBram Moolenaar ee('vim.Function("xxx#non#existent#function#xxx")') 2506*92fdd1e7SBram Moolenaar ee('vim.Function("xxx_non_existent_function_xxx2", args=[])') 2507*92fdd1e7SBram Moolenaar ee('vim.Function("xxx_non_existent_function_xxx3", self={})') 2508*92fdd1e7SBram Moolenaar ee('vim.Function("xxx_non_existent_function_xxx4", args=[], self={})') 2509*92fdd1e7SBram Moolenaar cb.append(">>> FunctionNew") 2510*92fdd1e7SBram Moolenaar ee('vim.Function("tr", self="abcFuncSelf")') 2511*92fdd1e7SBram Moolenaar ee('vim.Function("tr", args=427423)') 2512*92fdd1e7SBram Moolenaar ee('vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2")') 2513*92fdd1e7SBram Moolenaar ee('vim.Function(self="abcFuncSelf2", args="abcFuncArgs2")') 2514*92fdd1e7SBram Moolenaar ee('vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2")') 2515*92fdd1e7SBram Moolenaar ee('vim.Function("tr", "")') 2516*92fdd1e7SBram Moolenaar cb.append(">> FunctionCall") 2517*92fdd1e7SBram Moolenaar convertfrompyobject_test('f(%s)') 2518*92fdd1e7SBram Moolenaar convertfrompymapping_test('fd(self=%s)') 2519*92fdd1e7SBram Moolenaar cb.append("> TabPage") 2520*92fdd1e7SBram Moolenaar cb.append(">> TabPageAttr") 2521*92fdd1e7SBram Moolenaar ee('vim.current.tabpage.xxx') 2522*92fdd1e7SBram Moolenaar cb.append("> TabList") 2523*92fdd1e7SBram Moolenaar cb.append(">> TabListItem") 2524*92fdd1e7SBram Moolenaar ee('vim.tabpages[1000]') 2525*92fdd1e7SBram Moolenaar cb.append("> Window") 2526*92fdd1e7SBram Moolenaar cb.append(">> WindowAttr") 2527*92fdd1e7SBram Moolenaar ee('vim.current.window.xxx') 2528*92fdd1e7SBram Moolenaar cb.append(">> WindowSetattr") 2529*92fdd1e7SBram Moolenaar ee('vim.current.window.buffer = 0') 2530*92fdd1e7SBram Moolenaar ee('vim.current.window.cursor = (100000000, 100000000)') 2531*92fdd1e7SBram Moolenaar ee('vim.current.window.cursor = True') 2532*92fdd1e7SBram Moolenaar number_test('vim.current.window.height = %s', unsigned=True) 2533*92fdd1e7SBram Moolenaar number_test('vim.current.window.width = %s', unsigned=True) 2534*92fdd1e7SBram Moolenaar ee('vim.current.window.xxxxxx = True') 2535*92fdd1e7SBram Moolenaar cb.append("> WinList") 2536*92fdd1e7SBram Moolenaar cb.append(">> WinListItem") 2537*92fdd1e7SBram Moolenaar ee('vim.windows[1000]') 2538*92fdd1e7SBram Moolenaar cb.append("> Buffer") 2539*92fdd1e7SBram Moolenaar cb.append(">> StringToLine (indirect)") 2540*92fdd1e7SBram Moolenaar ee('vim.current.buffer[0] = u"\\na"') 2541*92fdd1e7SBram Moolenaar ee('vim.current.buffer[0] = "\\na"') 2542*92fdd1e7SBram Moolenaar cb.append(">> SetBufferLine (indirect)") 2543*92fdd1e7SBram Moolenaar ee('vim.current.buffer[0] = True') 2544*92fdd1e7SBram Moolenaar cb.append(">> SetBufferLineList (indirect)") 2545*92fdd1e7SBram Moolenaar ee('vim.current.buffer[:] = True') 2546*92fdd1e7SBram Moolenaar ee('vim.current.buffer[:] = ["\\na", "bc"]') 2547*92fdd1e7SBram Moolenaar cb.append(">> InsertBufferLines (indirect)") 2548*92fdd1e7SBram Moolenaar ee('vim.current.buffer.append(None)') 2549*92fdd1e7SBram Moolenaar ee('vim.current.buffer.append(["\\na", "bc"])') 2550*92fdd1e7SBram Moolenaar ee('vim.current.buffer.append("\\nbc")') 2551*92fdd1e7SBram Moolenaar cb.append(">> RBItem") 2552*92fdd1e7SBram Moolenaar ee('vim.current.buffer[100000000]') 2553*92fdd1e7SBram Moolenaar cb.append(">> RBAsItem") 2554*92fdd1e7SBram Moolenaar ee('vim.current.buffer[100000000] = ""') 2555*92fdd1e7SBram Moolenaar cb.append(">> BufferAttr") 2556*92fdd1e7SBram Moolenaar ee('vim.current.buffer.xxx') 2557*92fdd1e7SBram Moolenaar cb.append(">> BufferSetattr") 2558*92fdd1e7SBram Moolenaar ee('vim.current.buffer.name = True') 2559*92fdd1e7SBram Moolenaar ee('vim.current.buffer.xxx = True') 2560*92fdd1e7SBram Moolenaar cb.append(">> BufferMark") 2561*92fdd1e7SBram Moolenaar ee('vim.current.buffer.mark(0)') 2562*92fdd1e7SBram Moolenaar ee('vim.current.buffer.mark("abcM")') 2563*92fdd1e7SBram Moolenaar ee('vim.current.buffer.mark("!")') 2564*92fdd1e7SBram Moolenaar cb.append(">> BufferRange") 2565*92fdd1e7SBram Moolenaar ee('vim.current.buffer.range(1, 2, 3)') 2566*92fdd1e7SBram Moolenaar cb.append("> BufMap") 2567*92fdd1e7SBram Moolenaar cb.append(">> BufMapItem") 2568*92fdd1e7SBram Moolenaar ee('vim.buffers[100000000]') 2569*92fdd1e7SBram Moolenaar number_test('vim.buffers[%s]', natural=True) 2570*92fdd1e7SBram Moolenaar cb.append("> Current") 2571*92fdd1e7SBram Moolenaar cb.append(">> CurrentGetattr") 2572*92fdd1e7SBram Moolenaar ee('vim.current.xxx') 2573*92fdd1e7SBram Moolenaar cb.append(">> CurrentSetattr") 2574*92fdd1e7SBram Moolenaar ee('vim.current.line = True') 2575*92fdd1e7SBram Moolenaar ee('vim.current.buffer = True') 2576*92fdd1e7SBram Moolenaar ee('vim.current.window = True') 2577*92fdd1e7SBram Moolenaar ee('vim.current.tabpage = True') 2578*92fdd1e7SBram Moolenaar ee('vim.current.xxx = True') 2579*92fdd1e7SBram Moolenaar del d 2580*92fdd1e7SBram Moolenaar del ned 2581*92fdd1e7SBram Moolenaar del dl 2582*92fdd1e7SBram Moolenaar del l 2583*92fdd1e7SBram Moolenaar del ll 2584*92fdd1e7SBram Moolenaar del nel 2585*92fdd1e7SBram Moolenaar del f 2586*92fdd1e7SBram Moolenaar del fd 2587*92fdd1e7SBram Moolenaar del fdel 2588*92fdd1e7SBram Moolenaar del subexpr_test 2589*92fdd1e7SBram Moolenaar del stringtochars_test 2590*92fdd1e7SBram Moolenaar del Mapping 2591*92fdd1e7SBram Moolenaar del convertfrompyobject_test 2592*92fdd1e7SBram Moolenaar del convertfrompymapping_test 2593*92fdd1e7SBram Moolenaar del iter_test 2594*92fdd1e7SBram Moolenaar del number_test 2595*92fdd1e7SBram Moolenaar del FailingTrue 2596*92fdd1e7SBram Moolenaar del FailingIter 2597*92fdd1e7SBram Moolenaar del FailingIterNext 2598*92fdd1e7SBram Moolenaar del FailingIterNextN 2599*92fdd1e7SBram Moolenaar del FailingMapping 2600*92fdd1e7SBram Moolenaar del FailingMappingKey 2601*92fdd1e7SBram Moolenaar del FailingList 2602*92fdd1e7SBram Moolenaar del NoArgsCall 2603*92fdd1e7SBram Moolenaar del FailingCall 2604*92fdd1e7SBram Moolenaar del FailingNumber 2605*92fdd1e7SBram Moolenaar EOF 2606*92fdd1e7SBram Moolenaar delfunction F 2607*92fdd1e7SBram Moolenaar 2608*92fdd1e7SBram Moolenaar let expected =<< trim END 2609*92fdd1e7SBram Moolenaar > Output 2610*92fdd1e7SBram Moolenaar >> OutputSetattr 2611*92fdd1e7SBram Moolenaar del sys.stdout.softspace:AttributeError:('cannot delete OutputObject attributes',) 2612*92fdd1e7SBram Moolenaar >>> Testing NumberToLong using sys.stdout.softspace = %s 2613*92fdd1e7SBram Moolenaar sys.stdout.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 2614*92fdd1e7SBram Moolenaar sys.stdout.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 2615*92fdd1e7SBram Moolenaar sys.stdout.softspace = -1:ValueError:('number must be greater or equal to zero',) 2616*92fdd1e7SBram Moolenaar <<< Finished 2617*92fdd1e7SBram Moolenaar >>> Testing NumberToLong using sys.stderr.softspace = %s 2618*92fdd1e7SBram Moolenaar sys.stderr.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 2619*92fdd1e7SBram Moolenaar sys.stderr.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 2620*92fdd1e7SBram Moolenaar sys.stderr.softspace = -1:ValueError:('number must be greater or equal to zero',) 2621*92fdd1e7SBram Moolenaar <<< Finished 2622*92fdd1e7SBram Moolenaar assert sys.stdout.isatty()==False:NOT FAILED 2623*92fdd1e7SBram Moolenaar assert sys.stdout.seekable()==False:NOT FAILED 2624*92fdd1e7SBram Moolenaar sys.stdout.close():NOT FAILED 2625*92fdd1e7SBram Moolenaar sys.stdout.flush():NOT FAILED 2626*92fdd1e7SBram Moolenaar assert sys.stderr.isatty()==False:NOT FAILED 2627*92fdd1e7SBram Moolenaar assert sys.stderr.seekable()==False:NOT FAILED 2628*92fdd1e7SBram Moolenaar sys.stderr.close():NOT FAILED 2629*92fdd1e7SBram Moolenaar sys.stderr.flush():NOT FAILED 2630*92fdd1e7SBram Moolenaar sys.stdout.attr = None:AttributeError:('invalid attribute: attr',) 2631*92fdd1e7SBram Moolenaar >> OutputWrite 2632*92fdd1e7SBram Moolenaar assert sys.stdout.writable()==True:NOT FAILED 2633*92fdd1e7SBram Moolenaar assert sys.stdout.readable()==False:NOT FAILED 2634*92fdd1e7SBram Moolenaar assert sys.stderr.writable()==True:NOT FAILED 2635*92fdd1e7SBram Moolenaar assert sys.stderr.readable()==False:NOT FAILED 2636*92fdd1e7SBram Moolenaar assert sys.stdout.closed()==False:NOT FAILED 2637*92fdd1e7SBram Moolenaar assert sys.stderr.closed()==False:NOT FAILED 2638*92fdd1e7SBram Moolenaar assert sys.stdout.errors=="strict":NOT FAILED 2639*92fdd1e7SBram Moolenaar assert sys.stderr.errors=="strict":NOT FAILED 2640*92fdd1e7SBram Moolenaar assert sys.stdout.encoding==sys.stderr.encoding:NOT FAILED 2641*92fdd1e7SBram Moolenaar sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',) 2642*92fdd1e7SBram Moolenaar >> OutputWriteLines 2643*92fdd1e7SBram Moolenaar sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",) 2644*92fdd1e7SBram Moolenaar sys.stdout.writelines([1]):TypeError:('coercing to Unicode: need string or buffer, int found',) 2645*92fdd1e7SBram Moolenaar >>> Testing *Iter* using sys.stdout.writelines(%s) 2646*92fdd1e7SBram Moolenaar sys.stdout.writelines(FailingIter()):NotImplementedError:('iter',) 2647*92fdd1e7SBram Moolenaar sys.stdout.writelines(FailingIterNext()):NotImplementedError:('next',) 2648*92fdd1e7SBram Moolenaar <<< Finished 2649*92fdd1e7SBram Moolenaar > VimCommand 2650*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.command(%s) 2651*92fdd1e7SBram Moolenaar vim.command(1):TypeError:('expected str() or unicode() instance, but got int',) 2652*92fdd1e7SBram Moolenaar vim.command(u"\0"):TypeError:('expected string without null bytes',) 2653*92fdd1e7SBram Moolenaar vim.command("\0"):TypeError:('expected string without null bytes',) 2654*92fdd1e7SBram Moolenaar <<< Finished 2655*92fdd1e7SBram Moolenaar vim.command("", 2):TypeError:('command() takes exactly one argument (2 given)',) 2656*92fdd1e7SBram Moolenaar > VimToPython 2657*92fdd1e7SBram Moolenaar > VimEval 2658*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.eval(%s) 2659*92fdd1e7SBram Moolenaar vim.eval(1):TypeError:('expected str() or unicode() instance, but got int',) 2660*92fdd1e7SBram Moolenaar vim.eval(u"\0"):TypeError:('expected string without null bytes',) 2661*92fdd1e7SBram Moolenaar vim.eval("\0"):TypeError:('expected string without null bytes',) 2662*92fdd1e7SBram Moolenaar <<< Finished 2663*92fdd1e7SBram Moolenaar vim.eval("", FailingTrue()):TypeError:('function takes exactly 1 argument (2 given)',) 2664*92fdd1e7SBram Moolenaar > VimEvalPy 2665*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.bindeval(%s) 2666*92fdd1e7SBram Moolenaar vim.bindeval(1):TypeError:('expected str() or unicode() instance, but got int',) 2667*92fdd1e7SBram Moolenaar vim.bindeval(u"\0"):TypeError:('expected string without null bytes',) 2668*92fdd1e7SBram Moolenaar vim.bindeval("\0"):TypeError:('expected string without null bytes',) 2669*92fdd1e7SBram Moolenaar <<< Finished 2670*92fdd1e7SBram Moolenaar vim.eval("", 2):TypeError:('function takes exactly 1 argument (2 given)',) 2671*92fdd1e7SBram Moolenaar > VimStrwidth 2672*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.strwidth(%s) 2673*92fdd1e7SBram Moolenaar vim.strwidth(1):TypeError:('expected str() or unicode() instance, but got int',) 2674*92fdd1e7SBram Moolenaar vim.strwidth(u"\0"):TypeError:('expected string without null bytes',) 2675*92fdd1e7SBram Moolenaar vim.strwidth("\0"):TypeError:('expected string without null bytes',) 2676*92fdd1e7SBram Moolenaar <<< Finished 2677*92fdd1e7SBram Moolenaar > VimForeachRTP 2678*92fdd1e7SBram Moolenaar vim.foreach_rtp(None):TypeError:("'NoneType' object is not callable",) 2679*92fdd1e7SBram Moolenaar vim.foreach_rtp(NoArgsCall()):TypeError:('__call__() takes exactly 1 argument (2 given)',) 2680*92fdd1e7SBram Moolenaar vim.foreach_rtp(FailingCall()):NotImplementedError:('call',) 2681*92fdd1e7SBram Moolenaar vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',) 2682*92fdd1e7SBram Moolenaar > import 2683*92fdd1e7SBram Moolenaar import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',) 2684*92fdd1e7SBram Moolenaar import failing_import:ImportError:() 2685*92fdd1e7SBram Moolenaar import failing:NotImplementedError:() 2686*92fdd1e7SBram Moolenaar > Options 2687*92fdd1e7SBram Moolenaar >> OptionsItem 2688*92fdd1e7SBram Moolenaar vim.options["abcQ"]:KeyError:('abcQ',) 2689*92fdd1e7SBram Moolenaar vim.options[""]:ValueError:('empty keys are not allowed',) 2690*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.options[%s] 2691*92fdd1e7SBram Moolenaar vim.options[1]:TypeError:('expected str() or unicode() instance, but got int',) 2692*92fdd1e7SBram Moolenaar vim.options[u"\0"]:TypeError:('expected string without null bytes',) 2693*92fdd1e7SBram Moolenaar vim.options["\0"]:TypeError:('expected string without null bytes',) 2694*92fdd1e7SBram Moolenaar <<< Finished 2695*92fdd1e7SBram Moolenaar >> OptionsContains 2696*92fdd1e7SBram Moolenaar >>> Testing StringToChars using %s in vim.options 2697*92fdd1e7SBram Moolenaar 1 in vim.options:TypeError:('expected str() or unicode() instance, but got int',) 2698*92fdd1e7SBram Moolenaar u"\0" in vim.options:TypeError:('expected string without null bytes',) 2699*92fdd1e7SBram Moolenaar "\0" in vim.options:TypeError:('expected string without null bytes',) 2700*92fdd1e7SBram Moolenaar <<< Finished 2701*92fdd1e7SBram Moolenaar > Dictionary 2702*92fdd1e7SBram Moolenaar >> DictionaryConstructor 2703*92fdd1e7SBram Moolenaar vim.Dictionary("abcI"):ValueError:('expected sequence element of size 2, but got sequence of size 1',) 2704*92fdd1e7SBram Moolenaar >> DictionarySetattr 2705*92fdd1e7SBram Moolenaar del d.locked:AttributeError:('cannot delete vim.Dictionary attributes',) 2706*92fdd1e7SBram Moolenaar d.locked = FailingTrue():NotImplementedError:('bool',) 2707*92fdd1e7SBram Moolenaar vim.vvars.locked = False:TypeError:('cannot modify fixed dictionary',) 2708*92fdd1e7SBram Moolenaar d.scope = True:AttributeError:('cannot set attribute scope',) 2709*92fdd1e7SBram Moolenaar d.xxx = True:AttributeError:('cannot set attribute xxx',) 2710*92fdd1e7SBram Moolenaar >> _DictionaryItem 2711*92fdd1e7SBram Moolenaar d.get("a", 2, 3):TypeError:('function takes at most 2 arguments (3 given)',) 2712*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.get(%s) 2713*92fdd1e7SBram Moolenaar d.get(1):TypeError:('expected str() or unicode() instance, but got int',) 2714*92fdd1e7SBram Moolenaar d.get(u"\0"):TypeError:('expected string without null bytes',) 2715*92fdd1e7SBram Moolenaar d.get("\0"):TypeError:('expected string without null bytes',) 2716*92fdd1e7SBram Moolenaar <<< Finished 2717*92fdd1e7SBram Moolenaar d.pop("a"):KeyError:('a',) 2718*92fdd1e7SBram Moolenaar dl.pop("a"):error:('dictionary is locked',) 2719*92fdd1e7SBram Moolenaar >> DictionaryContains 2720*92fdd1e7SBram Moolenaar "" in d:ValueError:('empty keys are not allowed',) 2721*92fdd1e7SBram Moolenaar 0 in d:TypeError:('expected str() or unicode() instance, but got int',) 2722*92fdd1e7SBram Moolenaar >> DictionaryIterNext 2723*92fdd1e7SBram Moolenaar for i in ned: ned["a"] = 1:RuntimeError:('hashtab changed during iteration',) 2724*92fdd1e7SBram Moolenaar >> DictionaryAssItem 2725*92fdd1e7SBram Moolenaar dl["b"] = 1:error:('dictionary is locked',) 2726*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d[%s] = 1 2727*92fdd1e7SBram Moolenaar d[1] = 1:TypeError:('expected str() or unicode() instance, but got int',) 2728*92fdd1e7SBram Moolenaar d[u"\0"] = 1:TypeError:('expected string without null bytes',) 2729*92fdd1e7SBram Moolenaar d["\0"] = 1:TypeError:('expected string without null bytes',) 2730*92fdd1e7SBram Moolenaar <<< Finished 2731*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = {%s : 1} 2732*92fdd1e7SBram Moolenaar d["a"] = {1 : 1}:TypeError:('expected str() or unicode() instance, but got int',) 2733*92fdd1e7SBram Moolenaar d["a"] = {u"\0" : 1}:TypeError:('expected string without null bytes',) 2734*92fdd1e7SBram Moolenaar d["a"] = {"\0" : 1}:TypeError:('expected string without null bytes',) 2735*92fdd1e7SBram Moolenaar <<< Finished 2736*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}} 2737*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : {1 : 1}}:TypeError:('expected str() or unicode() instance, but got int',) 2738*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : {u"\0" : 1}}:TypeError:('expected string without null bytes',) 2739*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : {"\0" : 1}}:TypeError:('expected string without null bytes',) 2740*92fdd1e7SBram Moolenaar <<< Finished 2741*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})} 2742*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : Mapping({1 : 1})}:TypeError:('expected str() or unicode() instance, but got int',) 2743*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : Mapping({u"\0" : 1})}:TypeError:('expected string without null bytes',) 2744*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : Mapping({"\0" : 1})}:TypeError:('expected string without null bytes',) 2745*92fdd1e7SBram Moolenaar <<< Finished 2746*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d["a"] = {"abcF" : %s} 2747*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingIter()}:TypeError:('unable to convert FailingIter to a Vim structure',) 2748*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingIterNext()}:NotImplementedError:('next',) 2749*92fdd1e7SBram Moolenaar <<< Finished 2750*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s} 2751*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : None}:NOT FAILED 2752*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : {"": 1}}:ValueError:('empty keys are not allowed',) 2753*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : {u"": 1}}:ValueError:('empty keys are not allowed',) 2754*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingMapping()}:NotImplementedError:('keys',) 2755*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingMappingKey()}:NotImplementedError:('getitem:mappingkey',) 2756*92fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingNumber()}:TypeError:('long() argument must be a string or a number',) 2757*92fdd1e7SBram Moolenaar <<< Finished 2758*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = Mapping({%s : 1}) 2759*92fdd1e7SBram Moolenaar d["a"] = Mapping({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) 2760*92fdd1e7SBram Moolenaar d["a"] = Mapping({u"\0" : 1}):TypeError:('expected string without null bytes',) 2761*92fdd1e7SBram Moolenaar d["a"] = Mapping({"\0" : 1}):TypeError:('expected string without null bytes',) 2762*92fdd1e7SBram Moolenaar <<< Finished 2763*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}}) 2764*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',) 2765*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {u"\0" : 1}}):TypeError:('expected string without null bytes',) 2766*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {"\0" : 1}}):TypeError:('expected string without null bytes',) 2767*92fdd1e7SBram Moolenaar <<< Finished 2768*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})}) 2769*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',) 2770*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',) 2771*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',) 2772*92fdd1e7SBram Moolenaar <<< Finished 2773*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s}) 2774*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',) 2775*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingIterNext()}):NotImplementedError:('next',) 2776*92fdd1e7SBram Moolenaar <<< Finished 2777*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s}) 2778*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : None}):NOT FAILED 2779*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {"": 1}}):ValueError:('empty keys are not allowed',) 2780*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {u"": 1}}):ValueError:('empty keys are not allowed',) 2781*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingMapping()}):NotImplementedError:('keys',) 2782*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) 2783*92fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) 2784*92fdd1e7SBram Moolenaar <<< Finished 2785*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d["a"] = %s 2786*92fdd1e7SBram Moolenaar d["a"] = FailingIter():TypeError:('unable to convert FailingIter to a Vim structure',) 2787*92fdd1e7SBram Moolenaar d["a"] = FailingIterNext():NotImplementedError:('next',) 2788*92fdd1e7SBram Moolenaar <<< Finished 2789*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d["a"] = %s 2790*92fdd1e7SBram Moolenaar d["a"] = None:NOT FAILED 2791*92fdd1e7SBram Moolenaar d["a"] = {"": 1}:ValueError:('empty keys are not allowed',) 2792*92fdd1e7SBram Moolenaar d["a"] = {u"": 1}:ValueError:('empty keys are not allowed',) 2793*92fdd1e7SBram Moolenaar d["a"] = FailingMapping():NotImplementedError:('keys',) 2794*92fdd1e7SBram Moolenaar d["a"] = FailingMappingKey():NotImplementedError:('getitem:mappingkey',) 2795*92fdd1e7SBram Moolenaar d["a"] = FailingNumber():TypeError:('long() argument must be a string or a number',) 2796*92fdd1e7SBram Moolenaar <<< Finished 2797*92fdd1e7SBram Moolenaar >> DictionaryUpdate 2798*92fdd1e7SBram Moolenaar >>> kwargs 2799*92fdd1e7SBram Moolenaar >>> iter 2800*92fdd1e7SBram Moolenaar d.update(FailingMapping()):NotImplementedError:('keys',) 2801*92fdd1e7SBram Moolenaar d.update([FailingIterNext()]):NotImplementedError:('next',) 2802*92fdd1e7SBram Moolenaar d.update([FailingIterNextN(1)]):NotImplementedError:('next N',) 2803*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update(%s) 2804*92fdd1e7SBram Moolenaar d.update(FailingIter()):NotImplementedError:('iter',) 2805*92fdd1e7SBram Moolenaar d.update(FailingIterNext()):NotImplementedError:('next',) 2806*92fdd1e7SBram Moolenaar <<< Finished 2807*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update({%s : 1}) 2808*92fdd1e7SBram Moolenaar d.update({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) 2809*92fdd1e7SBram Moolenaar d.update({u"\0" : 1}):TypeError:('expected string without null bytes',) 2810*92fdd1e7SBram Moolenaar d.update({"\0" : 1}):TypeError:('expected string without null bytes',) 2811*92fdd1e7SBram Moolenaar <<< Finished 2812*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update({"abcF" : {%s : 1}}) 2813*92fdd1e7SBram Moolenaar d.update({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',) 2814*92fdd1e7SBram Moolenaar d.update({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',) 2815*92fdd1e7SBram Moolenaar d.update({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',) 2816*92fdd1e7SBram Moolenaar <<< Finished 2817*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})}) 2818*92fdd1e7SBram Moolenaar d.update({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',) 2819*92fdd1e7SBram Moolenaar d.update({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',) 2820*92fdd1e7SBram Moolenaar d.update({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',) 2821*92fdd1e7SBram Moolenaar <<< Finished 2822*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update({"abcF" : %s}) 2823*92fdd1e7SBram Moolenaar d.update({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',) 2824*92fdd1e7SBram Moolenaar d.update({"abcF" : FailingIterNext()}):NotImplementedError:('next',) 2825*92fdd1e7SBram Moolenaar <<< Finished 2826*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update({"abcF" : %s}) 2827*92fdd1e7SBram Moolenaar d.update({"abcF" : None}):NOT FAILED 2828*92fdd1e7SBram Moolenaar d.update({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) 2829*92fdd1e7SBram Moolenaar d.update({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) 2830*92fdd1e7SBram Moolenaar d.update({"abcF" : FailingMapping()}):NotImplementedError:('keys',) 2831*92fdd1e7SBram Moolenaar d.update({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) 2832*92fdd1e7SBram Moolenaar d.update({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) 2833*92fdd1e7SBram Moolenaar <<< Finished 2834*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update(Mapping({%s : 1})) 2835*92fdd1e7SBram Moolenaar d.update(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) 2836*92fdd1e7SBram Moolenaar d.update(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',) 2837*92fdd1e7SBram Moolenaar d.update(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',) 2838*92fdd1e7SBram Moolenaar <<< Finished 2839*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}})) 2840*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',) 2841*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',) 2842*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',) 2843*92fdd1e7SBram Moolenaar <<< Finished 2844*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})})) 2845*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',) 2846*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',) 2847*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',) 2848*92fdd1e7SBram Moolenaar <<< Finished 2849*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update(Mapping({"abcG" : %s})) 2850*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',) 2851*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) 2852*92fdd1e7SBram Moolenaar <<< Finished 2853*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s})) 2854*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : None})):NOT FAILED 2855*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) 2856*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) 2857*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) 2858*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) 2859*92fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) 2860*92fdd1e7SBram Moolenaar <<< Finished 2861*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update(%s) 2862*92fdd1e7SBram Moolenaar d.update(FailingIter()):NotImplementedError:('iter',) 2863*92fdd1e7SBram Moolenaar d.update(FailingIterNext()):NotImplementedError:('next',) 2864*92fdd1e7SBram Moolenaar <<< Finished 2865*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update(%s) 2866*92fdd1e7SBram Moolenaar d.update(None):TypeError:("'NoneType' object is not iterable",) 2867*92fdd1e7SBram Moolenaar d.update({"": 1}):ValueError:('empty keys are not allowed',) 2868*92fdd1e7SBram Moolenaar d.update({u"": 1}):ValueError:('empty keys are not allowed',) 2869*92fdd1e7SBram Moolenaar d.update(FailingMapping()):NotImplementedError:('keys',) 2870*92fdd1e7SBram Moolenaar d.update(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) 2871*92fdd1e7SBram Moolenaar d.update(FailingNumber()):TypeError:("'FailingNumber' object is not iterable",) 2872*92fdd1e7SBram Moolenaar <<< Finished 2873*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update(((%s, 0),)) 2874*92fdd1e7SBram Moolenaar d.update(((1, 0),)):TypeError:('expected str() or unicode() instance, but got int',) 2875*92fdd1e7SBram Moolenaar d.update(((u"\0", 0),)):TypeError:('expected string without null bytes',) 2876*92fdd1e7SBram Moolenaar d.update((("\0", 0),)):TypeError:('expected string without null bytes',) 2877*92fdd1e7SBram Moolenaar <<< Finished 2878*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", {%s : 1}),)) 2879*92fdd1e7SBram Moolenaar d.update((("a", {1 : 1}),)):TypeError:('expected str() or unicode() instance, but got int',) 2880*92fdd1e7SBram Moolenaar d.update((("a", {u"\0" : 1}),)):TypeError:('expected string without null bytes',) 2881*92fdd1e7SBram Moolenaar d.update((("a", {"\0" : 1}),)):TypeError:('expected string without null bytes',) 2882*92fdd1e7SBram Moolenaar <<< Finished 2883*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),)) 2884*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {1 : 1}}),)):TypeError:('expected str() or unicode() instance, but got int',) 2885*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {u"\0" : 1}}),)):TypeError:('expected string without null bytes',) 2886*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {"\0" : 1}}),)):TypeError:('expected string without null bytes',) 2887*92fdd1e7SBram Moolenaar <<< Finished 2888*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),)) 2889*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : Mapping({1 : 1})}),)):TypeError:('expected str() or unicode() instance, but got int',) 2890*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : Mapping({u"\0" : 1})}),)):TypeError:('expected string without null bytes',) 2891*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):TypeError:('expected string without null bytes',) 2892*92fdd1e7SBram Moolenaar <<< Finished 2893*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update((("a", {"abcF" : %s}),)) 2894*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingIter()}),)):TypeError:('unable to convert FailingIter to a Vim structure',) 2895*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingIterNext()}),)):NotImplementedError:('next',) 2896*92fdd1e7SBram Moolenaar <<< Finished 2897*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),)) 2898*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : None}),)):error:("failed to add key 'a' to dictionary",) 2899*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {"": 1}}),)):ValueError:('empty keys are not allowed',) 2900*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {u"": 1}}),)):ValueError:('empty keys are not allowed',) 2901*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingMapping()}),)):NotImplementedError:('keys',) 2902*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingMappingKey()}),)):NotImplementedError:('getitem:mappingkey',) 2903*92fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingNumber()}),)):TypeError:('long() argument must be a string or a number',) 2904*92fdd1e7SBram Moolenaar <<< Finished 2905*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),)) 2906*92fdd1e7SBram Moolenaar d.update((("a", Mapping({1 : 1})),)):TypeError:('expected str() or unicode() instance, but got int',) 2907*92fdd1e7SBram Moolenaar d.update((("a", Mapping({u"\0" : 1})),)):TypeError:('expected string without null bytes',) 2908*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"\0" : 1})),)):TypeError:('expected string without null bytes',) 2909*92fdd1e7SBram Moolenaar <<< Finished 2910*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),)) 2911*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {1 : 1}})),)):TypeError:('expected str() or unicode() instance, but got int',) 2912*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {u"\0" : 1}})),)):TypeError:('expected string without null bytes',) 2913*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):TypeError:('expected string without null bytes',) 2914*92fdd1e7SBram Moolenaar <<< Finished 2915*92fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),)) 2916*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):TypeError:('expected str() or unicode() instance, but got int',) 2917*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : Mapping({u"\0" : 1})})),)):TypeError:('expected string without null bytes',) 2918*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):TypeError:('expected string without null bytes',) 2919*92fdd1e7SBram Moolenaar <<< Finished 2920*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),)) 2921*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingIter()})),)):TypeError:('unable to convert FailingIter to a Vim structure',) 2922*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):NotImplementedError:('next',) 2923*92fdd1e7SBram Moolenaar <<< Finished 2924*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),)) 2925*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : None})),)):error:("failed to add key 'a' to dictionary",) 2926*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {"": 1}})),)):ValueError:('empty keys are not allowed',) 2927*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {u"": 1}})),)):ValueError:('empty keys are not allowed',) 2928*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingMapping()})),)):NotImplementedError:('keys',) 2929*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):NotImplementedError:('getitem:mappingkey',) 2930*92fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingNumber()})),)):TypeError:('long() argument must be a string or a number',) 2931*92fdd1e7SBram Moolenaar <<< Finished 2932*92fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update((("a", %s),)) 2933*92fdd1e7SBram Moolenaar d.update((("a", FailingIter()),)):TypeError:('unable to convert FailingIter to a Vim structure',) 2934*92fdd1e7SBram Moolenaar d.update((("a", FailingIterNext()),)):NotImplementedError:('next',) 2935*92fdd1e7SBram Moolenaar <<< Finished 2936*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update((("a", %s),)) 2937*92fdd1e7SBram Moolenaar d.update((("a", None),)):error:("failed to add key 'a' to dictionary",) 2938*92fdd1e7SBram Moolenaar d.update((("a", {"": 1}),)):ValueError:('empty keys are not allowed',) 2939*92fdd1e7SBram Moolenaar d.update((("a", {u"": 1}),)):ValueError:('empty keys are not allowed',) 2940*92fdd1e7SBram Moolenaar d.update((("a", FailingMapping()),)):NotImplementedError:('keys',) 2941*92fdd1e7SBram Moolenaar d.update((("a", FailingMappingKey()),)):NotImplementedError:('getitem:mappingkey',) 2942*92fdd1e7SBram Moolenaar d.update((("a", FailingNumber()),)):TypeError:('long() argument must be a string or a number',) 2943*92fdd1e7SBram Moolenaar <<< Finished 2944*92fdd1e7SBram Moolenaar >> DictionaryPopItem 2945*92fdd1e7SBram Moolenaar d.popitem(1, 2):TypeError:('popitem() takes no arguments (2 given)',) 2946*92fdd1e7SBram Moolenaar >> DictionaryHasKey 2947*92fdd1e7SBram Moolenaar d.has_key():TypeError:('has_key() takes exactly one argument (0 given)',) 2948*92fdd1e7SBram Moolenaar > List 2949*92fdd1e7SBram Moolenaar >> ListConstructor 2950*92fdd1e7SBram Moolenaar vim.List(1, 2):TypeError:('function takes at most 1 argument (2 given)',) 2951*92fdd1e7SBram Moolenaar vim.List(a=1):TypeError:('list constructor does not accept keyword arguments',) 2952*92fdd1e7SBram Moolenaar >>> Testing *Iter* using vim.List(%s) 2953*92fdd1e7SBram Moolenaar vim.List(FailingIter()):NotImplementedError:('iter',) 2954*92fdd1e7SBram Moolenaar vim.List(FailingIterNext()):NotImplementedError:('next',) 2955*92fdd1e7SBram Moolenaar <<< Finished 2956*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([{%s : 1}]) 2957*92fdd1e7SBram Moolenaar vim.List([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',) 2958*92fdd1e7SBram Moolenaar vim.List([{u"\0" : 1}]):TypeError:('expected string without null bytes',) 2959*92fdd1e7SBram Moolenaar vim.List([{"\0" : 1}]):TypeError:('expected string without null bytes',) 2960*92fdd1e7SBram Moolenaar <<< Finished 2961*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}]) 2962*92fdd1e7SBram Moolenaar vim.List([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',) 2963*92fdd1e7SBram Moolenaar vim.List([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',) 2964*92fdd1e7SBram Moolenaar vim.List([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',) 2965*92fdd1e7SBram Moolenaar <<< Finished 2966*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}]) 2967*92fdd1e7SBram Moolenaar vim.List([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',) 2968*92fdd1e7SBram Moolenaar vim.List([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',) 2969*92fdd1e7SBram Moolenaar vim.List([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',) 2970*92fdd1e7SBram Moolenaar <<< Finished 2971*92fdd1e7SBram Moolenaar >>> Testing *Iter* using vim.List([{"abcF" : %s}]) 2972*92fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to a Vim structure',) 2973*92fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',) 2974*92fdd1e7SBram Moolenaar <<< Finished 2975*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}]) 2976*92fdd1e7SBram Moolenaar vim.List([{"abcF" : None}]):NOT FAILED 2977*92fdd1e7SBram Moolenaar vim.List([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',) 2978*92fdd1e7SBram Moolenaar vim.List([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',) 2979*92fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',) 2980*92fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',) 2981*92fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',) 2982*92fdd1e7SBram Moolenaar <<< Finished 2983*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([Mapping({%s : 1})]) 2984*92fdd1e7SBram Moolenaar vim.List([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',) 2985*92fdd1e7SBram Moolenaar vim.List([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',) 2986*92fdd1e7SBram Moolenaar vim.List([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',) 2987*92fdd1e7SBram Moolenaar <<< Finished 2988*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})]) 2989*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',) 2990*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',) 2991*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',) 2992*92fdd1e7SBram Moolenaar <<< Finished 2993*92fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})]) 2994*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',) 2995*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',) 2996*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',) 2997*92fdd1e7SBram Moolenaar <<< Finished 2998*92fdd1e7SBram Moolenaar >>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})]) 2999*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to a Vim structure',) 3000*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',) 3001*92fdd1e7SBram Moolenaar <<< Finished 3002*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})]) 3003*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : None})]):NOT FAILED 3004*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',) 3005*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',) 3006*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',) 3007*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',) 3008*92fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',) 3009*92fdd1e7SBram Moolenaar <<< Finished 3010*92fdd1e7SBram Moolenaar >>> Testing *Iter* using vim.List([%s]) 3011*92fdd1e7SBram Moolenaar vim.List([FailingIter()]):TypeError:('unable to convert FailingIter to a Vim structure',) 3012*92fdd1e7SBram Moolenaar vim.List([FailingIterNext()]):NotImplementedError:('next',) 3013*92fdd1e7SBram Moolenaar <<< Finished 3014*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using vim.List([%s]) 3015*92fdd1e7SBram Moolenaar vim.List([None]):NOT FAILED 3016*92fdd1e7SBram Moolenaar vim.List([{"": 1}]):ValueError:('empty keys are not allowed',) 3017*92fdd1e7SBram Moolenaar vim.List([{u"": 1}]):ValueError:('empty keys are not allowed',) 3018*92fdd1e7SBram Moolenaar vim.List([FailingMapping()]):NotImplementedError:('keys',) 3019*92fdd1e7SBram Moolenaar vim.List([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',) 3020*92fdd1e7SBram Moolenaar vim.List([FailingNumber()]):TypeError:('long() argument must be a string or a number',) 3021*92fdd1e7SBram Moolenaar <<< Finished 3022*92fdd1e7SBram Moolenaar >> ListItem 3023*92fdd1e7SBram Moolenaar l[1000]:IndexError:('list index out of range',) 3024*92fdd1e7SBram Moolenaar >> ListAssItem 3025*92fdd1e7SBram Moolenaar ll[1] = 2:error:('list is locked',) 3026*92fdd1e7SBram Moolenaar l[1000] = 3:IndexError:('list index out of range',) 3027*92fdd1e7SBram Moolenaar >> ListAssSlice 3028*92fdd1e7SBram Moolenaar ll[1:100] = "abcJ":error:('list is locked',) 3029*92fdd1e7SBram Moolenaar >>> Testing *Iter* using l[:] = %s 3030*92fdd1e7SBram Moolenaar l[:] = FailingIter():NotImplementedError:('iter',) 3031*92fdd1e7SBram Moolenaar l[:] = FailingIterNext():NotImplementedError:('next',) 3032*92fdd1e7SBram Moolenaar <<< Finished 3033*92fdd1e7SBram Moolenaar nel[1:10:2] = "abcK":ValueError:('attempt to assign sequence of size greater than 2 to extended slice',) 3034*92fdd1e7SBram Moolenaar ('a', 'b', 'c', 'O') 3035*92fdd1e7SBram Moolenaar nel[1:10:2] = "a":ValueError:('attempt to assign sequence of size 1 to extended slice of size 2',) 3036*92fdd1e7SBram Moolenaar ('a', 'b', 'c', 'O') 3037*92fdd1e7SBram Moolenaar nel[1:1:-1] = "a":ValueError:('attempt to assign sequence of size greater than 0 to extended slice',) 3038*92fdd1e7SBram Moolenaar ('a', 'b', 'c', 'O') 3039*92fdd1e7SBram Moolenaar nel[:] = FailingIterNextN(2):NotImplementedError:('next N',) 3040*92fdd1e7SBram Moolenaar ('a', 'b', 'c', 'O') 3041*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [{%s : 1}] 3042*92fdd1e7SBram Moolenaar l[:] = [{1 : 1}]:TypeError:('expected str() or unicode() instance, but got int',) 3043*92fdd1e7SBram Moolenaar l[:] = [{u"\0" : 1}]:TypeError:('expected string without null bytes',) 3044*92fdd1e7SBram Moolenaar l[:] = [{"\0" : 1}]:TypeError:('expected string without null bytes',) 3045*92fdd1e7SBram Moolenaar <<< Finished 3046*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}] 3047*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : {1 : 1}}]:TypeError:('expected str() or unicode() instance, but got int',) 3048*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : {u"\0" : 1}}]:TypeError:('expected string without null bytes',) 3049*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : {"\0" : 1}}]:TypeError:('expected string without null bytes',) 3050*92fdd1e7SBram Moolenaar <<< Finished 3051*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}] 3052*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : Mapping({1 : 1})}]:TypeError:('expected str() or unicode() instance, but got int',) 3053*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : Mapping({u"\0" : 1})}]:TypeError:('expected string without null bytes',) 3054*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : Mapping({"\0" : 1})}]:TypeError:('expected string without null bytes',) 3055*92fdd1e7SBram Moolenaar <<< Finished 3056*92fdd1e7SBram Moolenaar >>> Testing *Iter* using l[:] = [{"abcF" : %s}] 3057*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingIter()}]:TypeError:('unable to convert FailingIter to a Vim structure',) 3058*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingIterNext()}]:NotImplementedError:('next',) 3059*92fdd1e7SBram Moolenaar <<< Finished 3060*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}] 3061*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : None}]:NOT FAILED 3062*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : {"": 1}}]:ValueError:('empty keys are not allowed',) 3063*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : {u"": 1}}]:ValueError:('empty keys are not allowed',) 3064*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingMapping()}]:NotImplementedError:('keys',) 3065*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingMappingKey()}]:NotImplementedError:('getitem:mappingkey',) 3066*92fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingNumber()}]:TypeError:('long() argument must be a string or a number',) 3067*92fdd1e7SBram Moolenaar <<< Finished 3068*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [Mapping({%s : 1})] 3069*92fdd1e7SBram Moolenaar l[:] = [Mapping({1 : 1})]:TypeError:('expected str() or unicode() instance, but got int',) 3070*92fdd1e7SBram Moolenaar l[:] = [Mapping({u"\0" : 1})]:TypeError:('expected string without null bytes',) 3071*92fdd1e7SBram Moolenaar l[:] = [Mapping({"\0" : 1})]:TypeError:('expected string without null bytes',) 3072*92fdd1e7SBram Moolenaar <<< Finished 3073*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})] 3074*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {1 : 1}})]:TypeError:('expected str() or unicode() instance, but got int',) 3075*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {u"\0" : 1}})]:TypeError:('expected string without null bytes',) 3076*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {"\0" : 1}})]:TypeError:('expected string without null bytes',) 3077*92fdd1e7SBram Moolenaar <<< Finished 3078*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})] 3079*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:TypeError:('expected str() or unicode() instance, but got int',) 3080*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : Mapping({u"\0" : 1})})]:TypeError:('expected string without null bytes',) 3081*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:TypeError:('expected string without null bytes',) 3082*92fdd1e7SBram Moolenaar <<< Finished 3083*92fdd1e7SBram Moolenaar >>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})] 3084*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingIter()})]:TypeError:('unable to convert FailingIter to a Vim structure',) 3085*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingIterNext()})]:NotImplementedError:('next',) 3086*92fdd1e7SBram Moolenaar <<< Finished 3087*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})] 3088*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : None})]:NOT FAILED 3089*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {"": 1}})]:ValueError:('empty keys are not allowed',) 3090*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {u"": 1}})]:ValueError:('empty keys are not allowed',) 3091*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingMapping()})]:NotImplementedError:('keys',) 3092*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingMappingKey()})]:NotImplementedError:('getitem:mappingkey',) 3093*92fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingNumber()})]:TypeError:('long() argument must be a string or a number',) 3094*92fdd1e7SBram Moolenaar <<< Finished 3095*92fdd1e7SBram Moolenaar >>> Testing *Iter* using l[:] = [%s] 3096*92fdd1e7SBram Moolenaar l[:] = [FailingIter()]:TypeError:('unable to convert FailingIter to a Vim structure',) 3097*92fdd1e7SBram Moolenaar l[:] = [FailingIterNext()]:NotImplementedError:('next',) 3098*92fdd1e7SBram Moolenaar <<< Finished 3099*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l[:] = [%s] 3100*92fdd1e7SBram Moolenaar l[:] = [None]:NOT FAILED 3101*92fdd1e7SBram Moolenaar l[:] = [{"": 1}]:ValueError:('empty keys are not allowed',) 3102*92fdd1e7SBram Moolenaar l[:] = [{u"": 1}]:ValueError:('empty keys are not allowed',) 3103*92fdd1e7SBram Moolenaar l[:] = [FailingMapping()]:NotImplementedError:('keys',) 3104*92fdd1e7SBram Moolenaar l[:] = [FailingMappingKey()]:NotImplementedError:('getitem:mappingkey',) 3105*92fdd1e7SBram Moolenaar l[:] = [FailingNumber()]:TypeError:('long() argument must be a string or a number',) 3106*92fdd1e7SBram Moolenaar <<< Finished 3107*92fdd1e7SBram Moolenaar >> ListConcatInPlace 3108*92fdd1e7SBram Moolenaar >>> Testing *Iter* using l.extend(%s) 3109*92fdd1e7SBram Moolenaar l.extend(FailingIter()):NotImplementedError:('iter',) 3110*92fdd1e7SBram Moolenaar l.extend(FailingIterNext()):NotImplementedError:('next',) 3111*92fdd1e7SBram Moolenaar <<< Finished 3112*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([{%s : 1}]) 3113*92fdd1e7SBram Moolenaar l.extend([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',) 3114*92fdd1e7SBram Moolenaar l.extend([{u"\0" : 1}]):TypeError:('expected string without null bytes',) 3115*92fdd1e7SBram Moolenaar l.extend([{"\0" : 1}]):TypeError:('expected string without null bytes',) 3116*92fdd1e7SBram Moolenaar <<< Finished 3117*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}]) 3118*92fdd1e7SBram Moolenaar l.extend([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',) 3119*92fdd1e7SBram Moolenaar l.extend([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',) 3120*92fdd1e7SBram Moolenaar l.extend([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',) 3121*92fdd1e7SBram Moolenaar <<< Finished 3122*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}]) 3123*92fdd1e7SBram Moolenaar l.extend([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',) 3124*92fdd1e7SBram Moolenaar l.extend([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',) 3125*92fdd1e7SBram Moolenaar l.extend([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',) 3126*92fdd1e7SBram Moolenaar <<< Finished 3127*92fdd1e7SBram Moolenaar >>> Testing *Iter* using l.extend([{"abcF" : %s}]) 3128*92fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to a Vim structure',) 3129*92fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',) 3130*92fdd1e7SBram Moolenaar <<< Finished 3131*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}]) 3132*92fdd1e7SBram Moolenaar l.extend([{"abcF" : None}]):NOT FAILED 3133*92fdd1e7SBram Moolenaar l.extend([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',) 3134*92fdd1e7SBram Moolenaar l.extend([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',) 3135*92fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',) 3136*92fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',) 3137*92fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',) 3138*92fdd1e7SBram Moolenaar <<< Finished 3139*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([Mapping({%s : 1})]) 3140*92fdd1e7SBram Moolenaar l.extend([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',) 3141*92fdd1e7SBram Moolenaar l.extend([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',) 3142*92fdd1e7SBram Moolenaar l.extend([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',) 3143*92fdd1e7SBram Moolenaar <<< Finished 3144*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})]) 3145*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',) 3146*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',) 3147*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',) 3148*92fdd1e7SBram Moolenaar <<< Finished 3149*92fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})]) 3150*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',) 3151*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',) 3152*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',) 3153*92fdd1e7SBram Moolenaar <<< Finished 3154*92fdd1e7SBram Moolenaar >>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})]) 3155*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to a Vim structure',) 3156*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',) 3157*92fdd1e7SBram Moolenaar <<< Finished 3158*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})]) 3159*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : None})]):NOT FAILED 3160*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',) 3161*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',) 3162*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',) 3163*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',) 3164*92fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',) 3165*92fdd1e7SBram Moolenaar <<< Finished 3166*92fdd1e7SBram Moolenaar >>> Testing *Iter* using l.extend([%s]) 3167*92fdd1e7SBram Moolenaar l.extend([FailingIter()]):TypeError:('unable to convert FailingIter to a Vim structure',) 3168*92fdd1e7SBram Moolenaar l.extend([FailingIterNext()]):NotImplementedError:('next',) 3169*92fdd1e7SBram Moolenaar <<< Finished 3170*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l.extend([%s]) 3171*92fdd1e7SBram Moolenaar l.extend([None]):NOT FAILED 3172*92fdd1e7SBram Moolenaar l.extend([{"": 1}]):ValueError:('empty keys are not allowed',) 3173*92fdd1e7SBram Moolenaar l.extend([{u"": 1}]):ValueError:('empty keys are not allowed',) 3174*92fdd1e7SBram Moolenaar l.extend([FailingMapping()]):NotImplementedError:('keys',) 3175*92fdd1e7SBram Moolenaar l.extend([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',) 3176*92fdd1e7SBram Moolenaar l.extend([FailingNumber()]):TypeError:('long() argument must be a string or a number',) 3177*92fdd1e7SBram Moolenaar <<< Finished 3178*92fdd1e7SBram Moolenaar >> ListSetattr 3179*92fdd1e7SBram Moolenaar del l.locked:AttributeError:('cannot delete vim.List attributes',) 3180*92fdd1e7SBram Moolenaar l.locked = FailingTrue():NotImplementedError:('bool',) 3181*92fdd1e7SBram Moolenaar l.xxx = True:AttributeError:('cannot set attribute xxx',) 3182*92fdd1e7SBram Moolenaar > Function 3183*92fdd1e7SBram Moolenaar >> FunctionConstructor 3184*92fdd1e7SBram Moolenaar >>> FunctionConstructor 3185*92fdd1e7SBram Moolenaar vim.Function("123"):ValueError:('unnamed function 123 does not exist',) 3186*92fdd1e7SBram Moolenaar vim.Function("xxx_non_existent_function_xxx"):ValueError:('function xxx_non_existent_function_xxx does not exist',) 3187*92fdd1e7SBram Moolenaar vim.Function("xxx#non#existent#function#xxx"):NOT FAILED 3188*92fdd1e7SBram Moolenaar vim.Function("xxx_non_existent_function_xxx2", args=[]):ValueError:('function xxx_non_existent_function_xxx2 does not exist',) 3189*92fdd1e7SBram Moolenaar vim.Function("xxx_non_existent_function_xxx3", self={}):ValueError:('function xxx_non_existent_function_xxx3 does not exist',) 3190*92fdd1e7SBram Moolenaar vim.Function("xxx_non_existent_function_xxx4", args=[], self={}):ValueError:('function xxx_non_existent_function_xxx4 does not exist',) 3191*92fdd1e7SBram Moolenaar >>> FunctionNew 3192*92fdd1e7SBram Moolenaar vim.Function("tr", self="abcFuncSelf"):TypeError:('unable to convert str to a Vim dictionary',) 3193*92fdd1e7SBram Moolenaar vim.Function("tr", args=427423):TypeError:('unable to convert int to a Vim list',) 3194*92fdd1e7SBram Moolenaar vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',) 3195*92fdd1e7SBram Moolenaar vim.Function(self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',) 3196*92fdd1e7SBram Moolenaar vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',) 3197*92fdd1e7SBram Moolenaar vim.Function("tr", ""):TypeError:('function takes exactly 1 argument (2 given)',) 3198*92fdd1e7SBram Moolenaar >> FunctionCall 3199*92fdd1e7SBram Moolenaar >>> Testing StringToChars using f({%s : 1}) 3200*92fdd1e7SBram Moolenaar f({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) 3201*92fdd1e7SBram Moolenaar f({u"\0" : 1}):TypeError:('expected string without null bytes',) 3202*92fdd1e7SBram Moolenaar f({"\0" : 1}):TypeError:('expected string without null bytes',) 3203*92fdd1e7SBram Moolenaar <<< Finished 3204*92fdd1e7SBram Moolenaar >>> Testing StringToChars using f({"abcF" : {%s : 1}}) 3205*92fdd1e7SBram Moolenaar f({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',) 3206*92fdd1e7SBram Moolenaar f({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',) 3207*92fdd1e7SBram Moolenaar f({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',) 3208*92fdd1e7SBram Moolenaar <<< Finished 3209*92fdd1e7SBram Moolenaar >>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})}) 3210*92fdd1e7SBram Moolenaar f({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',) 3211*92fdd1e7SBram Moolenaar f({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',) 3212*92fdd1e7SBram Moolenaar f({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',) 3213*92fdd1e7SBram Moolenaar <<< Finished 3214*92fdd1e7SBram Moolenaar >>> Testing *Iter* using f({"abcF" : %s}) 3215*92fdd1e7SBram Moolenaar f({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',) 3216*92fdd1e7SBram Moolenaar f({"abcF" : FailingIterNext()}):NotImplementedError:('next',) 3217*92fdd1e7SBram Moolenaar <<< Finished 3218*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using f({"abcF" : %s}) 3219*92fdd1e7SBram Moolenaar f({"abcF" : None}):NOT FAILED 3220*92fdd1e7SBram Moolenaar f({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) 3221*92fdd1e7SBram Moolenaar f({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) 3222*92fdd1e7SBram Moolenaar f({"abcF" : FailingMapping()}):NotImplementedError:('keys',) 3223*92fdd1e7SBram Moolenaar f({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) 3224*92fdd1e7SBram Moolenaar f({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) 3225*92fdd1e7SBram Moolenaar <<< Finished 3226*92fdd1e7SBram Moolenaar >>> Testing StringToChars using f(Mapping({%s : 1})) 3227*92fdd1e7SBram Moolenaar f(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) 3228*92fdd1e7SBram Moolenaar f(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',) 3229*92fdd1e7SBram Moolenaar f(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',) 3230*92fdd1e7SBram Moolenaar <<< Finished 3231*92fdd1e7SBram Moolenaar >>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}})) 3232*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',) 3233*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',) 3234*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',) 3235*92fdd1e7SBram Moolenaar <<< Finished 3236*92fdd1e7SBram Moolenaar >>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})})) 3237*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',) 3238*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',) 3239*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',) 3240*92fdd1e7SBram Moolenaar <<< Finished 3241*92fdd1e7SBram Moolenaar >>> Testing *Iter* using f(Mapping({"abcG" : %s})) 3242*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',) 3243*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) 3244*92fdd1e7SBram Moolenaar <<< Finished 3245*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s})) 3246*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : None})):NOT FAILED 3247*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) 3248*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) 3249*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) 3250*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) 3251*92fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) 3252*92fdd1e7SBram Moolenaar <<< Finished 3253*92fdd1e7SBram Moolenaar >>> Testing *Iter* using f(%s) 3254*92fdd1e7SBram Moolenaar f(FailingIter()):TypeError:('unable to convert FailingIter to a Vim structure',) 3255*92fdd1e7SBram Moolenaar f(FailingIterNext()):NotImplementedError:('next',) 3256*92fdd1e7SBram Moolenaar <<< Finished 3257*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using f(%s) 3258*92fdd1e7SBram Moolenaar f(None):NOT FAILED 3259*92fdd1e7SBram Moolenaar f({"": 1}):ValueError:('empty keys are not allowed',) 3260*92fdd1e7SBram Moolenaar f({u"": 1}):ValueError:('empty keys are not allowed',) 3261*92fdd1e7SBram Moolenaar f(FailingMapping()):NotImplementedError:('keys',) 3262*92fdd1e7SBram Moolenaar f(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) 3263*92fdd1e7SBram Moolenaar f(FailingNumber()):TypeError:('long() argument must be a string or a number',) 3264*92fdd1e7SBram Moolenaar <<< Finished 3265*92fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self={%s : 1}) 3266*92fdd1e7SBram Moolenaar fd(self={1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) 3267*92fdd1e7SBram Moolenaar fd(self={u"\0" : 1}):TypeError:('expected string without null bytes',) 3268*92fdd1e7SBram Moolenaar fd(self={"\0" : 1}):TypeError:('expected string without null bytes',) 3269*92fdd1e7SBram Moolenaar <<< Finished 3270*92fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self={"abcF" : {%s : 1}}) 3271*92fdd1e7SBram Moolenaar fd(self={"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',) 3272*92fdd1e7SBram Moolenaar fd(self={"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',) 3273*92fdd1e7SBram Moolenaar fd(self={"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',) 3274*92fdd1e7SBram Moolenaar <<< Finished 3275*92fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})}) 3276*92fdd1e7SBram Moolenaar fd(self={"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',) 3277*92fdd1e7SBram Moolenaar fd(self={"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',) 3278*92fdd1e7SBram Moolenaar fd(self={"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',) 3279*92fdd1e7SBram Moolenaar <<< Finished 3280*92fdd1e7SBram Moolenaar >>> Testing *Iter* using fd(self={"abcF" : %s}) 3281*92fdd1e7SBram Moolenaar fd(self={"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',) 3282*92fdd1e7SBram Moolenaar fd(self={"abcF" : FailingIterNext()}):NotImplementedError:('next',) 3283*92fdd1e7SBram Moolenaar <<< Finished 3284*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using fd(self={"abcF" : %s}) 3285*92fdd1e7SBram Moolenaar fd(self={"abcF" : None}):NOT FAILED 3286*92fdd1e7SBram Moolenaar fd(self={"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) 3287*92fdd1e7SBram Moolenaar fd(self={"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) 3288*92fdd1e7SBram Moolenaar fd(self={"abcF" : FailingMapping()}):NotImplementedError:('keys',) 3289*92fdd1e7SBram Moolenaar fd(self={"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) 3290*92fdd1e7SBram Moolenaar fd(self={"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) 3291*92fdd1e7SBram Moolenaar <<< Finished 3292*92fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self=Mapping({%s : 1})) 3293*92fdd1e7SBram Moolenaar fd(self=Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) 3294*92fdd1e7SBram Moolenaar fd(self=Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',) 3295*92fdd1e7SBram Moolenaar fd(self=Mapping({"\0" : 1})):TypeError:('expected string without null bytes',) 3296*92fdd1e7SBram Moolenaar <<< Finished 3297*92fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}})) 3298*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',) 3299*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',) 3300*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',) 3301*92fdd1e7SBram Moolenaar <<< Finished 3302*92fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})})) 3303*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',) 3304*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',) 3305*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',) 3306*92fdd1e7SBram Moolenaar <<< Finished 3307*92fdd1e7SBram Moolenaar >>> Testing *Iter* using fd(self=Mapping({"abcG" : %s})) 3308*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',) 3309*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) 3310*92fdd1e7SBram Moolenaar <<< Finished 3311*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s})) 3312*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : None})):NOT FAILED 3313*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) 3314*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) 3315*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) 3316*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) 3317*92fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) 3318*92fdd1e7SBram Moolenaar <<< Finished 3319*92fdd1e7SBram Moolenaar >>> Testing *Iter* using fd(self=%s) 3320*92fdd1e7SBram Moolenaar fd(self=FailingIter()):TypeError:('unable to convert FailingIter to a Vim dictionary',) 3321*92fdd1e7SBram Moolenaar fd(self=FailingIterNext()):TypeError:('unable to convert FailingIterNext to a Vim dictionary',) 3322*92fdd1e7SBram Moolenaar <<< Finished 3323*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using fd(self=%s) 3324*92fdd1e7SBram Moolenaar fd(self=None):TypeError:('unable to convert NoneType to a Vim dictionary',) 3325*92fdd1e7SBram Moolenaar fd(self={"": 1}):ValueError:('empty keys are not allowed',) 3326*92fdd1e7SBram Moolenaar fd(self={u"": 1}):ValueError:('empty keys are not allowed',) 3327*92fdd1e7SBram Moolenaar fd(self=FailingMapping()):NotImplementedError:('keys',) 3328*92fdd1e7SBram Moolenaar fd(self=FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) 3329*92fdd1e7SBram Moolenaar fd(self=FailingNumber()):TypeError:('unable to convert FailingNumber to a Vim dictionary',) 3330*92fdd1e7SBram Moolenaar <<< Finished 3331*92fdd1e7SBram Moolenaar >>> Testing ConvertFromPyMapping using fd(self=%s) 3332*92fdd1e7SBram Moolenaar fd(self=[]):TypeError:('unable to convert list to a Vim dictionary',) 3333*92fdd1e7SBram Moolenaar <<< Finished 3334*92fdd1e7SBram Moolenaar > TabPage 3335*92fdd1e7SBram Moolenaar >> TabPageAttr 3336*92fdd1e7SBram Moolenaar vim.current.tabpage.xxx:AttributeError:('xxx',) 3337*92fdd1e7SBram Moolenaar > TabList 3338*92fdd1e7SBram Moolenaar >> TabListItem 3339*92fdd1e7SBram Moolenaar vim.tabpages[1000]:IndexError:('no such tab page',) 3340*92fdd1e7SBram Moolenaar > Window 3341*92fdd1e7SBram Moolenaar >> WindowAttr 3342*92fdd1e7SBram Moolenaar vim.current.window.xxx:AttributeError:('xxx',) 3343*92fdd1e7SBram Moolenaar >> WindowSetattr 3344*92fdd1e7SBram Moolenaar vim.current.window.buffer = 0:TypeError:('readonly attribute: buffer',) 3345*92fdd1e7SBram Moolenaar vim.current.window.cursor = (100000000, 100000000):error:('cursor position outside buffer',) 3346*92fdd1e7SBram Moolenaar vim.current.window.cursor = True:TypeError:('argument must be 2-item sequence, not bool',) 3347*92fdd1e7SBram Moolenaar >>> Testing NumberToLong using vim.current.window.height = %s 3348*92fdd1e7SBram Moolenaar vim.current.window.height = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 3349*92fdd1e7SBram Moolenaar vim.current.window.height = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 3350*92fdd1e7SBram Moolenaar vim.current.window.height = -1:ValueError:('number must be greater or equal to zero',) 3351*92fdd1e7SBram Moolenaar <<< Finished 3352*92fdd1e7SBram Moolenaar >>> Testing NumberToLong using vim.current.window.width = %s 3353*92fdd1e7SBram Moolenaar vim.current.window.width = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 3354*92fdd1e7SBram Moolenaar vim.current.window.width = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 3355*92fdd1e7SBram Moolenaar vim.current.window.width = -1:ValueError:('number must be greater or equal to zero',) 3356*92fdd1e7SBram Moolenaar <<< Finished 3357*92fdd1e7SBram Moolenaar vim.current.window.xxxxxx = True:AttributeError:('xxxxxx',) 3358*92fdd1e7SBram Moolenaar > WinList 3359*92fdd1e7SBram Moolenaar >> WinListItem 3360*92fdd1e7SBram Moolenaar vim.windows[1000]:IndexError:('no such window',) 3361*92fdd1e7SBram Moolenaar > Buffer 3362*92fdd1e7SBram Moolenaar >> StringToLine (indirect) 3363*92fdd1e7SBram Moolenaar vim.current.buffer[0] = u"\na":error:('string cannot contain newlines',) 3364*92fdd1e7SBram Moolenaar vim.current.buffer[0] = "\na":error:('string cannot contain newlines',) 3365*92fdd1e7SBram Moolenaar >> SetBufferLine (indirect) 3366*92fdd1e7SBram Moolenaar vim.current.buffer[0] = True:TypeError:('bad argument type for built-in operation',) 3367*92fdd1e7SBram Moolenaar >> SetBufferLineList (indirect) 3368*92fdd1e7SBram Moolenaar vim.current.buffer[:] = True:TypeError:('bad argument type for built-in operation',) 3369*92fdd1e7SBram Moolenaar vim.current.buffer[:] = ["\na", "bc"]:error:('string cannot contain newlines',) 3370*92fdd1e7SBram Moolenaar >> InsertBufferLines (indirect) 3371*92fdd1e7SBram Moolenaar vim.current.buffer.append(None):TypeError:('bad argument type for built-in operation',) 3372*92fdd1e7SBram Moolenaar vim.current.buffer.append(["\na", "bc"]):error:('string cannot contain newlines',) 3373*92fdd1e7SBram Moolenaar vim.current.buffer.append("\nbc"):error:('string cannot contain newlines',) 3374*92fdd1e7SBram Moolenaar >> RBItem 3375*92fdd1e7SBram Moolenaar vim.current.buffer[100000000]:IndexError:('line number out of range',) 3376*92fdd1e7SBram Moolenaar >> RBAsItem 3377*92fdd1e7SBram Moolenaar vim.current.buffer[100000000] = "":IndexError:('line number out of range',) 3378*92fdd1e7SBram Moolenaar >> BufferAttr 3379*92fdd1e7SBram Moolenaar vim.current.buffer.xxx:AttributeError:('xxx',) 3380*92fdd1e7SBram Moolenaar >> BufferSetattr 3381*92fdd1e7SBram Moolenaar vim.current.buffer.name = True:TypeError:('expected str() or unicode() instance, but got bool',) 3382*92fdd1e7SBram Moolenaar vim.current.buffer.xxx = True:AttributeError:('xxx',) 3383*92fdd1e7SBram Moolenaar >> BufferMark 3384*92fdd1e7SBram Moolenaar vim.current.buffer.mark(0):TypeError:('expected str() or unicode() instance, but got int',) 3385*92fdd1e7SBram Moolenaar vim.current.buffer.mark("abcM"):ValueError:('mark name must be a single character',) 3386*92fdd1e7SBram Moolenaar vim.current.buffer.mark("!"):error:('invalid mark name',) 3387*92fdd1e7SBram Moolenaar >> BufferRange 3388*92fdd1e7SBram Moolenaar vim.current.buffer.range(1, 2, 3):TypeError:('function takes exactly 2 arguments (3 given)',) 3389*92fdd1e7SBram Moolenaar > BufMap 3390*92fdd1e7SBram Moolenaar >> BufMapItem 3391*92fdd1e7SBram Moolenaar vim.buffers[100000000]:KeyError:(100000000,) 3392*92fdd1e7SBram Moolenaar >>> Testing NumberToLong using vim.buffers[%s] 3393*92fdd1e7SBram Moolenaar vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 3394*92fdd1e7SBram Moolenaar vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 3395*92fdd1e7SBram Moolenaar vim.buffers[-1]:ValueError:('number must be greater than zero',) 3396*92fdd1e7SBram Moolenaar vim.buffers[0]:ValueError:('number must be greater than zero',) 3397*92fdd1e7SBram Moolenaar <<< Finished 3398*92fdd1e7SBram Moolenaar > Current 3399*92fdd1e7SBram Moolenaar >> CurrentGetattr 3400*92fdd1e7SBram Moolenaar vim.current.xxx:AttributeError:('xxx',) 3401*92fdd1e7SBram Moolenaar >> CurrentSetattr 3402*92fdd1e7SBram Moolenaar vim.current.line = True:TypeError:('bad argument type for built-in operation',) 3403*92fdd1e7SBram Moolenaar vim.current.buffer = True:TypeError:('expected vim.Buffer object, but got bool',) 3404*92fdd1e7SBram Moolenaar vim.current.window = True:TypeError:('expected vim.Window object, but got bool',) 3405*92fdd1e7SBram Moolenaar vim.current.tabpage = True:TypeError:('expected vim.TabPage object, but got bool',) 3406*92fdd1e7SBram Moolenaar vim.current.xxx = True:AttributeError:('xxx',) 3407*92fdd1e7SBram Moolenaar END 3408*92fdd1e7SBram Moolenaar 3409*92fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 3410*92fdd1e7SBram Moolenaar close! 3411*92fdd1e7SBram Moolenaarendfunc 3412*92fdd1e7SBram Moolenaar 3413*92fdd1e7SBram Moolenaar" Test import 3414*92fdd1e7SBram Moolenaarfunc Test_python_import() 3415*92fdd1e7SBram Moolenaar new 3416*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 3417*92fdd1e7SBram Moolenaar 3418*92fdd1e7SBram Moolenaar py << trim EOF 3419*92fdd1e7SBram Moolenaar sys.path.insert(0, os.path.join(os.getcwd(), 'python_before')) 3420*92fdd1e7SBram Moolenaar sys.path.append(os.path.join(os.getcwd(), 'python_after')) 3421*92fdd1e7SBram Moolenaar vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\') 3422*92fdd1e7SBram Moolenaar l = [] 3423*92fdd1e7SBram Moolenaar def callback(path): 3424*92fdd1e7SBram Moolenaar l.append(path[-len('/testdir'):].replace(os.path.sep, '/')) 3425*92fdd1e7SBram Moolenaar vim.foreach_rtp(callback) 3426*92fdd1e7SBram Moolenaar cb.append(repr(l)) 3427*92fdd1e7SBram Moolenaar del l 3428*92fdd1e7SBram Moolenaar def callback(path): 3429*92fdd1e7SBram Moolenaar return path[-len('/testdir'):].replace(os.path.sep, '/') 3430*92fdd1e7SBram Moolenaar cb.append(repr(vim.foreach_rtp(callback))) 3431*92fdd1e7SBram Moolenaar del callback 3432*92fdd1e7SBram Moolenaar from module import dir as d 3433*92fdd1e7SBram Moolenaar from modulex import ddir 3434*92fdd1e7SBram Moolenaar cb.append(d + ',' + ddir) 3435*92fdd1e7SBram Moolenaar import before 3436*92fdd1e7SBram Moolenaar cb.append(before.dir) 3437*92fdd1e7SBram Moolenaar import after 3438*92fdd1e7SBram Moolenaar cb.append(after.dir) 3439*92fdd1e7SBram Moolenaar import topmodule as tm 3440*92fdd1e7SBram Moolenaar import topmodule.submodule as tms 3441*92fdd1e7SBram Moolenaar import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss 3442*92fdd1e7SBram Moolenaar cb.append(tm.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):]) 3443*92fdd1e7SBram Moolenaar cb.append(tms.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):]) 3444*92fdd1e7SBram Moolenaar cb.append(tmsss.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):]) 3445*92fdd1e7SBram Moolenaar del before 3446*92fdd1e7SBram Moolenaar del after 3447*92fdd1e7SBram Moolenaar del d 3448*92fdd1e7SBram Moolenaar del ddir 3449*92fdd1e7SBram Moolenaar del tm 3450*92fdd1e7SBram Moolenaar del tms 3451*92fdd1e7SBram Moolenaar del tmsss 3452*92fdd1e7SBram Moolenaar EOF 3453*92fdd1e7SBram Moolenaar 3454*92fdd1e7SBram Moolenaar let expected =<< trim END 3455*92fdd1e7SBram Moolenaar ['/testdir'] 3456*92fdd1e7SBram Moolenaar '/testdir' 3457*92fdd1e7SBram Moolenaar 2,xx 3458*92fdd1e7SBram Moolenaar before 3459*92fdd1e7SBram Moolenaar after 3460*92fdd1e7SBram Moolenaar pythonx/topmodule/__init__.py 3461*92fdd1e7SBram Moolenaar pythonx/topmodule/submodule/__init__.py 3462*92fdd1e7SBram Moolenaar pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py 3463*92fdd1e7SBram Moolenaar END 3464*92fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 3465*92fdd1e7SBram Moolenaar close! 3466*92fdd1e7SBram Moolenaarendfunc 3467*92fdd1e7SBram Moolenaar 3468*92fdd1e7SBram Moolenaar" Test exceptions 3469*92fdd1e7SBram Moolenaarfunc Test_python_exception() 3470*92fdd1e7SBram Moolenaar fun Exe(e) 3471*92fdd1e7SBram Moolenaar execute a:e 3472*92fdd1e7SBram Moolenaar endfun 3473*92fdd1e7SBram Moolenaar 3474*92fdd1e7SBram Moolenaar new 3475*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 3476*92fdd1e7SBram Moolenaar 3477*92fdd1e7SBram Moolenaar py << trim EOF 3478*92fdd1e7SBram Moolenaar Exe = vim.bindeval('function("Exe")') 3479*92fdd1e7SBram Moolenaar ee('vim.command("throw \'abcN\'")') 3480*92fdd1e7SBram Moolenaar ee('Exe("throw \'def\'")') 3481*92fdd1e7SBram Moolenaar ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")') 3482*92fdd1e7SBram Moolenaar ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")') 3483*92fdd1e7SBram Moolenaar ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")') 3484*92fdd1e7SBram Moolenaar ee('vim.eval("xxx_unknown_function_xxx()")') 3485*92fdd1e7SBram Moolenaar ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")') 3486*92fdd1e7SBram Moolenaar del Exe 3487*92fdd1e7SBram Moolenaar EOF 3488*92fdd1e7SBram Moolenaar delfunction Exe 3489*92fdd1e7SBram Moolenaar 3490*92fdd1e7SBram Moolenaar let expected =<< trim END 3491*92fdd1e7SBram Moolenaar vim.command("throw 'abcN'"):error:('abcN',) 3492*92fdd1e7SBram Moolenaar Exe("throw 'def'"):error:('def',) 3493*92fdd1e7SBram Moolenaar vim.eval("Exe('throw ''ghi''')"):error:('ghi',) 3494*92fdd1e7SBram Moolenaar vim.eval("Exe('echoerr ''jkl''')"):error:('Vim(echoerr):jkl',) 3495*92fdd1e7SBram Moolenaar vim.eval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',) 3496*92fdd1e7SBram Moolenaar vim.eval("xxx_unknown_function_xxx()"):error:('Vim:E117: Unknown function: xxx_unknown_function_xxx',) 3497*92fdd1e7SBram Moolenaar vim.bindeval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',) 3498*92fdd1e7SBram Moolenaar END 3499*92fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 3500*92fdd1e7SBram Moolenaar close! 3501*92fdd1e7SBram Moolenaarendfunc 3502*92fdd1e7SBram Moolenaar 3503*92fdd1e7SBram Moolenaar" Regression: interrupting vim.command propagates to next vim.command 3504*92fdd1e7SBram Moolenaarfunc Test_python_keyboard_interrupt() 3505*92fdd1e7SBram Moolenaar new 3506*92fdd1e7SBram Moolenaar py cb = vim.current.buffer 3507*92fdd1e7SBram Moolenaar py << trim EOF 3508*92fdd1e7SBram Moolenaar def test_keyboard_interrupt(): 3509*92fdd1e7SBram Moolenaar try: 3510*92fdd1e7SBram Moolenaar vim.command('while 1 | endwhile') 3511*92fdd1e7SBram Moolenaar except KeyboardInterrupt: 3512*92fdd1e7SBram Moolenaar cb.append('Caught KeyboardInterrupt') 3513*92fdd1e7SBram Moolenaar except Exception: 3514*92fdd1e7SBram Moolenaar cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info())) 3515*92fdd1e7SBram Moolenaar else: 3516*92fdd1e7SBram Moolenaar cb.append('!!!!!!!! No exception') 3517*92fdd1e7SBram Moolenaar try: 3518*92fdd1e7SBram Moolenaar vim.command('$ put =\'Running :put\'') 3519*92fdd1e7SBram Moolenaar except KeyboardInterrupt: 3520*92fdd1e7SBram Moolenaar cb.append('!!!!!!!! Caught KeyboardInterrupt') 3521*92fdd1e7SBram Moolenaar except Exception: 3522*92fdd1e7SBram Moolenaar cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info())) 3523*92fdd1e7SBram Moolenaar else: 3524*92fdd1e7SBram Moolenaar cb.append('No exception') 3525*92fdd1e7SBram Moolenaar EOF 3526*92fdd1e7SBram Moolenaar 3527*92fdd1e7SBram Moolenaar debuggreedy 3528*92fdd1e7SBram Moolenaar call inputsave() 3529*92fdd1e7SBram Moolenaar call feedkeys("s\ns\ns\ns\nq\n") 3530*92fdd1e7SBram Moolenaar redir => output 3531*92fdd1e7SBram Moolenaar debug silent! py test_keyboard_interrupt() 3532*92fdd1e7SBram Moolenaar redir END 3533*92fdd1e7SBram Moolenaar 0 debuggreedy 3534*92fdd1e7SBram Moolenaar call inputrestore() 3535*92fdd1e7SBram Moolenaar py del test_keyboard_interrupt 3536*92fdd1e7SBram Moolenaar 3537*92fdd1e7SBram Moolenaar let expected =<< trim END 3538*92fdd1e7SBram Moolenaar Caught KeyboardInterrupt 3539*92fdd1e7SBram Moolenaar Running :put 3540*92fdd1e7SBram Moolenaar No exception 3541*92fdd1e7SBram Moolenaar END 3542*92fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 3543*92fdd1e7SBram Moolenaar call assert_equal('', output) 3544*92fdd1e7SBram Moolenaar close! 3545*92fdd1e7SBram Moolenaarendfunc 3546*92fdd1e7SBram Moolenaar 35476c2b7b80SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 3548