1a58883b4SBram Moolenaar" Test for python 2 commands. 2a58883b4SBram Moolenaar 3b46fecd3SBram Moolenaarsource check.vim 4b46fecd3SBram MoolenaarCheckFeature python 592fdd1e7SBram MoolenaarCheckFeature quickfix 6ab589463SBram Moolenaarsource shared.vim 792fdd1e7SBram Moolenaar 892fdd1e7SBram Moolenaar" NOTE: This will cause errors when run under valgrind. 992fdd1e7SBram Moolenaar" This would require recompiling Python with: 1092fdd1e7SBram Moolenaar" ./configure --without-pymalloc 1192fdd1e7SBram Moolenaar" See http://svn.python.org/view/python/trunk/Misc/README.valgrind?view=markup 1292fdd1e7SBram Moolenaar" 1392fdd1e7SBram Moolenaar 1492fdd1e7SBram Moolenaar" This function should be called first. This sets up python functions used by 1592fdd1e7SBram Moolenaar" the other tests. 1692fdd1e7SBram Moolenaarfunc Test_AAA_python_setup() 1792fdd1e7SBram Moolenaar py << trim EOF 1892fdd1e7SBram Moolenaar import vim 1992fdd1e7SBram Moolenaar import sys 2092fdd1e7SBram Moolenaar 2192fdd1e7SBram Moolenaar def emsg(ei): 2292fdd1e7SBram Moolenaar return ei[0].__name__ + ':' + repr(ei[1].args) 2392fdd1e7SBram Moolenaar 2492fdd1e7SBram Moolenaar def ee(expr, g=globals(), l=locals()): 2592fdd1e7SBram Moolenaar try: 2692fdd1e7SBram Moolenaar exec(expr, g, l) 2792fdd1e7SBram Moolenaar except: 2892fdd1e7SBram Moolenaar ei = sys.exc_info() 2992fdd1e7SBram Moolenaar msg = emsg(ei) 3092fdd1e7SBram Moolenaar msg = msg.replace('TypeError:(\'argument 1 ', 'TypeError:(\'') 3192fdd1e7SBram Moolenaar if expr.find('None') > -1: 3292fdd1e7SBram Moolenaar msg = msg.replace('TypeError:(\'iteration over non-sequence\',)', 3392fdd1e7SBram Moolenaar 'TypeError:("\'NoneType\' object is not iterable",)') 3492fdd1e7SBram Moolenaar if expr.find('FailingNumber') > -1: 3592fdd1e7SBram Moolenaar msg = msg.replace(', not \'FailingNumber\'', '').replace('"', '\'') 3692fdd1e7SBram Moolenaar msg = msg.replace('TypeError:(\'iteration over non-sequence\',)', 3792fdd1e7SBram Moolenaar 'TypeError:("\'FailingNumber\' object is not iterable",)') 3892fdd1e7SBram Moolenaar if msg.find('(\'\'') > -1 or msg.find('(\'can\'t') > -1: 3992fdd1e7SBram Moolenaar msg = msg.replace('(\'', '("').replace('\',)', '",)') 4092fdd1e7SBram Moolenaar # Some Python versions say can't, others cannot. 4192fdd1e7SBram Moolenaar if msg.find('can\'t') > -1: 4292fdd1e7SBram Moolenaar msg = msg.replace('can\'t', 'cannot') 4392fdd1e7SBram Moolenaar # Some Python versions use single quote, some double quote 4492fdd1e7SBram Moolenaar if msg.find('"cannot ') > -1: 4592fdd1e7SBram Moolenaar msg = msg.replace('"cannot ', '\'cannot ') 4692fdd1e7SBram Moolenaar if msg.find(' attributes"') > -1: 4792fdd1e7SBram Moolenaar msg = msg.replace(' attributes"', ' attributes\'') 4892fdd1e7SBram Moolenaar if expr == 'fd(self=[])': 4992fdd1e7SBram Moolenaar # HACK: PyMapping_Check changed meaning 5092fdd1e7SBram Moolenaar msg = msg.replace('AttributeError:(\'keys\',)', 5192fdd1e7SBram Moolenaar 'TypeError:(\'unable to convert list to vim dictionary\',)') 5292fdd1e7SBram Moolenaar vim.current.buffer.append(expr + ':' + msg) 5392fdd1e7SBram Moolenaar else: 5492fdd1e7SBram Moolenaar vim.current.buffer.append(expr + ':NOT FAILED') 5592fdd1e7SBram Moolenaar EOF 5692fdd1e7SBram Moolenaarendfunc 57a58883b4SBram Moolenaar 58a58883b4SBram Moolenaarfunc Test_pydo() 59ab589463SBram Moolenaar " Check deleting lines does not trigger an ml_get error. 60a58883b4SBram Moolenaar new 61a58883b4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 62a58883b4SBram Moolenaar pydo vim.command("%d_") 63a58883b4SBram Moolenaar bwipe! 64a58883b4SBram Moolenaar 65ab589463SBram Moolenaar " Check switching to another buffer does not trigger an ml_get error. 66a58883b4SBram Moolenaar new 67a58883b4SBram Moolenaar let wincount = winnr('$') 68a58883b4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 69a58883b4SBram Moolenaar pydo vim.command("new") 70a58883b4SBram Moolenaar call assert_equal(wincount + 1, winnr('$')) 71a58883b4SBram Moolenaar bwipe! 72a58883b4SBram Moolenaar bwipe! 73ab589463SBram Moolenaar 74ab589463SBram Moolenaar " Try modifying a buffer with 'nomodifiable' set 75ab589463SBram Moolenaar set nomodifiable 76ab589463SBram Moolenaar call assert_fails('pydo toupper(line)', 'cannot save undo information') 77ab589463SBram Moolenaar set modifiable 78ab589463SBram Moolenaar 79ab589463SBram Moolenaar " Invalid command 80ab589463SBram Moolenaar call AssertException(['pydo non_existing_cmd'], 81ab589463SBram Moolenaar \ "Vim(pydo):NameError: global name 'non_existing_cmd' is not defined") 82ab589463SBram Moolenaar call AssertException(["pydo raise Exception('test')"], 83ab589463SBram Moolenaar \ 'Vim(pydo):Exception: test') 84ab589463SBram Moolenaar call AssertException(["pydo {lambda}"], 85ab589463SBram Moolenaar \ 'Vim(pydo):SyntaxError: invalid syntax') 86a58883b4SBram Moolenaarendfunc 8753901442SBram Moolenaar 8853901442SBram Moolenaarfunc Test_set_cursor() 8953901442SBram Moolenaar " Check that setting the cursor position works. 9053901442SBram Moolenaar new 9153901442SBram Moolenaar call setline(1, ['first line', 'second line']) 9253901442SBram Moolenaar normal gg 9353901442SBram Moolenaar pydo vim.current.window.cursor = (1, 5) 9453901442SBram Moolenaar call assert_equal([1, 6], [line('.'), col('.')]) 9553901442SBram Moolenaar 9653901442SBram Moolenaar " Check that movement after setting cursor position keeps current column. 9753901442SBram Moolenaar normal j 9853901442SBram Moolenaar call assert_equal([2, 6], [line('.'), col('.')]) 9953901442SBram Moolenaarendfunc 1009123c0b3SBram Moolenaar 1019123c0b3SBram Moolenaarfunc Test_vim_function() 1029123c0b3SBram Moolenaar " Check creating vim.Function object 1039123c0b3SBram Moolenaar 1049123c0b3SBram Moolenaar func s:foo() 1059123c0b3SBram Moolenaar return matchstr(expand('<sfile>'), '<SNR>\zs\d\+_foo$') 1069123c0b3SBram Moolenaar endfunc 1079123c0b3SBram Moolenaar let name = '<SNR>' . s:foo() 1089123c0b3SBram Moolenaar 1099123c0b3SBram Moolenaar try 1109123c0b3SBram Moolenaar py f = vim.bindeval('function("s:foo")') 1119123c0b3SBram Moolenaar call assert_equal(name, pyeval('f.name')) 1129123c0b3SBram Moolenaar catch 1139123c0b3SBram Moolenaar call assert_false(v:exception) 1149123c0b3SBram Moolenaar endtry 1159123c0b3SBram Moolenaar 1169123c0b3SBram Moolenaar try 1179123c0b3SBram Moolenaar py f = vim.Function('\x80\xfdR' + vim.eval('s:foo()')) 1183f4f3d8eSBram Moolenaar call assert_equal(name, 'f.name'->pyeval()) 1199123c0b3SBram Moolenaar catch 1209123c0b3SBram Moolenaar call assert_false(v:exception) 1219123c0b3SBram Moolenaar endtry 1229123c0b3SBram Moolenaar 123ab589463SBram Moolenaar " Non-existing function attribute 124ab589463SBram Moolenaar call AssertException(["let x = pyeval('f.abc')"], 125ab589463SBram Moolenaar \ 'Vim(let):AttributeError: abc') 12692fdd1e7SBram Moolenaar 1279123c0b3SBram Moolenaar py del f 1289123c0b3SBram Moolenaar delfunc s:foo 1299123c0b3SBram Moolenaarendfunc 13014816ad6SBram Moolenaar 13114816ad6SBram Moolenaarfunc Test_skipped_python_command_does_not_affect_pyxversion() 13214816ad6SBram Moolenaar set pyxversion=0 13314816ad6SBram Moolenaar if 0 13414816ad6SBram Moolenaar python import vim 13514816ad6SBram Moolenaar endif 13614816ad6SBram Moolenaar call assert_equal(0, &pyxversion) " This assertion would have failed with Vim 8.0.0251. (pyxversion was introduced in 8.0.0251.) 13714816ad6SBram Moolenaarendfunc 13863dbfd33SBram Moolenaar 13963dbfd33SBram Moolenaarfunc _SetUpHiddenBuffer() 14063dbfd33SBram Moolenaar new 14163dbfd33SBram Moolenaar edit hidden 14263dbfd33SBram Moolenaar setlocal bufhidden=hide 14363dbfd33SBram Moolenaar 14463dbfd33SBram Moolenaar enew 14563dbfd33SBram Moolenaar let lnum = 0 14663dbfd33SBram Moolenaar while lnum < 10 14763dbfd33SBram Moolenaar call append( 1, string( lnum ) ) 14863dbfd33SBram Moolenaar let lnum = lnum + 1 14963dbfd33SBram Moolenaar endwhile 15063dbfd33SBram Moolenaar normal G 15163dbfd33SBram Moolenaar 15263dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 15363dbfd33SBram Moolenaarendfunc 15463dbfd33SBram Moolenaar 155bfd36036SBram Moolenaarfunc _CleanUpHiddenBuffer() 156bfd36036SBram Moolenaar bwipe! hidden 157bfd36036SBram Moolenaar bwipe! 158bfd36036SBram Moolenaarendfunc 159bfd36036SBram Moolenaar 16063dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_Clear() 16163dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 16263dbfd33SBram Moolenaar py vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][:] = None 16363dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 164bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 16563dbfd33SBram Moolenaarendfunc 16663dbfd33SBram Moolenaar 16763dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_List() 16863dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 16963dbfd33SBram Moolenaar py vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][:] = [ 'test' ] 17063dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 171bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 17263dbfd33SBram Moolenaarendfunc 17363dbfd33SBram Moolenaar 17463dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_Str() 17563dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 17663dbfd33SBram Moolenaar py vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][0] = 'test' 17763dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 178bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 17963dbfd33SBram Moolenaarendfunc 18063dbfd33SBram Moolenaar 18163dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_ClearLine() 18263dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 18363dbfd33SBram Moolenaar py vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][0] = None 18463dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 185bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 18663dbfd33SBram Moolenaarendfunc 18763dbfd33SBram Moolenaar 18863dbfd33SBram Moolenaarfunc _SetUpVisibleBuffer() 18963dbfd33SBram Moolenaar new 19063dbfd33SBram Moolenaar let lnum = 0 19163dbfd33SBram Moolenaar while lnum < 10 19263dbfd33SBram Moolenaar call append( 1, string( lnum ) ) 19363dbfd33SBram Moolenaar let lnum = lnum + 1 19463dbfd33SBram Moolenaar endwhile 19563dbfd33SBram Moolenaar normal G 19663dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 19763dbfd33SBram Moolenaarendfunc 19863dbfd33SBram Moolenaar 19963dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_Clear() 20063dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 20163dbfd33SBram Moolenaar 20263dbfd33SBram Moolenaar py vim.current.buffer[:] = None 20363dbfd33SBram Moolenaar call assert_equal( line( '.' ), 1 ) 20463dbfd33SBram Moolenaar 20563dbfd33SBram Moolenaar bwipe! 20663dbfd33SBram Moolenaarendfunc 20763dbfd33SBram Moolenaar 20863dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_List() 20963dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 21063dbfd33SBram Moolenaar 21163dbfd33SBram Moolenaar py vim.current.buffer[:] = [ 'test' ] 21263dbfd33SBram Moolenaar call assert_equal( line( '.' ), 1 ) 21363dbfd33SBram Moolenaar 21463dbfd33SBram Moolenaar bwipe! 21592fdd1e7SBram Moolenaarendfunc 21663dbfd33SBram Moolenaar 21763dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_Str() 21863dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 21963dbfd33SBram Moolenaar 22063dbfd33SBram Moolenaar py vim.current.buffer[-1] = None 22163dbfd33SBram Moolenaar call assert_equal( line( '.' ), 10 ) 22263dbfd33SBram Moolenaar 22363dbfd33SBram Moolenaar bwipe! 22492fdd1e7SBram Moolenaarendfunc 2257f3a2849SBram Moolenaar 2267f3a2849SBram Moolenaarfunc Test_Catch_Exception_Message() 2277f3a2849SBram Moolenaar try 2287f3a2849SBram Moolenaar py raise RuntimeError( 'TEST' ) 2297f3a2849SBram Moolenaar catch /.*/ 2307f3a2849SBram Moolenaar call assert_match( '^Vim(.*):RuntimeError: TEST$', v:exception ) 2317f3a2849SBram Moolenaar endtry 2327f3a2849SBram Moolenaarendfunc 2336c2b7b80SBram Moolenaar 2346c2b7b80SBram Moolenaar" Test for various heredoc syntax 2356c2b7b80SBram Moolenaarfunc Test_python_heredoc() 2366c2b7b80SBram Moolenaar python << END 2376c2b7b80SBram Moolenaars='A' 2386c2b7b80SBram MoolenaarEND 2396c2b7b80SBram Moolenaar python << 2406c2b7b80SBram Moolenaars+='B' 2416c2b7b80SBram Moolenaar. 2426c2b7b80SBram Moolenaar python << trim END 2436c2b7b80SBram Moolenaar s+='C' 2446c2b7b80SBram Moolenaar END 2456c2b7b80SBram Moolenaar python << trim 2466c2b7b80SBram Moolenaar s+='D' 2476c2b7b80SBram Moolenaar . 2486ab0953fSBram Moolenaar python << trim eof 2496ab0953fSBram Moolenaar s+='E' 2506ab0953fSBram Moolenaar eof 2516ab0953fSBram Moolenaar call assert_equal('ABCDE', pyxeval('s')) 2526c2b7b80SBram Moolenaarendfunc 2536c2b7b80SBram Moolenaar 25492fdd1e7SBram Moolenaar" Test for the buffer range object 25592fdd1e7SBram Moolenaarfunc Test_python_range() 25692fdd1e7SBram Moolenaar new 25792fdd1e7SBram Moolenaar call setline(1, ['one', 'two', 'three']) 25892fdd1e7SBram Moolenaar py b = vim.current.buffer 25992fdd1e7SBram Moolenaar py r = b.range(1, 3) 26092fdd1e7SBram Moolenaar call assert_equal(0, pyeval('r.start')) 26192fdd1e7SBram Moolenaar call assert_equal(2, pyeval('r.end')) 262ab589463SBram Moolenaar call assert_equal('one', pyeval('r[0]')) 263ab589463SBram Moolenaar call assert_equal('one', pyeval('r[-3]')) 264ab589463SBram Moolenaar call assert_equal('three', pyeval('r[-4]')) 26592fdd1e7SBram Moolenaar call assert_equal(['two', 'three'], pyeval('r[1:]')) 26692fdd1e7SBram Moolenaar py r[0] = 'green' 26792fdd1e7SBram Moolenaar call assert_equal(['green', 'two', 'three'], getline(1, '$')) 26892fdd1e7SBram Moolenaar py r[0:2] = ['red', 'blue'] 26992fdd1e7SBram Moolenaar call assert_equal(['red', 'blue', 'three'], getline(1, '$')) 27092fdd1e7SBram Moolenaar call assert_equal(['start', 'end', '__members__'], pyeval('r.__members__')) 27192fdd1e7SBram Moolenaar 272ab589463SBram Moolenaar " try different invalid start/end index for the range slice 273ab589463SBram Moolenaar %d 274ab589463SBram Moolenaar call setline(1, ['one', 'two', 'three']) 275ab589463SBram Moolenaar py r[-10:1] = ["a"] 276ab589463SBram Moolenaar py r[10:12] = ["b"] 277ab589463SBram Moolenaar py r[-10:-9] = ["c"] 278ab589463SBram Moolenaar py r[1:0] = ["d"] 279ab589463SBram Moolenaar call assert_equal(['c', 'd', 'a', 'two', 'three', 'b'], getline(1, '$')) 280ab589463SBram Moolenaar 281bb790dccSBram Moolenaar " The following code used to trigger an ml_get error 282bb790dccSBram Moolenaar %d 283bb790dccSBram Moolenaar let x = pyeval('r[:]') 284ab589463SBram Moolenaar 285ab589463SBram Moolenaar " Non-existing range attribute 286ab589463SBram Moolenaar call AssertException(["let x = pyeval('r.abc')"], 287ab589463SBram Moolenaar \ 'Vim(let):AttributeError: abc') 28892fdd1e7SBram Moolenaar 28992fdd1e7SBram Moolenaar close! 29092fdd1e7SBram Moolenaarendfunc 29192fdd1e7SBram Moolenaar 29292fdd1e7SBram Moolenaar" Test for the python tabpage object 29392fdd1e7SBram Moolenaarfunc Test_python_tabpage() 29492fdd1e7SBram Moolenaar tabnew 29592fdd1e7SBram Moolenaar py t = vim.tabpages[1] 296ab589463SBram Moolenaar py wl = t.windows 29792fdd1e7SBram Moolenaar tabclose 298ab589463SBram Moolenaar " Accessing a closed tabpage 299ab589463SBram Moolenaar call AssertException(["let n = pyeval('t.number')"], 300ab589463SBram Moolenaar \ 'Vim(let):vim.error: attempt to refer to deleted tab page') 301ab589463SBram Moolenaar call AssertException(["let n = pyeval('len(wl)')"], 302ab589463SBram Moolenaar \ 'Vim(let):vim.error: attempt to refer to deleted tab page') 303ab589463SBram Moolenaar call AssertException(["py w = wl[0]"], 304ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted tab page') 305ab589463SBram Moolenaar call AssertException(["py vim.current.tabpage = t"], 306ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted tab page') 307ab589463SBram Moolenaar call assert_match('<tabpage object (deleted)', pyeval('repr(t)')) 30892fdd1e7SBram Moolenaar %bw! 30992fdd1e7SBram Moolenaarendfunc 31092fdd1e7SBram Moolenaar 31192fdd1e7SBram Moolenaar" Test for the python window object 31292fdd1e7SBram Moolenaarfunc Test_python_window() 313ab589463SBram Moolenaar " Test for setting the window height 314ab589463SBram Moolenaar 10new 315ab589463SBram Moolenaar py vim.current.window.height = 5 316ab589463SBram Moolenaar call assert_equal(5, winheight(0)) 317ab589463SBram Moolenaar 318ab589463SBram Moolenaar " Test for setting the window width 319ab589463SBram Moolenaar 10vnew 320ab589463SBram Moolenaar py vim.current.window.width = 6 321ab589463SBram Moolenaar call assert_equal(6, winwidth(0)) 322ab589463SBram Moolenaar 323ab589463SBram Moolenaar " Try accessing a closed window 32492fdd1e7SBram Moolenaar py w = vim.current.window 325ab589463SBram Moolenaar py wopts = w.options 32692fdd1e7SBram Moolenaar close 327ab589463SBram Moolenaar " Access the attributes of a closed window 328ab589463SBram Moolenaar call AssertException(["let n = pyeval('w.number')"], 329ab589463SBram Moolenaar \ 'Vim(let):vim.error: attempt to refer to deleted window') 330ab589463SBram Moolenaar call AssertException(["py w.height = 5"], 331ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted window') 332ab589463SBram Moolenaar call AssertException(["py vim.current.window = w"], 333ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted window') 334ab589463SBram Moolenaar " Try to set one of the options of the closed window 335bb790dccSBram Moolenaar " The following caused an ASAN failure 336bb790dccSBram Moolenaar call AssertException(["py wopts['list'] = False"], 337bb790dccSBram Moolenaar \ 'vim.error: attempt to refer to deleted window') 338ab589463SBram Moolenaar call assert_match('<window object (deleted)', pyeval("repr(w)")) 339ab589463SBram Moolenaar %bw! 34092fdd1e7SBram Moolenaarendfunc 34192fdd1e7SBram Moolenaar 34292fdd1e7SBram Moolenaar" Test for the python List object 34392fdd1e7SBram Moolenaarfunc Test_python_list() 34492fdd1e7SBram Moolenaar let l = [1, 2] 34592fdd1e7SBram Moolenaar py pl = vim.bindeval('l') 34692fdd1e7SBram Moolenaar call assert_equal(['locked', '__members__'], pyeval('pl.__members__')) 34792fdd1e7SBram Moolenaar 348ab589463SBram Moolenaar " Try to convert a null List 349ab589463SBram Moolenaar call AssertException(["py t = vim.eval('test_null_list()')"], 350ab589463SBram Moolenaar \ 'Vim(python):SystemError: error return without exception set') 351ab589463SBram Moolenaar 352ab589463SBram Moolenaar " Try to convert a List with a null List item 353ab589463SBram Moolenaar call AssertException(["py t = vim.eval('[test_null_list()]')"], 354ab589463SBram Moolenaar \ 'Vim(python):SystemError: error return without exception set') 355ab589463SBram Moolenaar 356ab589463SBram Moolenaar " Try to bind a null List variable 357ab589463SBram Moolenaar let cmds =<< trim END 358ab589463SBram Moolenaar let l = test_null_list() 359ab589463SBram Moolenaar py ll = vim.bindeval('l') 360ab589463SBram Moolenaar END 361ab589463SBram Moolenaar call AssertException(cmds, 'Vim(python):SystemError: error return without exception set') 362ab589463SBram Moolenaar 36392fdd1e7SBram Moolenaar let l = [] 36492fdd1e7SBram Moolenaar py l = vim.bindeval('l') 36592fdd1e7SBram Moolenaar py f = vim.bindeval('function("strlen")') 36692fdd1e7SBram Moolenaar " Extending List directly with different types 36792fdd1e7SBram Moolenaar py l.extend([1, "as'd", [1, 2, f, {'a': 1}]]) 36892fdd1e7SBram Moolenaar call assert_equal([1, "as'd", [1, 2, function("strlen"), {'a': 1}]], l) 36992fdd1e7SBram Moolenaar call assert_equal([1, 2, function("strlen"), {'a': 1}], l[-1]) 37092fdd1e7SBram Moolenaar call assert_fails('echo l[-4]', 'E684:') 37192fdd1e7SBram Moolenaar 37292fdd1e7SBram Moolenaar " List assignment 37392fdd1e7SBram Moolenaar py l[0] = 0 37492fdd1e7SBram Moolenaar call assert_equal([0, "as'd", [1, 2, function("strlen"), {'a': 1}]], l) 37592fdd1e7SBram Moolenaar py l[-2] = f 37692fdd1e7SBram Moolenaar call assert_equal([0, function("strlen"), [1, 2, function("strlen"), {'a': 1}]], l) 377ab589463SBram Moolenaar 378ab589463SBram Moolenaar " appending to a list 379ab589463SBram Moolenaar let l = [1, 2] 380ab589463SBram Moolenaar py ll = vim.bindeval('l') 381ab589463SBram Moolenaar py ll[2] = 8 382ab589463SBram Moolenaar call assert_equal([1, 2, 8], l) 383ab589463SBram Moolenaar 384ab589463SBram Moolenaar " Using dict as an index 385ab589463SBram Moolenaar call AssertException(['py ll[{}] = 10'], 386ab589463SBram Moolenaar \ 'Vim(python):TypeError: index must be int or slice, not dict') 38792fdd1e7SBram Moolenaarendfunc 38892fdd1e7SBram Moolenaar 38992fdd1e7SBram Moolenaar" Test for the python Dict object 39092fdd1e7SBram Moolenaarfunc Test_python_dict() 39192fdd1e7SBram Moolenaar let d = {} 39292fdd1e7SBram Moolenaar py pd = vim.bindeval('d') 39392fdd1e7SBram Moolenaar call assert_equal(['locked', 'scope', '__members__'], 39492fdd1e7SBram Moolenaar \ pyeval('pd.__members__')) 395ab589463SBram Moolenaar 396ab589463SBram Moolenaar " Try to convert a null Dict 397ab589463SBram Moolenaar call AssertException(["py t = vim.eval('test_null_dict()')"], 398ab589463SBram Moolenaar \ 'Vim(python):SystemError: error return without exception set') 399ab589463SBram Moolenaar 400ab589463SBram Moolenaar " Try to convert a Dict with a null List value 401ab589463SBram Moolenaar call AssertException(["py t = vim.eval(\"{'a' : test_null_list()}\")"], 402ab589463SBram Moolenaar \ 'Vim(python):SystemError: error return without exception set') 403ab589463SBram Moolenaar 404ab589463SBram Moolenaar " Try to convert a Dict with a null string key 405ab589463SBram Moolenaar py t = vim.eval("{test_null_string() : 10}") 406ab589463SBram Moolenaar call assert_fails("let d = pyeval('t')", 'E859:') 407ab589463SBram Moolenaar 408ab589463SBram Moolenaar " Dict length 409ab589463SBram Moolenaar let d = {'a' : 10, 'b' : 20} 410ab589463SBram Moolenaar py d = vim.bindeval('d') 411ab589463SBram Moolenaar call assert_equal(2, pyeval('len(d)')) 412ab589463SBram Moolenaar 413ab589463SBram Moolenaar " Deleting an non-existing key 414ab589463SBram Moolenaar call AssertException(["py del d['c']"], "Vim(python):KeyError: 'c'") 41592fdd1e7SBram Moolenaarendfunc 41692fdd1e7SBram Moolenaar 41792fdd1e7SBram Moolenaar" Extending Dictionary directly with different types 41892fdd1e7SBram Moolenaarfunc Test_python_dict_extend() 41992fdd1e7SBram Moolenaar let d = {} 42092fdd1e7SBram Moolenaar func d.f() 42192fdd1e7SBram Moolenaar return 1 42292fdd1e7SBram Moolenaar endfunc 42392fdd1e7SBram Moolenaar 42492fdd1e7SBram Moolenaar py f = vim.bindeval('function("strlen")') 42592fdd1e7SBram Moolenaar py << trim EOF 42692fdd1e7SBram Moolenaar d = vim.bindeval('d') 42792fdd1e7SBram Moolenaar d['1'] = 'asd' 42892fdd1e7SBram Moolenaar d.update() # Must not do anything, including throwing errors 42992fdd1e7SBram Moolenaar d.update(b = [1, 2, f]) 43092fdd1e7SBram Moolenaar d.update((('-1', {'a': 1}),)) 43192fdd1e7SBram Moolenaar d.update({'0': -1}) 43292fdd1e7SBram Moolenaar dk = d.keys() 43392fdd1e7SBram Moolenaar dv = d.values() 43492fdd1e7SBram Moolenaar di = d.items() 43592fdd1e7SBram Moolenaar cmpfun = lambda a, b: cmp(repr(a), repr(b)) 43692fdd1e7SBram Moolenaar dk.sort(cmpfun) 43792fdd1e7SBram Moolenaar dv.sort(cmpfun) 43892fdd1e7SBram Moolenaar di.sort(cmpfun) 43992fdd1e7SBram Moolenaar EOF 44092fdd1e7SBram Moolenaar 441ab589463SBram Moolenaar " Try extending a locked dictionary 442ab589463SBram Moolenaar lockvar d 443ab589463SBram Moolenaar call AssertException(["py d.update({'b' : 20})"], 444ab589463SBram Moolenaar \ 'Vim(python):vim.error: dictionary is locked') 445ab589463SBram Moolenaar unlockvar d 446ab589463SBram Moolenaar 44792fdd1e7SBram Moolenaar call assert_equal(1, pyeval("d['f'](self={})")) 44892fdd1e7SBram Moolenaar call assert_equal("['-1', '0', '1', 'b', 'f']", pyeval('repr(dk)')) 44992fdd1e7SBram Moolenaar call assert_equal("['asd', -1L, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >]", substitute(pyeval('repr(dv)'),'0x\x\+','','g')) 45092fdd1e7SBram 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')) 45192fdd1e7SBram Moolenaar call assert_equal(['0', '1', 'b', 'f', '-1'], keys(d)) 45292fdd1e7SBram Moolenaar call assert_equal("[-1, 'asd', [1, 2, function('strlen')], function('1'), {'a': 1}]", string(values(d))) 45392fdd1e7SBram Moolenaar py del dk 45492fdd1e7SBram Moolenaar py del di 45592fdd1e7SBram Moolenaar py del dv 45692fdd1e7SBram Moolenaarendfunc 45792fdd1e7SBram Moolenaar 45892fdd1e7SBram Moolenaarfunc Test_python_list_del_items() 45992fdd1e7SBram Moolenaar " removing items with del 46092fdd1e7SBram Moolenaar let l = [0, function("strlen"), [1, 2, function("strlen"), {'a': 1}]] 46192fdd1e7SBram Moolenaar py l = vim.bindeval('l') 46292fdd1e7SBram Moolenaar py del l[2] 46392fdd1e7SBram Moolenaar call assert_equal("[0, function('strlen')]", string(l)) 46492fdd1e7SBram Moolenaar 46592fdd1e7SBram Moolenaar let l = range(8) 46692fdd1e7SBram Moolenaar py l = vim.bindeval('l') 46792fdd1e7SBram Moolenaar py del l[:3] 46892fdd1e7SBram Moolenaar py del l[1:] 46992fdd1e7SBram Moolenaar call assert_equal([3], l) 47092fdd1e7SBram Moolenaar 47192fdd1e7SBram Moolenaar " removing items out of range: silently skip items that don't exist 47292fdd1e7SBram Moolenaar 47392fdd1e7SBram Moolenaar " The following two ranges delete nothing as they match empty list: 47492fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 47592fdd1e7SBram Moolenaar py l = vim.bindeval('l') 47692fdd1e7SBram Moolenaar py del l[2:1] 47792fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 47892fdd1e7SBram Moolenaar py del l[2:2] 47992fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 48092fdd1e7SBram Moolenaar py del l[2:3] 48192fdd1e7SBram Moolenaar call assert_equal([0, 1, 3], l) 48292fdd1e7SBram Moolenaar 48392fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 48492fdd1e7SBram Moolenaar py l = vim.bindeval('l') 48592fdd1e7SBram Moolenaar py del l[2:4] 48692fdd1e7SBram Moolenaar call assert_equal([0, 1], l) 48792fdd1e7SBram Moolenaar 48892fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 48992fdd1e7SBram Moolenaar py l = vim.bindeval('l') 49092fdd1e7SBram Moolenaar py del l[2:5] 49192fdd1e7SBram Moolenaar call assert_equal([0, 1], l) 49292fdd1e7SBram Moolenaar 49392fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 49492fdd1e7SBram Moolenaar py l = vim.bindeval('l') 49592fdd1e7SBram Moolenaar py del l[2:6] 49692fdd1e7SBram Moolenaar call assert_equal([0, 1], l) 49792fdd1e7SBram Moolenaar 49892fdd1e7SBram Moolenaar " The following two ranges delete nothing as they match empty list: 49992fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 50092fdd1e7SBram Moolenaar py l = vim.bindeval('l') 50192fdd1e7SBram Moolenaar py del l[-1:2] 50292fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 50392fdd1e7SBram Moolenaar py del l[-2:2] 50492fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 50592fdd1e7SBram Moolenaar py del l[-3:2] 50692fdd1e7SBram Moolenaar call assert_equal([0, 2, 3], l) 50792fdd1e7SBram Moolenaar 50892fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 50992fdd1e7SBram Moolenaar py l = vim.bindeval('l') 51092fdd1e7SBram Moolenaar py del l[-4:2] 51192fdd1e7SBram Moolenaar call assert_equal([2, 3], l) 51292fdd1e7SBram Moolenaar 51392fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 51492fdd1e7SBram Moolenaar py l = vim.bindeval('l') 51592fdd1e7SBram Moolenaar py del l[-5:2] 51692fdd1e7SBram Moolenaar call assert_equal([2, 3], l) 51792fdd1e7SBram Moolenaar 51892fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 51992fdd1e7SBram Moolenaar py l = vim.bindeval('l') 52092fdd1e7SBram Moolenaar py del l[-6:2] 52192fdd1e7SBram Moolenaar call assert_equal([2, 3], l) 52292fdd1e7SBram Moolenaar 52392fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 52492fdd1e7SBram Moolenaar py l = vim.bindeval('l') 52592fdd1e7SBram Moolenaar py del l[::2] 52692fdd1e7SBram Moolenaar call assert_equal([1, 3], l) 52792fdd1e7SBram Moolenaar 52892fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 52992fdd1e7SBram Moolenaar py l = vim.bindeval('l') 53092fdd1e7SBram Moolenaar py del l[3:0:-2] 53192fdd1e7SBram Moolenaar call assert_equal([0, 2], l) 53292fdd1e7SBram Moolenaar 53392fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 53492fdd1e7SBram Moolenaar py l = vim.bindeval('l') 53592fdd1e7SBram Moolenaar py del l[2:4:-2] 53692fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 53792fdd1e7SBram Moolenaarendfunc 53892fdd1e7SBram Moolenaar 53992fdd1e7SBram Moolenaarfunc Test_python_dict_del_items() 54092fdd1e7SBram Moolenaar let d = eval("{'0' : -1, '1' : 'asd', 'b' : [1, 2, function('strlen')], 'f' : function('min'), '-1' : {'a': 1}}") 54192fdd1e7SBram Moolenaar py d = vim.bindeval('d') 54292fdd1e7SBram Moolenaar py del d['-1'] 54392fdd1e7SBram Moolenaar py del d['f'] 54492fdd1e7SBram Moolenaar call assert_equal([1, 2, function('strlen')], pyeval('d.get(''b'', 1)')) 54592fdd1e7SBram Moolenaar call assert_equal([1, 2, function('strlen')], pyeval('d.pop(''b'')')) 54692fdd1e7SBram Moolenaar call assert_equal(1, pyeval('d.get(''b'', 1)')) 54792fdd1e7SBram Moolenaar call assert_equal('asd', pyeval('d.pop(''1'', 2)')) 54892fdd1e7SBram Moolenaar call assert_equal(2, pyeval('d.pop(''1'', 2)')) 54992fdd1e7SBram Moolenaar call assert_equal('True', pyeval('repr(d.has_key(''0''))')) 55092fdd1e7SBram Moolenaar call assert_equal('False', pyeval('repr(d.has_key(''1''))')) 55192fdd1e7SBram Moolenaar call assert_equal('True', pyeval('repr(''0'' in d)')) 55292fdd1e7SBram Moolenaar call assert_equal('False', pyeval('repr(''1'' in d)')) 55392fdd1e7SBram Moolenaar call assert_equal("['0']", pyeval('repr(list(iter(d)))')) 55492fdd1e7SBram Moolenaar call assert_equal({'0' : -1}, d) 55592fdd1e7SBram Moolenaar call assert_equal("('0', -1L)", pyeval('repr(d.popitem())')) 55692fdd1e7SBram Moolenaar call assert_equal('None', pyeval('repr(d.get(''0''))')) 55792fdd1e7SBram Moolenaar call assert_equal('[]', pyeval('repr(list(iter(d)))')) 55892fdd1e7SBram Moolenaarendfunc 55992fdd1e7SBram Moolenaar 56092fdd1e7SBram Moolenaar" Slice assignment to a list 56192fdd1e7SBram Moolenaarfunc Test_python_slice_assignment() 56292fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 56392fdd1e7SBram Moolenaar py l = vim.bindeval('l') 56492fdd1e7SBram Moolenaar py l[0:0] = ['a'] 56592fdd1e7SBram Moolenaar call assert_equal(['a', 0, 1, 2, 3], l) 56692fdd1e7SBram Moolenaar 56792fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 56892fdd1e7SBram Moolenaar py l = vim.bindeval('l') 56992fdd1e7SBram Moolenaar py l[1:2] = ['b'] 57092fdd1e7SBram Moolenaar call assert_equal([0, 'b', 2, 3], l) 57192fdd1e7SBram Moolenaar 57292fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 57392fdd1e7SBram Moolenaar py l = vim.bindeval('l') 57492fdd1e7SBram Moolenaar py l[2:4] = ['c'] 57592fdd1e7SBram Moolenaar call assert_equal([0, 1, 'c'], l) 57692fdd1e7SBram Moolenaar 57792fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 57892fdd1e7SBram Moolenaar py l = vim.bindeval('l') 57992fdd1e7SBram Moolenaar py l[4:4] = ['d'] 58092fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 'd'], l) 58192fdd1e7SBram Moolenaar 58292fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 58392fdd1e7SBram Moolenaar py l = vim.bindeval('l') 58492fdd1e7SBram Moolenaar py l[-1:2] = ['e'] 58592fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 'e', 3], l) 58692fdd1e7SBram Moolenaar 58792fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 58892fdd1e7SBram Moolenaar py l = vim.bindeval('l') 58992fdd1e7SBram Moolenaar py l[-10:2] = ['f'] 59092fdd1e7SBram Moolenaar call assert_equal(['f', 2, 3], l) 59192fdd1e7SBram Moolenaar 59292fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 59392fdd1e7SBram Moolenaar py l = vim.bindeval('l') 59492fdd1e7SBram Moolenaar py l[2:-10] = ['g'] 59592fdd1e7SBram Moolenaar call assert_equal([0, 1, 'g', 2, 3], l) 59692fdd1e7SBram Moolenaar 59792fdd1e7SBram Moolenaar let l = [] 59892fdd1e7SBram Moolenaar py l = vim.bindeval('l') 59992fdd1e7SBram Moolenaar py l[0:0] = ['h'] 60092fdd1e7SBram Moolenaar call assert_equal(['h'], l) 60192fdd1e7SBram Moolenaar 60292fdd1e7SBram Moolenaar let l = range(8) 60392fdd1e7SBram Moolenaar py l = vim.bindeval('l') 60492fdd1e7SBram Moolenaar py l[2:6:2] = [10, 20] 60592fdd1e7SBram Moolenaar call assert_equal([0, 1, 10, 3, 20, 5, 6, 7], l) 60692fdd1e7SBram Moolenaar 60792fdd1e7SBram Moolenaar let l = range(8) 60892fdd1e7SBram Moolenaar py l = vim.bindeval('l') 60992fdd1e7SBram Moolenaar py l[6:2:-2] = [10, 20] 61092fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 20, 5, 10, 7], l) 61192fdd1e7SBram Moolenaar 61292fdd1e7SBram Moolenaar let l = range(8) 61392fdd1e7SBram Moolenaar py l = vim.bindeval('l') 61492fdd1e7SBram Moolenaar py l[6:2] = () 61592fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l) 61692fdd1e7SBram Moolenaar 61792fdd1e7SBram Moolenaar let l = range(8) 61892fdd1e7SBram Moolenaar py l = vim.bindeval('l') 61992fdd1e7SBram Moolenaar py l[6:2:1] = () 62092fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l) 62192fdd1e7SBram Moolenaar 62292fdd1e7SBram Moolenaar let l = range(8) 62392fdd1e7SBram Moolenaar py l = vim.bindeval('l') 62492fdd1e7SBram Moolenaar py l[2:2:1] = () 62592fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5, 6, 7], l) 626*0ab55d62SBram Moolenaar 627*0ab55d62SBram Moolenaar call AssertException(["py x = l[10:11:0]"], 628*0ab55d62SBram Moolenaar \ "Vim(python):ValueError: slice step cannot be zero") 62992fdd1e7SBram Moolenaarendfunc 63092fdd1e7SBram Moolenaar 63192fdd1e7SBram Moolenaar" Locked variables 63292fdd1e7SBram Moolenaarfunc Test_python_lockedvar() 63392fdd1e7SBram Moolenaar new 63492fdd1e7SBram Moolenaar py cb = vim.current.buffer 63592fdd1e7SBram Moolenaar let l = [0, 1, 2, 3] 63692fdd1e7SBram Moolenaar py l = vim.bindeval('l') 63792fdd1e7SBram Moolenaar lockvar! l 63892fdd1e7SBram Moolenaar py << trim EOF 63992fdd1e7SBram Moolenaar try: 64092fdd1e7SBram Moolenaar l[2]='i' 64192fdd1e7SBram Moolenaar except vim.error: 64292fdd1e7SBram Moolenaar cb.append('l[2] threw vim.error: ' + emsg(sys.exc_info())) 64392fdd1e7SBram Moolenaar EOF 64492fdd1e7SBram Moolenaar call assert_equal(['', "l[2] threw vim.error: error:('list is locked',)"], 64592fdd1e7SBram Moolenaar \ getline(1, '$')) 646ab589463SBram Moolenaar 647ab589463SBram Moolenaar " Try to concatenate a locked list 648ab589463SBram Moolenaar call AssertException(['py l += [4, 5]'], 649ab589463SBram Moolenaar \ 'Vim(python):vim.error: list is locked') 650ab589463SBram Moolenaar 65192fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], l) 65292fdd1e7SBram Moolenaar unlockvar! l 65392fdd1e7SBram Moolenaar close! 65492fdd1e7SBram Moolenaarendfunc 65592fdd1e7SBram Moolenaar 65692fdd1e7SBram Moolenaar" Test for calling a function 65792fdd1e7SBram Moolenaarfunc Test_python_function_call() 65892fdd1e7SBram Moolenaar func New(...) 65992fdd1e7SBram Moolenaar return ['NewStart'] + a:000 + ['NewEnd'] 66092fdd1e7SBram Moolenaar endfunc 66192fdd1e7SBram Moolenaar 66292fdd1e7SBram Moolenaar func DictNew(...) dict 66392fdd1e7SBram Moolenaar return ['DictNewStart'] + a:000 + ['DictNewEnd', self] 66492fdd1e7SBram Moolenaar endfunc 66592fdd1e7SBram Moolenaar 66692fdd1e7SBram Moolenaar new 66792fdd1e7SBram Moolenaar let l = [function('New'), function('DictNew')] 66892fdd1e7SBram Moolenaar py l = vim.bindeval('l') 66992fdd1e7SBram Moolenaar py l.extend(list(l[0](1, 2, 3))) 67092fdd1e7SBram Moolenaar call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd'], l) 67192fdd1e7SBram Moolenaar py l.extend(list(l[1](1, 2, 3, self={'a': 'b'}))) 67292fdd1e7SBram Moolenaar call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}], l) 67392fdd1e7SBram Moolenaar py l.extend([l[0].name]) 67492fdd1e7SBram Moolenaar call assert_equal([function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New'], l) 67592fdd1e7SBram Moolenaar py ee('l[1](1, 2, 3)') 67692fdd1e7SBram Moolenaar call assert_equal("l[1](1, 2, 3):error:('Vim:E725: Calling dict function without Dictionary: DictNew',)", getline(2)) 67792fdd1e7SBram Moolenaar %d 67892fdd1e7SBram Moolenaar py f = l[0] 67992fdd1e7SBram Moolenaar delfunction New 68092fdd1e7SBram Moolenaar py ee('f(1, 2, 3)') 68192fdd1e7SBram Moolenaar call assert_equal("f(1, 2, 3):error:('Vim:E117: Unknown function: New',)", getline(2)) 68292fdd1e7SBram Moolenaar close! 68392fdd1e7SBram Moolenaar delfunction DictNew 68492fdd1e7SBram Moolenaarendfunc 68592fdd1e7SBram Moolenaar 68692fdd1e7SBram Moolenaarfunc Test_python_float() 68792fdd1e7SBram Moolenaar CheckFeature float 68892fdd1e7SBram Moolenaar let l = [0.0] 68992fdd1e7SBram Moolenaar py l = vim.bindeval('l') 69092fdd1e7SBram Moolenaar py l.extend([0.0]) 69192fdd1e7SBram Moolenaar call assert_equal([0.0, 0.0], l) 69292fdd1e7SBram Moolenaarendfunc 69392fdd1e7SBram Moolenaar 69492fdd1e7SBram Moolenaar" Test for Dict key errors 69592fdd1e7SBram Moolenaarfunc Test_python_dict_key_error() 69692fdd1e7SBram Moolenaar let messages = [] 69792fdd1e7SBram Moolenaar py << trim EOF 69892fdd1e7SBram Moolenaar d = vim.bindeval('{}') 69992fdd1e7SBram Moolenaar m = vim.bindeval('messages') 70092fdd1e7SBram Moolenaar def em(expr, g=globals(), l=locals()): 70192fdd1e7SBram Moolenaar try: 70292fdd1e7SBram Moolenaar exec(expr, g, l) 70392fdd1e7SBram Moolenaar except: 70492fdd1e7SBram Moolenaar m.extend([sys.exc_type.__name__]) 70592fdd1e7SBram Moolenaar 70692fdd1e7SBram Moolenaar em('d["abc1"]') 70792fdd1e7SBram Moolenaar em('d["abc1"]="\\0"') 70892fdd1e7SBram Moolenaar em('d["abc1"]=vim') 70992fdd1e7SBram Moolenaar em('d[""]=1') 71092fdd1e7SBram Moolenaar em('d["a\\0b"]=1') 71192fdd1e7SBram Moolenaar em('d[u"a\\0b"]=1') 71292fdd1e7SBram Moolenaar em('d.pop("abc1")') 71392fdd1e7SBram Moolenaar em('d.popitem()') 71492fdd1e7SBram Moolenaar del em 71592fdd1e7SBram Moolenaar del m 71692fdd1e7SBram Moolenaar EOF 71792fdd1e7SBram Moolenaar 71892fdd1e7SBram Moolenaar call assert_equal(['KeyError', 'TypeError', 'TypeError', 'ValueError', 71992fdd1e7SBram Moolenaar \ 'TypeError', 'TypeError', 'KeyError', 'KeyError'], messages) 72092fdd1e7SBram Moolenaar unlet messages 72192fdd1e7SBram Moolenaarendfunc 72292fdd1e7SBram Moolenaar 72392fdd1e7SBram Moolenaar" Test for locked and scope attributes 72492fdd1e7SBram Moolenaarfunc Test_python_lock_scope_attr() 72592fdd1e7SBram Moolenaar let d = {} | let dl = {} | lockvar dl 72692fdd1e7SBram Moolenaar let res = [] 72792fdd1e7SBram Moolenaar for s in split("d dl v: g:") 72892fdd1e7SBram Moolenaar let name = tr(s, ':', 's') 72992fdd1e7SBram Moolenaar execute 'py ' .. name .. ' = vim.bindeval("' .. s .. '")' 73092fdd1e7SBram Moolenaar call add(res, s .. ' : ' .. join(map(['locked', 'scope'], 73192fdd1e7SBram Moolenaar \ 'v:val .. ":" .. pyeval(name .. "." .. v:val)'), ';')) 73292fdd1e7SBram Moolenaar endfor 73392fdd1e7SBram Moolenaar call assert_equal(['d : locked:0;scope:0', 'dl : locked:1;scope:0', 73492fdd1e7SBram Moolenaar \ 'v: : locked:2;scope:1', 'g: : locked:0;scope:2'], res) 73592fdd1e7SBram Moolenaar 73692fdd1e7SBram Moolenaar silent! let d.abc2 = 1 73792fdd1e7SBram Moolenaar silent! let dl.abc3 = 1 73892fdd1e7SBram Moolenaar py d.locked = True 73992fdd1e7SBram Moolenaar py dl.locked = False 74092fdd1e7SBram Moolenaar silent! let d.def = 1 74192fdd1e7SBram Moolenaar silent! let dl.def = 1 74292fdd1e7SBram Moolenaar call assert_equal({'abc2': 1}, d) 74392fdd1e7SBram Moolenaar call assert_equal({'def': 1}, dl) 74492fdd1e7SBram Moolenaar unlet d dl 74592fdd1e7SBram Moolenaar 74692fdd1e7SBram Moolenaar let l = [] | let ll = [] | lockvar ll 74792fdd1e7SBram Moolenaar let res = [] 74892fdd1e7SBram Moolenaar for s in split("l ll") 74992fdd1e7SBram Moolenaar let name = tr(s, ':', 's') 75092fdd1e7SBram Moolenaar execute 'py ' .. name .. '=vim.bindeval("' .. s .. '")' 75192fdd1e7SBram Moolenaar call add(res, s .. ' : locked:' .. pyeval(name .. '.locked')) 75292fdd1e7SBram Moolenaar endfor 75392fdd1e7SBram Moolenaar call assert_equal(['l : locked:0', 'll : locked:1'], res) 75492fdd1e7SBram Moolenaar 75592fdd1e7SBram Moolenaar silent! call extend(l, [0]) 75692fdd1e7SBram Moolenaar silent! call extend(ll, [0]) 75792fdd1e7SBram Moolenaar py l.locked = True 75892fdd1e7SBram Moolenaar py ll.locked = False 75992fdd1e7SBram Moolenaar silent! call extend(l, [1]) 76092fdd1e7SBram Moolenaar silent! call extend(ll, [1]) 76192fdd1e7SBram Moolenaar call assert_equal([0], l) 76292fdd1e7SBram Moolenaar call assert_equal([1], ll) 76392fdd1e7SBram Moolenaar unlet l ll 764ab589463SBram Moolenaar 765ab589463SBram Moolenaar " Try changing an attribute of a fixed list 766ab589463SBram Moolenaar py a = vim.bindeval('v:argv') 767ab589463SBram Moolenaar call AssertException(['py a.locked = 0'], 768ab589463SBram Moolenaar \ 'Vim(python):TypeError: cannot modify fixed list') 76992fdd1e7SBram Moolenaarendfunc 77092fdd1e7SBram Moolenaar 77192fdd1e7SBram Moolenaar" Test for pyeval() 77292fdd1e7SBram Moolenaarfunc Test_python_pyeval() 77392fdd1e7SBram Moolenaar let l = pyeval('range(3)') 77492fdd1e7SBram Moolenaar call assert_equal([0, 1, 2], l) 77592fdd1e7SBram Moolenaar 77692fdd1e7SBram Moolenaar let d = pyeval('{"a": "b", "c": 1, "d": ["e"]}') 77792fdd1e7SBram Moolenaar call assert_equal([['a', 'b'], ['c', 1], ['d', ['e']]], sort(items(d))) 77892fdd1e7SBram Moolenaar 77992fdd1e7SBram Moolenaar let v:errmsg = '' 78092fdd1e7SBram Moolenaar call assert_equal(v:none, pyeval('None')) 78192fdd1e7SBram Moolenaar call assert_equal('', v:errmsg) 78292fdd1e7SBram Moolenaar 783ab589463SBram Moolenaar py v = vim.eval('test_null_function()') 784ab589463SBram Moolenaar call assert_equal(v:none, pyeval('v')) 785ab589463SBram Moolenaar 78692fdd1e7SBram Moolenaar if has('float') 78792fdd1e7SBram Moolenaar call assert_equal(0.0, pyeval('0.0')) 78892fdd1e7SBram Moolenaar endif 78992fdd1e7SBram Moolenaar 790ab589463SBram Moolenaar " Evaluate an invalid values 791ab589463SBram Moolenaar call AssertException(['let v = pyeval(''"\0"'')'], 'E859:') 792ab589463SBram Moolenaar call AssertException(['let v = pyeval(''{"\0" : 1}'')'], 'E859:') 793ab589463SBram Moolenaar call AssertException(['let v = pyeval("undefined_name")'], 794ab589463SBram Moolenaar \ "Vim(let):NameError: name 'undefined_name' is not defined") 795ab589463SBram Moolenaar call AssertException(['let v = pyeval("vim")'], 'E859:') 796ab589463SBram Moolenaarendfunc 79792fdd1e7SBram Moolenaar 798ab589463SBram Moolenaar" Test for vim.bindeval() 799ab589463SBram Moolenaarfunc Test_python_vim_bindeval() 800ab589463SBram Moolenaar " Float 801ab589463SBram Moolenaar let f = 3.14 802ab589463SBram Moolenaar py f = vim.bindeval('f') 803ab589463SBram Moolenaar call assert_equal(3.14, pyeval('f')) 80492fdd1e7SBram Moolenaar 805ab589463SBram Moolenaar " Blob 806ab589463SBram Moolenaar let b = 0z12 807ab589463SBram Moolenaar py b = vim.bindeval('b') 808ab589463SBram Moolenaar call assert_equal("\x12", pyeval('b')) 80992fdd1e7SBram Moolenaar 810ab589463SBram Moolenaar " Bool 811ab589463SBram Moolenaar call assert_equal(1, pyeval("vim.bindeval('v:true')")) 812ab589463SBram Moolenaar call assert_equal(0, pyeval("vim.bindeval('v:false')")) 813ab589463SBram Moolenaar call assert_equal(v:none, pyeval("vim.bindeval('v:null')")) 814ab589463SBram Moolenaar call assert_equal(v:none, pyeval("vim.bindeval('v:none')")) 815*0ab55d62SBram Moolenaar 816*0ab55d62SBram Moolenaar " channel/job 817*0ab55d62SBram Moolenaar call assert_equal(v:none, pyeval("vim.bindeval('test_null_channel()')")) 818*0ab55d62SBram Moolenaar call assert_equal(v:none, pyeval("vim.bindeval('test_null_job()')")) 81992fdd1e7SBram Moolenaarendfunc 82092fdd1e7SBram Moolenaar 82192fdd1e7SBram Moolenaar" threading 82292fdd1e7SBram Moolenaar" Running pydo command (Test_pydo) before this test, stops the python thread 82392fdd1e7SBram Moolenaar" from running. So this test should be run before the pydo test 82492fdd1e7SBram Moolenaarfunc Test_aaa_python_threading() 82592fdd1e7SBram Moolenaar let l = [0] 82692fdd1e7SBram Moolenaar py l = vim.bindeval('l') 82792fdd1e7SBram Moolenaar py << trim EOF 82892fdd1e7SBram Moolenaar import threading 82992fdd1e7SBram Moolenaar import time 83092fdd1e7SBram Moolenaar 83192fdd1e7SBram Moolenaar class T(threading.Thread): 83292fdd1e7SBram Moolenaar def __init__(self): 83392fdd1e7SBram Moolenaar threading.Thread.__init__(self) 83492fdd1e7SBram Moolenaar self.t = 0 83592fdd1e7SBram Moolenaar self.running = True 83692fdd1e7SBram Moolenaar 83792fdd1e7SBram Moolenaar def run(self): 83892fdd1e7SBram Moolenaar while self.running: 83992fdd1e7SBram Moolenaar self.t += 1 84092fdd1e7SBram Moolenaar time.sleep(0.1) 84192fdd1e7SBram Moolenaar 84292fdd1e7SBram Moolenaar t = T() 84392fdd1e7SBram Moolenaar del T 84492fdd1e7SBram Moolenaar t.start() 84592fdd1e7SBram Moolenaar EOF 84692fdd1e7SBram Moolenaar 84792fdd1e7SBram Moolenaar sleep 1 84892fdd1e7SBram Moolenaar py t.running = False 84992fdd1e7SBram Moolenaar py t.join() 85092fdd1e7SBram Moolenaar 85192fdd1e7SBram Moolenaar " Check if the background thread is working. Count should be 10, but on a 85292fdd1e7SBram Moolenaar " busy system (AppVeyor) it can be much lower. 85392fdd1e7SBram Moolenaar py l[0] = t.t > 4 85492fdd1e7SBram Moolenaar py del time 85592fdd1e7SBram Moolenaar py del threading 85692fdd1e7SBram Moolenaar py del t 85792fdd1e7SBram Moolenaar call assert_equal([1], l) 85892fdd1e7SBram Moolenaarendfunc 85992fdd1e7SBram Moolenaar 86092fdd1e7SBram Moolenaar" settrace 86192fdd1e7SBram Moolenaarfunc Test_python_settrace() 86292fdd1e7SBram Moolenaar let l = [] 86392fdd1e7SBram Moolenaar py l = vim.bindeval('l') 86492fdd1e7SBram Moolenaar py << trim EOF 86592fdd1e7SBram Moolenaar import sys 86692fdd1e7SBram Moolenaar 86792fdd1e7SBram Moolenaar def traceit(frame, event, arg): 86892fdd1e7SBram Moolenaar global l 86992fdd1e7SBram Moolenaar if event == "line": 87092fdd1e7SBram Moolenaar l.extend([frame.f_lineno]) 87192fdd1e7SBram Moolenaar return traceit 87292fdd1e7SBram Moolenaar 87392fdd1e7SBram Moolenaar def trace_main(): 87492fdd1e7SBram Moolenaar for i in range(5): 87592fdd1e7SBram Moolenaar pass 87692fdd1e7SBram Moolenaar EOF 87792fdd1e7SBram Moolenaar py sys.settrace(traceit) 87892fdd1e7SBram Moolenaar py trace_main() 87992fdd1e7SBram Moolenaar py sys.settrace(None) 88092fdd1e7SBram Moolenaar py del traceit 88192fdd1e7SBram Moolenaar py del trace_main 88292fdd1e7SBram Moolenaar call assert_equal([1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1], l) 88392fdd1e7SBram Moolenaarendfunc 88492fdd1e7SBram Moolenaar 88592fdd1e7SBram Moolenaar" Slice 88692fdd1e7SBram Moolenaarfunc Test_python_list_slice() 88792fdd1e7SBram Moolenaar py ll = vim.bindeval('[0, 1, 2, 3, 4, 5]') 88892fdd1e7SBram Moolenaar py l = ll[:4] 88992fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3], pyeval('l')) 89092fdd1e7SBram Moolenaar py l = ll[2:] 89192fdd1e7SBram Moolenaar call assert_equal([2, 3, 4, 5], pyeval('l')) 89292fdd1e7SBram Moolenaar py l = ll[:-4] 89392fdd1e7SBram Moolenaar call assert_equal([0, 1], pyeval('l')) 89492fdd1e7SBram Moolenaar py l = ll[-2:] 89592fdd1e7SBram Moolenaar call assert_equal([4, 5], pyeval('l')) 89692fdd1e7SBram Moolenaar py l = ll[2:4] 89792fdd1e7SBram Moolenaar call assert_equal([2, 3], pyeval('l')) 89892fdd1e7SBram Moolenaar py l = ll[4:2] 89992fdd1e7SBram Moolenaar call assert_equal([], pyeval('l')) 90092fdd1e7SBram Moolenaar py l = ll[-4:-2] 90192fdd1e7SBram Moolenaar call assert_equal([2, 3], pyeval('l')) 90292fdd1e7SBram Moolenaar py l = ll[-2:-4] 90392fdd1e7SBram Moolenaar call assert_equal([], pyeval('l')) 90492fdd1e7SBram Moolenaar py l = ll[:] 90592fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l')) 90692fdd1e7SBram Moolenaar py l = ll[0:6] 90792fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l')) 90892fdd1e7SBram Moolenaar py l = ll[-10:10] 90992fdd1e7SBram Moolenaar call assert_equal([0, 1, 2, 3, 4, 5], pyeval('l')) 91092fdd1e7SBram Moolenaar py l = ll[4:2:-1] 91192fdd1e7SBram Moolenaar call assert_equal([4, 3], pyeval('l')) 91292fdd1e7SBram Moolenaar py l = ll[::2] 91392fdd1e7SBram Moolenaar call assert_equal([0, 2, 4], pyeval('l')) 91492fdd1e7SBram Moolenaar py l = ll[4:2:1] 91592fdd1e7SBram Moolenaar call assert_equal([], pyeval('l')) 916ab589463SBram Moolenaar 917ab589463SBram Moolenaar " Error case: Use an invalid index 918ab589463SBram Moolenaar call AssertException(['py ll[-10] = 5'], 'Vim(python):vim.error: internal error:') 919ab589463SBram Moolenaar 920ab589463SBram Moolenaar " Use a step value of 0 921ab589463SBram Moolenaar call AssertException(['py ll[0:3:0] = [1, 2, 3]'], 922ab589463SBram Moolenaar \ 'Vim(python):ValueError: slice step cannot be zero') 923ab589463SBram Moolenaar 924ab589463SBram Moolenaar " Error case: Invalid slice type 925ab589463SBram Moolenaar call AssertException(["py x = ll['abc']"], 926ab589463SBram Moolenaar \ 'Vim(python):TypeError: index must be int or slice, not str') 92792fdd1e7SBram Moolenaar py del l 928ab589463SBram Moolenaar 929ab589463SBram Moolenaar " Error case: List with a null list item 930ab589463SBram Moolenaar let l = [test_null_list()] 931ab589463SBram Moolenaar py ll = vim.bindeval('l') 932ab589463SBram Moolenaar call AssertException(["py x = ll[:]"], 933ab589463SBram Moolenaar \ 'Vim(python):SystemError: error return without exception set') 93492fdd1e7SBram Moolenaarendfunc 93592fdd1e7SBram Moolenaar 93692fdd1e7SBram Moolenaar" Vars 93792fdd1e7SBram Moolenaarfunc Test_python_vars() 93892fdd1e7SBram Moolenaar let g:foo = 'bac' 93992fdd1e7SBram Moolenaar let w:abc3 = 'def' 94092fdd1e7SBram Moolenaar let b:baz = 'bar' 94192fdd1e7SBram Moolenaar let t:bar = 'jkl' 94292fdd1e7SBram Moolenaar try 94392fdd1e7SBram Moolenaar throw "Abc" 94492fdd1e7SBram Moolenaar catch /Abc/ 94592fdd1e7SBram Moolenaar call assert_equal('Abc', pyeval('vim.vvars[''exception'']')) 94692fdd1e7SBram Moolenaar endtry 94792fdd1e7SBram Moolenaar call assert_equal('bac', pyeval('vim.vars[''foo'']')) 94892fdd1e7SBram Moolenaar call assert_equal('def', pyeval('vim.current.window.vars[''abc3'']')) 94992fdd1e7SBram Moolenaar call assert_equal('bar', pyeval('vim.current.buffer.vars[''baz'']')) 95092fdd1e7SBram Moolenaar call assert_equal('jkl', pyeval('vim.current.tabpage.vars[''bar'']')) 95192fdd1e7SBram Moolenaarendfunc 95292fdd1e7SBram Moolenaar 95392fdd1e7SBram Moolenaar" Options 95492fdd1e7SBram Moolenaar" paste: boolean, global 95592fdd1e7SBram Moolenaar" previewheight number, global 95692fdd1e7SBram Moolenaar" operatorfunc: string, global 95792fdd1e7SBram Moolenaar" number: boolean, window-local 95892fdd1e7SBram Moolenaar" numberwidth: number, window-local 95992fdd1e7SBram Moolenaar" colorcolumn: string, window-local 96092fdd1e7SBram Moolenaar" statusline: string, window-local/global 96192fdd1e7SBram Moolenaar" autoindent: boolean, buffer-local 96292fdd1e7SBram Moolenaar" shiftwidth: number, buffer-local 96392fdd1e7SBram Moolenaar" omnifunc: string, buffer-local 96492fdd1e7SBram Moolenaar" preserveindent: boolean, buffer-local/global 96592fdd1e7SBram Moolenaar" path: string, buffer-local/global 96692fdd1e7SBram Moolenaarfunc Test_python_opts() 96792fdd1e7SBram Moolenaar let g:res = [] 96892fdd1e7SBram Moolenaar let g:bufs = [bufnr('%')] 96992fdd1e7SBram Moolenaar new 97092fdd1e7SBram Moolenaar let g:bufs += [bufnr('%')] 97192fdd1e7SBram Moolenaar vnew 97292fdd1e7SBram Moolenaar let g:bufs += [bufnr('%')] 97392fdd1e7SBram Moolenaar wincmd j 97492fdd1e7SBram Moolenaar vnew 97592fdd1e7SBram Moolenaar let g:bufs += [bufnr('%')] 97692fdd1e7SBram Moolenaar wincmd l 97792fdd1e7SBram Moolenaar 97892fdd1e7SBram Moolenaar func RecVars(opt) 97992fdd1e7SBram Moolenaar let gval = string(eval('&g:' .. a:opt)) 98092fdd1e7SBram Moolenaar let wvals = join(map(range(1, 4), 98192fdd1e7SBram Moolenaar \ 'v:val .. ":" .. string(getwinvar(v:val, "&" .. a:opt))')) 98292fdd1e7SBram Moolenaar let bvals = join(map(copy(g:bufs), 98392fdd1e7SBram Moolenaar \ 'v:val .. ":" .. string(getbufvar(v:val, "&" .. a:opt))')) 98492fdd1e7SBram Moolenaar call add(g:res, ' G: ' .. gval) 98592fdd1e7SBram Moolenaar call add(g:res, ' W: ' .. wvals) 98692fdd1e7SBram Moolenaar call add(g:res, ' B: ' .. wvals) 98792fdd1e7SBram Moolenaar endfunc 98892fdd1e7SBram Moolenaar 98992fdd1e7SBram Moolenaar py << trim EOF 99092fdd1e7SBram Moolenaar def e(s, g=globals(), l=locals()): 99192fdd1e7SBram Moolenaar try: 99292fdd1e7SBram Moolenaar exec(s, g, l) 99392fdd1e7SBram Moolenaar except: 99492fdd1e7SBram Moolenaar vim.command('return ' + repr(sys.exc_type.__name__)) 99592fdd1e7SBram Moolenaar 99692fdd1e7SBram Moolenaar def ev(s, g=globals(), l=locals()): 99792fdd1e7SBram Moolenaar try: 99892fdd1e7SBram Moolenaar return eval(s, g, l) 99992fdd1e7SBram Moolenaar except: 100092fdd1e7SBram Moolenaar vim.command('let exc=' + repr(sys.exc_type.__name__)) 100192fdd1e7SBram Moolenaar return 0 100292fdd1e7SBram Moolenaar EOF 100392fdd1e7SBram Moolenaar 100492fdd1e7SBram Moolenaar func E(s) 100592fdd1e7SBram Moolenaar python e(vim.eval('a:s')) 100692fdd1e7SBram Moolenaar endfunc 100792fdd1e7SBram Moolenaar 100892fdd1e7SBram Moolenaar func Ev(s) 100992fdd1e7SBram Moolenaar let r = pyeval('ev(vim.eval("a:s"))') 101092fdd1e7SBram Moolenaar if exists('exc') 101192fdd1e7SBram Moolenaar throw exc 101292fdd1e7SBram Moolenaar endif 101392fdd1e7SBram Moolenaar return r 101492fdd1e7SBram Moolenaar endfunc 101592fdd1e7SBram Moolenaar 101692fdd1e7SBram Moolenaar py gopts1 = vim.options 101792fdd1e7SBram Moolenaar py wopts1 = vim.windows[2].options 101892fdd1e7SBram Moolenaar py wopts2 = vim.windows[0].options 101992fdd1e7SBram Moolenaar py wopts3 = vim.windows[1].options 102092fdd1e7SBram Moolenaar py bopts1 = vim.buffers[vim.bindeval("g:bufs")[2]].options 102192fdd1e7SBram Moolenaar py bopts2 = vim.buffers[vim.bindeval("g:bufs")[1]].options 102292fdd1e7SBram Moolenaar py bopts3 = vim.buffers[vim.bindeval("g:bufs")[0]].options 102392fdd1e7SBram Moolenaar call add(g:res, 'wopts iters equal: ' .. 102492fdd1e7SBram Moolenaar \ pyeval('list(wopts1) == list(wopts2)')) 102592fdd1e7SBram Moolenaar call add(g:res, 'bopts iters equal: ' .. 102692fdd1e7SBram Moolenaar \ pyeval('list(bopts1) == list(bopts2)')) 102792fdd1e7SBram Moolenaar py gset = set(iter(gopts1)) 102892fdd1e7SBram Moolenaar py wset = set(iter(wopts1)) 102992fdd1e7SBram Moolenaar py bset = set(iter(bopts1)) 103092fdd1e7SBram Moolenaar 103192fdd1e7SBram Moolenaar set path=.,..,, 103292fdd1e7SBram Moolenaar let lst = [] 103392fdd1e7SBram Moolenaar let lst += [['paste', 1, 0, 1, 2, 1, 1, 0]] 103492fdd1e7SBram Moolenaar let lst += [['previewheight', 5, 1, 6, 'a', 0, 1, 0]] 103592fdd1e7SBram Moolenaar let lst += [['operatorfunc', 'A', 'B', 'C', 2, 0, 1, 0]] 103692fdd1e7SBram Moolenaar let lst += [['number', 0, 1, 1, 0, 1, 0, 1]] 103792fdd1e7SBram Moolenaar let lst += [['numberwidth', 2, 3, 5, -100, 0, 0, 1]] 103892fdd1e7SBram Moolenaar let lst += [['colorcolumn', '+1', '+2', '+3', 'abc4', 0, 0, 1]] 103992fdd1e7SBram Moolenaar let lst += [['statusline', '1', '2', '4', 0, 0, 1, 1]] 104092fdd1e7SBram Moolenaar let lst += [['autoindent', 0, 1, 1, 2, 1, 0, 2]] 104192fdd1e7SBram Moolenaar let lst += [['shiftwidth', 0, 2, 1, 3, 0, 0, 2]] 104292fdd1e7SBram Moolenaar let lst += [['omnifunc', 'A', 'B', 'C', 1, 0, 0, 2]] 104392fdd1e7SBram Moolenaar let lst += [['preserveindent', 0, 1, 1, 2, 1, 1, 2]] 104492fdd1e7SBram Moolenaar let lst += [['path', '.,,', ',,', '.', 0, 0, 1, 2]] 104592fdd1e7SBram Moolenaar for [oname, oval1, oval2, oval3, invval, bool, global, local] in lst 104692fdd1e7SBram Moolenaar py oname = vim.eval('oname') 104792fdd1e7SBram Moolenaar py oval1 = vim.bindeval('oval1') 104892fdd1e7SBram Moolenaar py oval2 = vim.bindeval('oval2') 104992fdd1e7SBram Moolenaar py oval3 = vim.bindeval('oval3') 105092fdd1e7SBram Moolenaar if invval is 0 || invval is 1 105192fdd1e7SBram Moolenaar py invval = bool(vim.bindeval('invval')) 105292fdd1e7SBram Moolenaar else 105392fdd1e7SBram Moolenaar py invval = vim.bindeval('invval') 105492fdd1e7SBram Moolenaar endif 105592fdd1e7SBram Moolenaar if bool 105692fdd1e7SBram Moolenaar py oval1 = bool(oval1) 105792fdd1e7SBram Moolenaar py oval2 = bool(oval2) 105892fdd1e7SBram Moolenaar py oval3 = bool(oval3) 105992fdd1e7SBram Moolenaar endif 106092fdd1e7SBram Moolenaar call add(g:res, '>>> ' .. oname) 106192fdd1e7SBram Moolenaar call add(g:res, ' g/w/b:' .. pyeval('oname in gset') .. '/' .. 106292fdd1e7SBram Moolenaar \ pyeval('oname in wset') .. '/' .. pyeval('oname in bset')) 106392fdd1e7SBram Moolenaar call add(g:res, ' g/w/b (in):' .. pyeval('oname in gopts1') .. '/' .. 106492fdd1e7SBram Moolenaar \ pyeval('oname in wopts1') .. '/' .. pyeval('oname in bopts1')) 106592fdd1e7SBram Moolenaar for v in ['gopts1', 'wopts1', 'bopts1'] 106692fdd1e7SBram Moolenaar try 106792fdd1e7SBram Moolenaar call add(g:res, ' p/' .. v .. ': ' .. Ev('repr(' .. v .. '[''' .. oname .. '''])')) 106892fdd1e7SBram Moolenaar catch 106992fdd1e7SBram Moolenaar call add(g:res, ' p/' .. v .. '! ' .. v:exception) 107092fdd1e7SBram Moolenaar endtry 107192fdd1e7SBram Moolenaar let r = E(v .. '[''' .. oname .. ''']=invval') 107292fdd1e7SBram Moolenaar if r isnot 0 107392fdd1e7SBram Moolenaar call add(g:res, ' inv: ' .. string(invval) .. '! ' .. r) 107492fdd1e7SBram Moolenaar endif 107592fdd1e7SBram Moolenaar for vv in (v is# 'gopts1' ? [v] : [v, v[:-2] .. '2', v[:-2] .. '3']) 107692fdd1e7SBram Moolenaar let val = substitute(vv, '^.opts', 'oval', '') 107792fdd1e7SBram Moolenaar let r = E(vv .. '[''' .. oname .. ''']=' .. val) 107892fdd1e7SBram Moolenaar if r isnot 0 107992fdd1e7SBram Moolenaar call add(g:res, ' ' .. vv .. '! ' .. r) 108092fdd1e7SBram Moolenaar endif 108192fdd1e7SBram Moolenaar endfor 108292fdd1e7SBram Moolenaar endfor 108392fdd1e7SBram Moolenaar call RecVars(oname) 108492fdd1e7SBram Moolenaar for v in ['wopts3', 'bopts3'] 108592fdd1e7SBram Moolenaar let r = E('del ' .. v .. '["' .. oname .. '"]') 108692fdd1e7SBram Moolenaar if r isnot 0 108792fdd1e7SBram Moolenaar call add(g:res, ' del ' .. v .. '! ' .. r) 108892fdd1e7SBram Moolenaar endif 108992fdd1e7SBram Moolenaar endfor 109092fdd1e7SBram Moolenaar call RecVars(oname) 109192fdd1e7SBram Moolenaar endfor 109292fdd1e7SBram Moolenaar delfunction RecVars 109392fdd1e7SBram Moolenaar delfunction E 109492fdd1e7SBram Moolenaar delfunction Ev 109592fdd1e7SBram Moolenaar py del ev 109692fdd1e7SBram Moolenaar py del e 109792fdd1e7SBram Moolenaar only 109892fdd1e7SBram Moolenaar for buf in g:bufs[1:] 109992fdd1e7SBram Moolenaar execute 'bwipeout!' buf 110092fdd1e7SBram Moolenaar endfor 110192fdd1e7SBram Moolenaar py del gopts1 110292fdd1e7SBram Moolenaar py del wopts1 110392fdd1e7SBram Moolenaar py del wopts2 110492fdd1e7SBram Moolenaar py del wopts3 110592fdd1e7SBram Moolenaar py del bopts1 110692fdd1e7SBram Moolenaar py del bopts2 110792fdd1e7SBram Moolenaar py del bopts3 110892fdd1e7SBram Moolenaar py del oval1 110992fdd1e7SBram Moolenaar py del oval2 111092fdd1e7SBram Moolenaar py del oval3 111192fdd1e7SBram Moolenaar py del oname 111292fdd1e7SBram Moolenaar py del invval 111392fdd1e7SBram Moolenaar 111492fdd1e7SBram Moolenaar let expected =<< trim END 111592fdd1e7SBram Moolenaar wopts iters equal: 1 111692fdd1e7SBram Moolenaar bopts iters equal: 1 111792fdd1e7SBram Moolenaar >>> paste 111892fdd1e7SBram Moolenaar g/w/b:1/0/0 111992fdd1e7SBram Moolenaar g/w/b (in):1/0/0 112092fdd1e7SBram Moolenaar p/gopts1: False 112192fdd1e7SBram Moolenaar p/wopts1! KeyError 112292fdd1e7SBram Moolenaar inv: 2! KeyError 112392fdd1e7SBram Moolenaar wopts1! KeyError 112492fdd1e7SBram Moolenaar wopts2! KeyError 112592fdd1e7SBram Moolenaar wopts3! KeyError 112692fdd1e7SBram Moolenaar p/bopts1! KeyError 112792fdd1e7SBram Moolenaar inv: 2! KeyError 112892fdd1e7SBram Moolenaar bopts1! KeyError 112992fdd1e7SBram Moolenaar bopts2! KeyError 113092fdd1e7SBram Moolenaar bopts3! KeyError 113192fdd1e7SBram Moolenaar G: 1 113292fdd1e7SBram Moolenaar W: 1:1 2:1 3:1 4:1 113392fdd1e7SBram Moolenaar B: 1:1 2:1 3:1 4:1 113492fdd1e7SBram Moolenaar del wopts3! KeyError 113592fdd1e7SBram Moolenaar del bopts3! KeyError 113692fdd1e7SBram Moolenaar G: 1 113792fdd1e7SBram Moolenaar W: 1:1 2:1 3:1 4:1 113892fdd1e7SBram Moolenaar B: 1:1 2:1 3:1 4:1 113992fdd1e7SBram Moolenaar >>> previewheight 114092fdd1e7SBram Moolenaar g/w/b:1/0/0 114192fdd1e7SBram Moolenaar g/w/b (in):1/0/0 114292fdd1e7SBram Moolenaar p/gopts1: 12 114392fdd1e7SBram Moolenaar inv: 'a'! TypeError 114492fdd1e7SBram Moolenaar p/wopts1! KeyError 114592fdd1e7SBram Moolenaar inv: 'a'! KeyError 114692fdd1e7SBram Moolenaar wopts1! KeyError 114792fdd1e7SBram Moolenaar wopts2! KeyError 114892fdd1e7SBram Moolenaar wopts3! KeyError 114992fdd1e7SBram Moolenaar p/bopts1! KeyError 115092fdd1e7SBram Moolenaar inv: 'a'! KeyError 115192fdd1e7SBram Moolenaar bopts1! KeyError 115292fdd1e7SBram Moolenaar bopts2! KeyError 115392fdd1e7SBram Moolenaar bopts3! KeyError 115492fdd1e7SBram Moolenaar G: 5 115592fdd1e7SBram Moolenaar W: 1:5 2:5 3:5 4:5 115692fdd1e7SBram Moolenaar B: 1:5 2:5 3:5 4:5 115792fdd1e7SBram Moolenaar del wopts3! KeyError 115892fdd1e7SBram Moolenaar del bopts3! KeyError 115992fdd1e7SBram Moolenaar G: 5 116092fdd1e7SBram Moolenaar W: 1:5 2:5 3:5 4:5 116192fdd1e7SBram Moolenaar B: 1:5 2:5 3:5 4:5 116292fdd1e7SBram Moolenaar >>> operatorfunc 116392fdd1e7SBram Moolenaar g/w/b:1/0/0 116492fdd1e7SBram Moolenaar g/w/b (in):1/0/0 116592fdd1e7SBram Moolenaar p/gopts1: '' 116692fdd1e7SBram Moolenaar inv: 2! TypeError 116792fdd1e7SBram Moolenaar p/wopts1! KeyError 116892fdd1e7SBram Moolenaar inv: 2! KeyError 116992fdd1e7SBram Moolenaar wopts1! KeyError 117092fdd1e7SBram Moolenaar wopts2! KeyError 117192fdd1e7SBram Moolenaar wopts3! KeyError 117292fdd1e7SBram Moolenaar p/bopts1! KeyError 117392fdd1e7SBram Moolenaar inv: 2! KeyError 117492fdd1e7SBram Moolenaar bopts1! KeyError 117592fdd1e7SBram Moolenaar bopts2! KeyError 117692fdd1e7SBram Moolenaar bopts3! KeyError 117792fdd1e7SBram Moolenaar G: 'A' 117892fdd1e7SBram Moolenaar W: 1:'A' 2:'A' 3:'A' 4:'A' 117992fdd1e7SBram Moolenaar B: 1:'A' 2:'A' 3:'A' 4:'A' 118092fdd1e7SBram Moolenaar del wopts3! KeyError 118192fdd1e7SBram Moolenaar del bopts3! KeyError 118292fdd1e7SBram Moolenaar G: 'A' 118392fdd1e7SBram Moolenaar W: 1:'A' 2:'A' 3:'A' 4:'A' 118492fdd1e7SBram Moolenaar B: 1:'A' 2:'A' 3:'A' 4:'A' 118592fdd1e7SBram Moolenaar >>> number 118692fdd1e7SBram Moolenaar g/w/b:0/1/0 118792fdd1e7SBram Moolenaar g/w/b (in):0/1/0 118892fdd1e7SBram Moolenaar p/gopts1! KeyError 118992fdd1e7SBram Moolenaar inv: 0! KeyError 119092fdd1e7SBram Moolenaar gopts1! KeyError 119192fdd1e7SBram Moolenaar p/wopts1: False 119292fdd1e7SBram Moolenaar p/bopts1! KeyError 119392fdd1e7SBram Moolenaar inv: 0! KeyError 119492fdd1e7SBram Moolenaar bopts1! KeyError 119592fdd1e7SBram Moolenaar bopts2! KeyError 119692fdd1e7SBram Moolenaar bopts3! KeyError 119792fdd1e7SBram Moolenaar G: 0 119892fdd1e7SBram Moolenaar W: 1:1 2:1 3:0 4:0 119992fdd1e7SBram Moolenaar B: 1:1 2:1 3:0 4:0 120092fdd1e7SBram Moolenaar del wopts3! ValueError 120192fdd1e7SBram Moolenaar del bopts3! KeyError 120292fdd1e7SBram Moolenaar G: 0 120392fdd1e7SBram Moolenaar W: 1:1 2:1 3:0 4:0 120492fdd1e7SBram Moolenaar B: 1:1 2:1 3:0 4:0 120592fdd1e7SBram Moolenaar >>> numberwidth 120692fdd1e7SBram Moolenaar g/w/b:0/1/0 120792fdd1e7SBram Moolenaar g/w/b (in):0/1/0 120892fdd1e7SBram Moolenaar p/gopts1! KeyError 120992fdd1e7SBram Moolenaar inv: -100! KeyError 121092fdd1e7SBram Moolenaar gopts1! KeyError 121192fdd1e7SBram Moolenaar p/wopts1: 4 121292fdd1e7SBram Moolenaar inv: -100! error 121392fdd1e7SBram Moolenaar p/bopts1! KeyError 121492fdd1e7SBram Moolenaar inv: -100! KeyError 121592fdd1e7SBram Moolenaar bopts1! KeyError 121692fdd1e7SBram Moolenaar bopts2! KeyError 121792fdd1e7SBram Moolenaar bopts3! KeyError 121892fdd1e7SBram Moolenaar G: 4 121992fdd1e7SBram Moolenaar W: 1:3 2:5 3:2 4:4 122092fdd1e7SBram Moolenaar B: 1:3 2:5 3:2 4:4 122192fdd1e7SBram Moolenaar del wopts3! ValueError 122292fdd1e7SBram Moolenaar del bopts3! KeyError 122392fdd1e7SBram Moolenaar G: 4 122492fdd1e7SBram Moolenaar W: 1:3 2:5 3:2 4:4 122592fdd1e7SBram Moolenaar B: 1:3 2:5 3:2 4:4 122692fdd1e7SBram Moolenaar >>> colorcolumn 122792fdd1e7SBram Moolenaar g/w/b:0/1/0 122892fdd1e7SBram Moolenaar g/w/b (in):0/1/0 122992fdd1e7SBram Moolenaar p/gopts1! KeyError 123092fdd1e7SBram Moolenaar inv: 'abc4'! KeyError 123192fdd1e7SBram Moolenaar gopts1! KeyError 123292fdd1e7SBram Moolenaar p/wopts1: '' 123392fdd1e7SBram Moolenaar inv: 'abc4'! error 123492fdd1e7SBram Moolenaar p/bopts1! KeyError 123592fdd1e7SBram Moolenaar inv: 'abc4'! KeyError 123692fdd1e7SBram Moolenaar bopts1! KeyError 123792fdd1e7SBram Moolenaar bopts2! KeyError 123892fdd1e7SBram Moolenaar bopts3! KeyError 123992fdd1e7SBram Moolenaar G: '' 124092fdd1e7SBram Moolenaar W: 1:'+2' 2:'+3' 3:'+1' 4:'' 124192fdd1e7SBram Moolenaar B: 1:'+2' 2:'+3' 3:'+1' 4:'' 124292fdd1e7SBram Moolenaar del wopts3! ValueError 124392fdd1e7SBram Moolenaar del bopts3! KeyError 124492fdd1e7SBram Moolenaar G: '' 124592fdd1e7SBram Moolenaar W: 1:'+2' 2:'+3' 3:'+1' 4:'' 124692fdd1e7SBram Moolenaar B: 1:'+2' 2:'+3' 3:'+1' 4:'' 124792fdd1e7SBram Moolenaar >>> statusline 124892fdd1e7SBram Moolenaar g/w/b:1/1/0 124992fdd1e7SBram Moolenaar g/w/b (in):1/1/0 125092fdd1e7SBram Moolenaar p/gopts1: '' 125192fdd1e7SBram Moolenaar inv: 0! TypeError 125292fdd1e7SBram Moolenaar p/wopts1: None 125392fdd1e7SBram Moolenaar inv: 0! TypeError 125492fdd1e7SBram Moolenaar p/bopts1! KeyError 125592fdd1e7SBram Moolenaar inv: 0! KeyError 125692fdd1e7SBram Moolenaar bopts1! KeyError 125792fdd1e7SBram Moolenaar bopts2! KeyError 125892fdd1e7SBram Moolenaar bopts3! KeyError 125992fdd1e7SBram Moolenaar G: '1' 126092fdd1e7SBram Moolenaar W: 1:'2' 2:'4' 3:'1' 4:'1' 126192fdd1e7SBram Moolenaar B: 1:'2' 2:'4' 3:'1' 4:'1' 126292fdd1e7SBram Moolenaar del bopts3! KeyError 126392fdd1e7SBram Moolenaar G: '1' 126492fdd1e7SBram Moolenaar W: 1:'2' 2:'1' 3:'1' 4:'1' 126592fdd1e7SBram Moolenaar B: 1:'2' 2:'1' 3:'1' 4:'1' 126692fdd1e7SBram Moolenaar >>> autoindent 126792fdd1e7SBram Moolenaar g/w/b:0/0/1 126892fdd1e7SBram Moolenaar g/w/b (in):0/0/1 126992fdd1e7SBram Moolenaar p/gopts1! KeyError 127092fdd1e7SBram Moolenaar inv: 2! KeyError 127192fdd1e7SBram Moolenaar gopts1! KeyError 127292fdd1e7SBram Moolenaar p/wopts1! KeyError 127392fdd1e7SBram Moolenaar inv: 2! KeyError 127492fdd1e7SBram Moolenaar wopts1! KeyError 127592fdd1e7SBram Moolenaar wopts2! KeyError 127692fdd1e7SBram Moolenaar wopts3! KeyError 127792fdd1e7SBram Moolenaar p/bopts1: False 127892fdd1e7SBram Moolenaar G: 0 127992fdd1e7SBram Moolenaar W: 1:0 2:1 3:0 4:1 128092fdd1e7SBram Moolenaar B: 1:0 2:1 3:0 4:1 128192fdd1e7SBram Moolenaar del wopts3! KeyError 128292fdd1e7SBram Moolenaar del bopts3! ValueError 128392fdd1e7SBram Moolenaar G: 0 128492fdd1e7SBram Moolenaar W: 1:0 2:1 3:0 4:1 128592fdd1e7SBram Moolenaar B: 1:0 2:1 3:0 4:1 128692fdd1e7SBram Moolenaar >>> shiftwidth 128792fdd1e7SBram Moolenaar g/w/b:0/0/1 128892fdd1e7SBram Moolenaar g/w/b (in):0/0/1 128992fdd1e7SBram Moolenaar p/gopts1! KeyError 129092fdd1e7SBram Moolenaar inv: 3! KeyError 129192fdd1e7SBram Moolenaar gopts1! KeyError 129292fdd1e7SBram Moolenaar p/wopts1! KeyError 129392fdd1e7SBram Moolenaar inv: 3! KeyError 129492fdd1e7SBram Moolenaar wopts1! KeyError 129592fdd1e7SBram Moolenaar wopts2! KeyError 129692fdd1e7SBram Moolenaar wopts3! KeyError 129792fdd1e7SBram Moolenaar p/bopts1: 8 129892fdd1e7SBram Moolenaar G: 8 129992fdd1e7SBram Moolenaar W: 1:0 2:2 3:8 4:1 130092fdd1e7SBram Moolenaar B: 1:0 2:2 3:8 4:1 130192fdd1e7SBram Moolenaar del wopts3! KeyError 130292fdd1e7SBram Moolenaar del bopts3! ValueError 130392fdd1e7SBram Moolenaar G: 8 130492fdd1e7SBram Moolenaar W: 1:0 2:2 3:8 4:1 130592fdd1e7SBram Moolenaar B: 1:0 2:2 3:8 4:1 130692fdd1e7SBram Moolenaar >>> omnifunc 130792fdd1e7SBram Moolenaar g/w/b:0/0/1 130892fdd1e7SBram Moolenaar g/w/b (in):0/0/1 130992fdd1e7SBram Moolenaar p/gopts1! KeyError 131092fdd1e7SBram Moolenaar inv: 1! KeyError 131192fdd1e7SBram Moolenaar gopts1! KeyError 131292fdd1e7SBram Moolenaar p/wopts1! KeyError 131392fdd1e7SBram Moolenaar inv: 1! KeyError 131492fdd1e7SBram Moolenaar wopts1! KeyError 131592fdd1e7SBram Moolenaar wopts2! KeyError 131692fdd1e7SBram Moolenaar wopts3! KeyError 131792fdd1e7SBram Moolenaar p/bopts1: '' 131892fdd1e7SBram Moolenaar inv: 1! TypeError 131992fdd1e7SBram Moolenaar G: '' 132092fdd1e7SBram Moolenaar W: 1:'A' 2:'B' 3:'' 4:'C' 132192fdd1e7SBram Moolenaar B: 1:'A' 2:'B' 3:'' 4:'C' 132292fdd1e7SBram Moolenaar del wopts3! KeyError 132392fdd1e7SBram Moolenaar del bopts3! ValueError 132492fdd1e7SBram Moolenaar G: '' 132592fdd1e7SBram Moolenaar W: 1:'A' 2:'B' 3:'' 4:'C' 132692fdd1e7SBram Moolenaar B: 1:'A' 2:'B' 3:'' 4:'C' 132792fdd1e7SBram Moolenaar >>> preserveindent 132892fdd1e7SBram Moolenaar g/w/b:0/0/1 132992fdd1e7SBram Moolenaar g/w/b (in):0/0/1 133092fdd1e7SBram Moolenaar p/gopts1! KeyError 133192fdd1e7SBram Moolenaar inv: 2! KeyError 133292fdd1e7SBram Moolenaar gopts1! KeyError 133392fdd1e7SBram Moolenaar p/wopts1! KeyError 133492fdd1e7SBram Moolenaar inv: 2! KeyError 133592fdd1e7SBram Moolenaar wopts1! KeyError 133692fdd1e7SBram Moolenaar wopts2! KeyError 133792fdd1e7SBram Moolenaar wopts3! KeyError 133892fdd1e7SBram Moolenaar p/bopts1: False 133992fdd1e7SBram Moolenaar G: 0 134092fdd1e7SBram Moolenaar W: 1:0 2:1 3:0 4:1 134192fdd1e7SBram Moolenaar B: 1:0 2:1 3:0 4:1 134292fdd1e7SBram Moolenaar del wopts3! KeyError 134392fdd1e7SBram Moolenaar del bopts3! ValueError 134492fdd1e7SBram Moolenaar G: 0 134592fdd1e7SBram Moolenaar W: 1:0 2:1 3:0 4:1 134692fdd1e7SBram Moolenaar B: 1:0 2:1 3:0 4:1 134792fdd1e7SBram Moolenaar >>> path 134892fdd1e7SBram Moolenaar g/w/b:1/0/1 134992fdd1e7SBram Moolenaar g/w/b (in):1/0/1 135092fdd1e7SBram Moolenaar p/gopts1: '.,..,,' 135192fdd1e7SBram Moolenaar inv: 0! TypeError 135292fdd1e7SBram Moolenaar p/wopts1! KeyError 135392fdd1e7SBram Moolenaar inv: 0! KeyError 135492fdd1e7SBram Moolenaar wopts1! KeyError 135592fdd1e7SBram Moolenaar wopts2! KeyError 135692fdd1e7SBram Moolenaar wopts3! KeyError 135792fdd1e7SBram Moolenaar p/bopts1: None 135892fdd1e7SBram Moolenaar inv: 0! TypeError 135992fdd1e7SBram Moolenaar G: '.,,' 136092fdd1e7SBram Moolenaar W: 1:'.,,' 2:',,' 3:'.,,' 4:'.' 136192fdd1e7SBram Moolenaar B: 1:'.,,' 2:',,' 3:'.,,' 4:'.' 136292fdd1e7SBram Moolenaar del wopts3! KeyError 136392fdd1e7SBram Moolenaar G: '.,,' 136492fdd1e7SBram Moolenaar W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,' 136592fdd1e7SBram Moolenaar B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,' 136692fdd1e7SBram Moolenaar END 136792fdd1e7SBram Moolenaar 136892fdd1e7SBram Moolenaar call assert_equal(expected, g:res) 136992fdd1e7SBram Moolenaar unlet g:res 1370ab589463SBram Moolenaar 1371ab589463SBram Moolenaar call assert_equal(0, pyeval("'' in vim.options")) 1372ab589463SBram Moolenaar 1373ab589463SBram Moolenaar " use an empty key to index vim.options 1374ab589463SBram Moolenaar call AssertException(["let v = pyeval(\"vim.options['']\")"], 1375ab589463SBram Moolenaar \ 'Vim(let):ValueError: empty keys are not allowed') 1376ab589463SBram Moolenaar call AssertException(["py vim.current.window.options[''] = 0"], 1377ab589463SBram Moolenaar \ 'Vim(python):ValueError: empty keys are not allowed') 1378ab589463SBram Moolenaar call AssertException(["py vim.current.window.options[{}] = 0"], 1379ab589463SBram Moolenaar \ 'Vim(python):TypeError: expected str() or unicode() instance, but got dict') 1380ab589463SBram Moolenaar 1381ab589463SBram Moolenaar " set one of the number options to a very large number 1382ab589463SBram Moolenaar let cmd = ["py vim.options['previewheight'] = 9999999999999999"] 1383ab589463SBram Moolenaar call AssertException(cmd, 'OverflowError:') 1384ab589463SBram Moolenaar 1385ab589463SBram Moolenaar " unset a global-local string option 1386ab589463SBram Moolenaar call AssertException(["py del vim.options['errorformat']"], 1387ab589463SBram Moolenaar \ 'Vim(python):ValueError: unable to unset global option errorformat') 138892fdd1e7SBram Moolenaarendfunc 138992fdd1e7SBram Moolenaar 139092fdd1e7SBram Moolenaar" Test for vim.buffer object 139192fdd1e7SBram Moolenaarfunc Test_python_buffer() 139292fdd1e7SBram Moolenaar new 139392fdd1e7SBram Moolenaar call setline(1, "Hello\nWorld") 139492fdd1e7SBram Moolenaar call assert_fails("let x = pyeval('vim.current.buffer[0]')", 'E859:') 139592fdd1e7SBram Moolenaar %bw! 139692fdd1e7SBram Moolenaar 139792fdd1e7SBram Moolenaar edit Xfile1 139892fdd1e7SBram Moolenaar let bnr1 = bufnr() 139992fdd1e7SBram Moolenaar py cb = vim.current.buffer 140092fdd1e7SBram Moolenaar vnew Xfile2 140192fdd1e7SBram Moolenaar let bnr2 = bufnr() 140292fdd1e7SBram Moolenaar call setline(1, ['First line', 'Second line', 'Third line']) 140392fdd1e7SBram Moolenaar py b = vim.current.buffer 140492fdd1e7SBram Moolenaar wincmd w 140592fdd1e7SBram Moolenaar 1406ab589463SBram Moolenaar " Test for getting lines from the buffer using a slice 1407ab589463SBram Moolenaar call assert_equal(['First line'], pyeval('b[-10:1]')) 1408ab589463SBram Moolenaar call assert_equal(['Third line'], pyeval('b[2:10]')) 1409ab589463SBram Moolenaar call assert_equal([], pyeval('b[2:0]')) 1410ab589463SBram Moolenaar call assert_equal([], pyeval('b[10:12]')) 1411ab589463SBram Moolenaar call assert_equal([], pyeval('b[-10:-8]')) 1412*0ab55d62SBram Moolenaar call AssertException(["py x = b[0:3:0]"], 1413*0ab55d62SBram Moolenaar \ "Vim(python):TypeError: sequence index must be integer, not 'slice'") 1414*0ab55d62SBram Moolenaar call AssertException(["py b[0:3:0] = 'abc'"], 1415*0ab55d62SBram Moolenaar \ "Vim(python):TypeError: sequence index must be integer, not 'slice'") 1416*0ab55d62SBram Moolenaar call AssertException(["py x = b[{}]"], 1417*0ab55d62SBram Moolenaar \ "Vim(python):TypeError: sequence index must be integer, not 'dict'") 1418*0ab55d62SBram Moolenaar call AssertException(["py b[{}] = 'abc'"], 1419*0ab55d62SBram Moolenaar \ "Vim(python):TypeError: sequence index must be integer, not 'dict'") 1420*0ab55d62SBram Moolenaar 1421*0ab55d62SBram Moolenaar " Test for getting lines using a range 1422*0ab55d62SBram Moolenaar call AssertException(["py x = b.range(0,3)[0:2:0]"], 1423*0ab55d62SBram Moolenaar \ "Vim(python):TypeError: sequence index must be integer, not 'slice'") 1424*0ab55d62SBram Moolenaar call AssertException(["py b.range(0,3)[0:2:0] = 'abc'"], 1425*0ab55d62SBram Moolenaar \ "Vim(python):TypeError: sequence index must be integer, not 'slice'") 1426ab589463SBram Moolenaar 142792fdd1e7SBram Moolenaar " Tests BufferAppend and BufferItem 142892fdd1e7SBram Moolenaar py cb.append(b[0]) 142992fdd1e7SBram Moolenaar call assert_equal(['First line'], getbufline(bnr1, 2)) 143092fdd1e7SBram Moolenaar %d 143192fdd1e7SBram Moolenaar 1432ab589463SBram Moolenaar " Try to append using out-of-range line number 1433ab589463SBram Moolenaar call AssertException(["py b.append('abc', 10)"], 1434ab589463SBram Moolenaar \ 'Vim(python):IndexError: line number out of range') 1435ab589463SBram Moolenaar 1436ab589463SBram Moolenaar " Append a non-string item 1437ab589463SBram Moolenaar call AssertException(["py b.append([22])"], 1438ab589463SBram Moolenaar \ 'Vim(python):TypeError: expected str() or unicode() instance, but got int') 1439ab589463SBram Moolenaar 144092fdd1e7SBram Moolenaar " Tests BufferSlice and BufferAssSlice 144192fdd1e7SBram Moolenaar py cb.append('abc5') # Will be overwritten 144292fdd1e7SBram Moolenaar py cb[-1:] = b[:-2] 144392fdd1e7SBram Moolenaar call assert_equal(['First line'], getbufline(bnr1, 2)) 144492fdd1e7SBram Moolenaar %d 144592fdd1e7SBram Moolenaar 144692fdd1e7SBram Moolenaar " Test BufferLength and BufferAssSlice 144792fdd1e7SBram Moolenaar py cb.append('def') # Will not be overwritten 144892fdd1e7SBram Moolenaar py cb[len(cb):] = b[:] 144992fdd1e7SBram Moolenaar call assert_equal(['def', 'First line', 'Second line', 'Third line'], 145092fdd1e7SBram Moolenaar \ getbufline(bnr1, 2, '$')) 145192fdd1e7SBram Moolenaar %d 145292fdd1e7SBram Moolenaar 145392fdd1e7SBram Moolenaar " Test BufferAssItem and BufferMark 145492fdd1e7SBram Moolenaar call setbufline(bnr1, 1, ['one', 'two', 'three']) 145592fdd1e7SBram Moolenaar call cursor(1, 3) 145692fdd1e7SBram Moolenaar normal ma 145792fdd1e7SBram Moolenaar py cb.append('ghi') # Will be overwritten 145892fdd1e7SBram Moolenaar py cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1])) 145992fdd1e7SBram Moolenaar call assert_equal(['(3, 2)'], getbufline(bnr1, 4)) 146092fdd1e7SBram Moolenaar %d 146192fdd1e7SBram Moolenaar 146292fdd1e7SBram Moolenaar " Test BufferRepr 146392fdd1e7SBram Moolenaar py cb.append(repr(cb) + repr(b)) 146492fdd1e7SBram Moolenaar call assert_equal(['<buffer Xfile1><buffer Xfile2>'], getbufline(bnr1, 2)) 146592fdd1e7SBram Moolenaar %d 146692fdd1e7SBram Moolenaar 146792fdd1e7SBram Moolenaar " Modify foreign buffer 146892fdd1e7SBram Moolenaar py << trim EOF 146992fdd1e7SBram Moolenaar b.append('foo') 147092fdd1e7SBram Moolenaar b[0]='bar' 147192fdd1e7SBram Moolenaar b[0:0]=['baz'] 147292fdd1e7SBram Moolenaar vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number) 147392fdd1e7SBram Moolenaar EOF 147492fdd1e7SBram Moolenaar call assert_equal(['baz', 'bar', 'Second line', 'Third line', 'foo'], 147592fdd1e7SBram Moolenaar \ getbufline(bnr2, 1, '$')) 147692fdd1e7SBram Moolenaar %d 147792fdd1e7SBram Moolenaar 147892fdd1e7SBram Moolenaar " Test assigning to name property 147992fdd1e7SBram Moolenaar augroup BUFS 148092fdd1e7SBram Moolenaar autocmd BufFilePost * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")')) 148192fdd1e7SBram Moolenaar autocmd BufFilePre * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")')) 148292fdd1e7SBram Moolenaar augroup END 148392fdd1e7SBram Moolenaar py << trim EOF 148492fdd1e7SBram Moolenaar import os 148592fdd1e7SBram Moolenaar old_name = cb.name 148692fdd1e7SBram Moolenaar cb.name = 'foo' 148792fdd1e7SBram Moolenaar cb.append(cb.name[-11:].replace(os.path.sep, '/')) 148892fdd1e7SBram Moolenaar b.name = 'bar' 148992fdd1e7SBram Moolenaar cb.append(b.name[-11:].replace(os.path.sep, '/')) 149092fdd1e7SBram Moolenaar cb.name = old_name 149192fdd1e7SBram Moolenaar cb.append(cb.name[-14:].replace(os.path.sep, '/')) 149292fdd1e7SBram Moolenaar del old_name 149392fdd1e7SBram Moolenaar EOF 149492fdd1e7SBram Moolenaar call assert_equal([bnr1 .. ':BufFilePre:' .. bnr1, 149592fdd1e7SBram Moolenaar \ bnr1 .. ':BufFilePost:' .. bnr1, 149692fdd1e7SBram Moolenaar \ 'testdir/foo', 149792fdd1e7SBram Moolenaar \ bnr2 .. ':BufFilePre:' .. bnr2, 149892fdd1e7SBram Moolenaar \ bnr2 .. ':BufFilePost:' .. bnr2, 149992fdd1e7SBram Moolenaar \ 'testdir/bar', 150092fdd1e7SBram Moolenaar \ bnr1 .. ':BufFilePre:' .. bnr1, 150192fdd1e7SBram Moolenaar \ bnr1 .. ':BufFilePost:' .. bnr1, 150292fdd1e7SBram Moolenaar \ 'testdir/Xfile1'], getbufline(bnr1, 2, '$')) 150392fdd1e7SBram Moolenaar %d 150492fdd1e7SBram Moolenaar 150592fdd1e7SBram Moolenaar " Test CheckBuffer 150692fdd1e7SBram Moolenaar py << trim EOF 150792fdd1e7SBram Moolenaar for _b in vim.buffers: 150892fdd1e7SBram Moolenaar if _b is not cb: 150992fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(_b.number)) 151092fdd1e7SBram Moolenaar del _b 151192fdd1e7SBram Moolenaar cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid))) 151292fdd1e7SBram Moolenaar EOF 151392fdd1e7SBram Moolenaar call assert_equal('valid: b:False, cb:True', getline(2)) 151492fdd1e7SBram Moolenaar %d 151592fdd1e7SBram Moolenaar 151692fdd1e7SBram Moolenaar py << trim EOF 151792fdd1e7SBram Moolenaar for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")', 'b.name = "!"'): 151892fdd1e7SBram Moolenaar try: 151992fdd1e7SBram Moolenaar exec(expr) 152092fdd1e7SBram Moolenaar except vim.error: 152192fdd1e7SBram Moolenaar pass 152292fdd1e7SBram Moolenaar else: 152392fdd1e7SBram Moolenaar # Usually a SEGV here 152492fdd1e7SBram Moolenaar # Should not happen in any case 152592fdd1e7SBram Moolenaar cb.append('No exception for ' + expr) 152692fdd1e7SBram Moolenaar vim.command('cd .') 152792fdd1e7SBram Moolenaar del b 152892fdd1e7SBram Moolenaar EOF 152992fdd1e7SBram Moolenaar call assert_equal([''], getline(1, '$')) 153092fdd1e7SBram Moolenaar 1531ab589463SBram Moolenaar " Delete all the lines in a buffer 1532ab589463SBram Moolenaar call setline(1, ['a', 'b', 'c']) 1533ab589463SBram Moolenaar py vim.current.buffer[:] = [] 1534ab589463SBram Moolenaar call assert_equal([''], getline(1, '$')) 1535ab589463SBram Moolenaar 1536*0ab55d62SBram Moolenaar " Test for buffer marks 1537*0ab55d62SBram Moolenaar call assert_equal(v:none, pyeval("vim.current.buffer.mark('r')")) 1538*0ab55d62SBram Moolenaar 1539ab589463SBram Moolenaar " Test for modifying a 'nomodifiable' buffer 1540ab589463SBram Moolenaar setlocal nomodifiable 1541ab589463SBram Moolenaar call AssertException(["py vim.current.buffer[0] = 'abc'"], 1542ab589463SBram Moolenaar \ "Vim(python):vim.error: Vim:E21: Cannot make changes, 'modifiable' is off") 1543ab589463SBram Moolenaar call AssertException(["py vim.current.buffer[0] = None"], 1544ab589463SBram Moolenaar \ "Vim(python):vim.error: Vim:E21: Cannot make changes, 'modifiable' is off") 1545ab589463SBram Moolenaar call AssertException(["py vim.current.buffer[:] = None"], 1546ab589463SBram Moolenaar \ "Vim(python):vim.error: Vim:E21: Cannot make changes, 'modifiable' is off") 1547ab589463SBram Moolenaar call AssertException(["py vim.current.buffer[:] = []"], 1548ab589463SBram Moolenaar \ "Vim(python):vim.error: Vim:E21: Cannot make changes, 'modifiable' is off") 1549ab589463SBram Moolenaar call AssertException(["py vim.current.buffer.append('abc')"], 1550ab589463SBram Moolenaar \ "Vim(python):vim.error: Vim:E21: Cannot make changes, 'modifiable' is off") 1551ab589463SBram Moolenaar call AssertException(["py vim.current.buffer.append([])"], 1552ab589463SBram Moolenaar \ "Vim(python):vim.error: Vim:E21: Cannot make changes, 'modifiable' is off") 1553ab589463SBram Moolenaar setlocal modifiable 1554ab589463SBram Moolenaar 155592fdd1e7SBram Moolenaar augroup BUFS 155692fdd1e7SBram Moolenaar autocmd! 155792fdd1e7SBram Moolenaar augroup END 155892fdd1e7SBram Moolenaar augroup! BUFS 155992fdd1e7SBram Moolenaar %bw! 1560ab589463SBram Moolenaar 1561ab589463SBram Moolenaar " Range object for a deleted buffer 1562ab589463SBram Moolenaar new Xfile 1563ab589463SBram Moolenaar call setline(1, ['one', 'two', 'three']) 1564ab589463SBram Moolenaar py b = vim.current.buffer 1565ab589463SBram Moolenaar py r = vim.current.buffer.range(0, 2) 1566ab589463SBram Moolenaar call assert_equal('<range Xfile (0:2)>', pyeval('repr(r)')) 1567ab589463SBram Moolenaar %bw! 1568ab589463SBram Moolenaar call AssertException(['py r[:] = []'], 1569ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted buffer') 1570ab589463SBram Moolenaar call assert_match('<buffer object (deleted)', pyeval('repr(b)')) 1571ab589463SBram Moolenaar call assert_match('<range object (for deleted buffer)', pyeval('repr(r)')) 1572ab589463SBram Moolenaar call AssertException(["let n = pyeval('len(r)')"], 1573ab589463SBram Moolenaar \ 'Vim(let):vim.error: attempt to refer to deleted buffer') 1574ab589463SBram Moolenaar call AssertException(["py r.append('abc')"], 1575ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted buffer') 1576ab589463SBram Moolenaar 1577ab589463SBram Moolenaar " object for a deleted buffer 1578ab589463SBram Moolenaar call AssertException(["py b[0] = 'one'"], 1579ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted buffer') 1580ab589463SBram Moolenaar call AssertException(["py b.append('one')"], 1581ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted buffer') 1582ab589463SBram Moolenaar call AssertException(["let n = pyeval('len(b)')"], 1583ab589463SBram Moolenaar \ 'Vim(let):vim.error: attempt to refer to deleted buffer') 1584ab589463SBram Moolenaar call AssertException(["py pos = b.mark('a')"], 1585ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted buffer') 1586ab589463SBram Moolenaar call AssertException(["py vim.current.buffer = b"], 1587ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted buffer') 1588ab589463SBram Moolenaar call AssertException(["py rn = b.range(0, 2)"], 1589ab589463SBram Moolenaar \ 'Vim(python):vim.error: attempt to refer to deleted buffer') 159092fdd1e7SBram Moolenaarendfunc 159192fdd1e7SBram Moolenaar 159292fdd1e7SBram Moolenaar" Test vim.buffers object 159392fdd1e7SBram Moolenaarfunc Test_python_buffers() 159492fdd1e7SBram Moolenaar %bw! 159592fdd1e7SBram Moolenaar edit Xfile 159692fdd1e7SBram Moolenaar py cb = vim.current.buffer 159792fdd1e7SBram Moolenaar set hidden 159892fdd1e7SBram Moolenaar edit a 159992fdd1e7SBram Moolenaar buffer # 160092fdd1e7SBram Moolenaar edit b 160192fdd1e7SBram Moolenaar buffer # 160292fdd1e7SBram Moolenaar edit c 160392fdd1e7SBram Moolenaar buffer # 160492fdd1e7SBram Moolenaar py << trim EOF 160592fdd1e7SBram Moolenaar try: 160692fdd1e7SBram Moolenaar from __builtin__ import next 160792fdd1e7SBram Moolenaar except ImportError: 160892fdd1e7SBram Moolenaar next = lambda o: o.next() 160992fdd1e7SBram Moolenaar # Check GCing iterator that was not fully exhausted 161092fdd1e7SBram Moolenaar i = iter(vim.buffers) 161192fdd1e7SBram Moolenaar cb.append('i:' + str(next(i))) 161292fdd1e7SBram Moolenaar # and also check creating more than one iterator at a time 161392fdd1e7SBram Moolenaar i2 = iter(vim.buffers) 161492fdd1e7SBram Moolenaar cb.append('i2:' + str(next(i2))) 161592fdd1e7SBram Moolenaar cb.append('i:' + str(next(i))) 161692fdd1e7SBram Moolenaar # The following should trigger GC and not cause any problems 161792fdd1e7SBram Moolenaar del i 161892fdd1e7SBram Moolenaar del i2 161992fdd1e7SBram Moolenaar i3 = iter(vim.buffers) 162092fdd1e7SBram Moolenaar cb.append('i3:' + str(next(i3))) 162192fdd1e7SBram Moolenaar del i3 162292fdd1e7SBram Moolenaar EOF 162392fdd1e7SBram Moolenaar call assert_equal(['i:<buffer Xfile>', 162492fdd1e7SBram Moolenaar \ 'i2:<buffer Xfile>', 'i:<buffer a>', 'i3:<buffer Xfile>'], 162592fdd1e7SBram Moolenaar \ getline(2, '$')) 162692fdd1e7SBram Moolenaar %d 162792fdd1e7SBram Moolenaar 162892fdd1e7SBram Moolenaar py << trim EOF 162992fdd1e7SBram Moolenaar prevnum = 0 163092fdd1e7SBram Moolenaar for b in vim.buffers: 163192fdd1e7SBram Moolenaar # Check buffer order 163292fdd1e7SBram Moolenaar if prevnum >= b.number: 163392fdd1e7SBram Moolenaar cb.append('!!! Buffer numbers not in strictly ascending order') 163492fdd1e7SBram Moolenaar # Check indexing: vim.buffers[number].number == number 163592fdd1e7SBram Moolenaar cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + \ 163692fdd1e7SBram Moolenaar '=' + repr(b)) 163792fdd1e7SBram Moolenaar prevnum = b.number 163892fdd1e7SBram Moolenaar del prevnum 163992fdd1e7SBram Moolenaar 164092fdd1e7SBram Moolenaar cb.append(str(len(vim.buffers))) 164192fdd1e7SBram Moolenaar EOF 164292fdd1e7SBram Moolenaar call assert_equal([bufnr('Xfile') .. ':<buffer Xfile>=<buffer Xfile>', 164392fdd1e7SBram Moolenaar \ bufnr('a') .. ':<buffer a>=<buffer a>', 164492fdd1e7SBram Moolenaar \ bufnr('b') .. ':<buffer b>=<buffer b>', 164592fdd1e7SBram Moolenaar \ bufnr('c') .. ':<buffer c>=<buffer c>', '4'], getline(2, '$')) 164692fdd1e7SBram Moolenaar %d 164792fdd1e7SBram Moolenaar 164892fdd1e7SBram Moolenaar py << trim EOF 164992fdd1e7SBram Moolenaar bnums = list(map(lambda b: b.number, vim.buffers))[1:] 165092fdd1e7SBram Moolenaar 165192fdd1e7SBram Moolenaar # Test wiping out buffer with existing iterator 165292fdd1e7SBram Moolenaar i4 = iter(vim.buffers) 165392fdd1e7SBram Moolenaar cb.append('i4:' + str(next(i4))) 165492fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(bnums.pop(0))) 165592fdd1e7SBram Moolenaar try: 165692fdd1e7SBram Moolenaar next(i4) 165792fdd1e7SBram Moolenaar except vim.error: 165892fdd1e7SBram Moolenaar pass 165992fdd1e7SBram Moolenaar else: 166092fdd1e7SBram Moolenaar cb.append('!!!! No vim.error') 166192fdd1e7SBram Moolenaar i4 = iter(vim.buffers) 166292fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(bnums.pop(-1))) 166392fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(bnums.pop(-1))) 166492fdd1e7SBram Moolenaar cb.append('i4:' + str(next(i4))) 166592fdd1e7SBram Moolenaar try: 166692fdd1e7SBram Moolenaar next(i4) 166792fdd1e7SBram Moolenaar except StopIteration: 166892fdd1e7SBram Moolenaar cb.append('StopIteration') 166992fdd1e7SBram Moolenaar del i4 167092fdd1e7SBram Moolenaar del bnums 167192fdd1e7SBram Moolenaar EOF 167292fdd1e7SBram Moolenaar call assert_equal(['i4:<buffer Xfile>', 167392fdd1e7SBram Moolenaar \ 'i4:<buffer Xfile>', 'StopIteration'], getline(2, '$')) 167492fdd1e7SBram Moolenaar %bw! 167592fdd1e7SBram Moolenaarendfunc 167692fdd1e7SBram Moolenaar 167792fdd1e7SBram Moolenaar" Test vim.{tabpage,window}list and vim.{tabpage,window} objects 167892fdd1e7SBram Moolenaarfunc Test_python_tabpage_window() 167992fdd1e7SBram Moolenaar %bw 168092fdd1e7SBram Moolenaar edit Xfile 168192fdd1e7SBram Moolenaar py cb = vim.current.buffer 168292fdd1e7SBram Moolenaar tabnew 0 168392fdd1e7SBram Moolenaar tabnew 1 168492fdd1e7SBram Moolenaar vnew a.1 168592fdd1e7SBram Moolenaar tabnew 2 168692fdd1e7SBram Moolenaar vnew a.2 168792fdd1e7SBram Moolenaar vnew b.2 168892fdd1e7SBram Moolenaar vnew c.2 168992fdd1e7SBram Moolenaar 1690ab589463SBram Moolenaar call assert_equal(4, pyeval('vim.current.window.tabpage.number')) 1691ab589463SBram Moolenaar 169292fdd1e7SBram Moolenaar py << trim EOF 169392fdd1e7SBram Moolenaar cb.append('Number of tabs: ' + str(len(vim.tabpages))) 169492fdd1e7SBram Moolenaar cb.append('Current tab pages:') 169592fdd1e7SBram Moolenaar def W(w): 169692fdd1e7SBram Moolenaar if repr(w).find('(unknown)') != -1: 169792fdd1e7SBram Moolenaar return '<window object (unknown)>' 169892fdd1e7SBram Moolenaar else: 169992fdd1e7SBram Moolenaar return repr(w) 170092fdd1e7SBram Moolenaar 170192fdd1e7SBram Moolenaar start = len(cb) 170292fdd1e7SBram Moolenaar 170392fdd1e7SBram Moolenaar def Cursor(w): 170492fdd1e7SBram Moolenaar if w.buffer is cb: 170592fdd1e7SBram Moolenaar return repr((start - w.cursor[0], w.cursor[1])) 170692fdd1e7SBram Moolenaar else: 170792fdd1e7SBram Moolenaar return repr(w.cursor) 170892fdd1e7SBram Moolenaar 170992fdd1e7SBram Moolenaar for t in vim.tabpages: 171092fdd1e7SBram Moolenaar cb.append(' ' + repr(t) + '(' + str(t.number) + ')' + ': ' + \ 171192fdd1e7SBram Moolenaar str(len(t.windows)) + ' windows, current is ' + W(t.window)) 171292fdd1e7SBram Moolenaar cb.append(' Windows:') 171392fdd1e7SBram Moolenaar for w in t.windows: 171492fdd1e7SBram Moolenaar cb.append(' ' + W(w) + '(' + str(w.number) + ')' + \ 171592fdd1e7SBram Moolenaar ': displays buffer ' + repr(w.buffer) + \ 171692fdd1e7SBram Moolenaar '; cursor is at ' + Cursor(w)) 171792fdd1e7SBram Moolenaar # Other values depend on the size of the terminal, so they are checked 171892fdd1e7SBram Moolenaar # partly: 171992fdd1e7SBram Moolenaar for attr in ('height', 'row', 'width', 'col'): 172092fdd1e7SBram Moolenaar try: 172192fdd1e7SBram Moolenaar aval = getattr(w, attr) 172292fdd1e7SBram Moolenaar if type(aval) is not long: 172392fdd1e7SBram Moolenaar raise TypeError 172492fdd1e7SBram Moolenaar if aval < 0: 172592fdd1e7SBram Moolenaar raise ValueError 172692fdd1e7SBram Moolenaar except Exception: 172792fdd1e7SBram Moolenaar cb.append('!!!!!! Error while getting attribute ' + attr + \ 172892fdd1e7SBram Moolenaar ': ' + sys.exc_type.__name__) 172992fdd1e7SBram Moolenaar del aval 173092fdd1e7SBram Moolenaar del attr 173192fdd1e7SBram Moolenaar w.cursor = (len(w.buffer), 0) 173292fdd1e7SBram Moolenaar del W 173392fdd1e7SBram Moolenaar del Cursor 173492fdd1e7SBram Moolenaar cb.append('Number of windows in current tab page: ' + \ 173592fdd1e7SBram Moolenaar str(len(vim.windows))) 173692fdd1e7SBram Moolenaar if list(vim.windows) != list(vim.current.tabpage.windows): 173792fdd1e7SBram Moolenaar cb.append('!!!!!! Windows differ') 173892fdd1e7SBram Moolenaar EOF 173992fdd1e7SBram Moolenaar 174092fdd1e7SBram Moolenaar let expected =<< trim END 174192fdd1e7SBram Moolenaar Number of tabs: 4 174292fdd1e7SBram Moolenaar Current tab pages: 174392fdd1e7SBram Moolenaar <tabpage 0>(1): 1 windows, current is <window object (unknown)> 174492fdd1e7SBram Moolenaar Windows: 174592fdd1e7SBram Moolenaar <window object (unknown)>(1): displays buffer <buffer Xfile>; cursor is at (2, 0) 174692fdd1e7SBram Moolenaar <tabpage 1>(2): 1 windows, current is <window object (unknown)> 174792fdd1e7SBram Moolenaar Windows: 174892fdd1e7SBram Moolenaar <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0) 174992fdd1e7SBram Moolenaar <tabpage 2>(3): 2 windows, current is <window object (unknown)> 175092fdd1e7SBram Moolenaar Windows: 175192fdd1e7SBram Moolenaar <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0) 175292fdd1e7SBram Moolenaar <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0) 175392fdd1e7SBram Moolenaar <tabpage 3>(4): 4 windows, current is <window 0> 175492fdd1e7SBram Moolenaar Windows: 175592fdd1e7SBram Moolenaar <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0) 175692fdd1e7SBram Moolenaar <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0) 175792fdd1e7SBram Moolenaar <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0) 175892fdd1e7SBram Moolenaar <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0) 175992fdd1e7SBram Moolenaar Number of windows in current tab page: 4 176092fdd1e7SBram Moolenaar END 176192fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 176292fdd1e7SBram Moolenaar %bw! 176392fdd1e7SBram Moolenaarendfunc 176492fdd1e7SBram Moolenaar 176592fdd1e7SBram Moolenaar" Test vim.current 176692fdd1e7SBram Moolenaarfunc Test_python_vim_current() 176792fdd1e7SBram Moolenaar %bw 176892fdd1e7SBram Moolenaar edit Xfile 176992fdd1e7SBram Moolenaar py cb = vim.current.buffer 177092fdd1e7SBram Moolenaar tabnew 0 177192fdd1e7SBram Moolenaar tabnew 1 177292fdd1e7SBram Moolenaar vnew a.1 177392fdd1e7SBram Moolenaar tabnew 2 177492fdd1e7SBram Moolenaar vnew a.2 177592fdd1e7SBram Moolenaar vnew b.2 177692fdd1e7SBram Moolenaar vnew c.2 177792fdd1e7SBram Moolenaar 177892fdd1e7SBram Moolenaar py << trim EOF 177992fdd1e7SBram Moolenaar def H(o): 178092fdd1e7SBram Moolenaar return repr(o) 178192fdd1e7SBram Moolenaar cb.append('Current tab page: ' + repr(vim.current.tabpage)) 178292fdd1e7SBram Moolenaar cb.append('Current window: ' + repr(vim.current.window) + ': ' + \ 178392fdd1e7SBram Moolenaar H(vim.current.window) + ' is ' + H(vim.current.tabpage.window)) 178492fdd1e7SBram Moolenaar cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + \ 178592fdd1e7SBram Moolenaar H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ \ 178692fdd1e7SBram Moolenaar ' is ' + H(vim.current.tabpage.window.buffer)) 178792fdd1e7SBram Moolenaar del H 178892fdd1e7SBram Moolenaar EOF 178992fdd1e7SBram Moolenaar let expected =<< trim END 179092fdd1e7SBram Moolenaar Current tab page: <tabpage 3> 179192fdd1e7SBram Moolenaar Current window: <window 0>: <window 0> is <window 0> 179292fdd1e7SBram Moolenaar Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2> 179392fdd1e7SBram Moolenaar END 179492fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 179592fdd1e7SBram Moolenaar call deletebufline(bufnr('Xfile'), 1, '$') 179692fdd1e7SBram Moolenaar 179792fdd1e7SBram Moolenaar " Assigning: fails 179892fdd1e7SBram Moolenaar py << trim EOF 179992fdd1e7SBram Moolenaar try: 180092fdd1e7SBram Moolenaar vim.current.window = vim.tabpages[0].window 180192fdd1e7SBram Moolenaar except ValueError: 180292fdd1e7SBram Moolenaar cb.append('ValueError at assigning foreign tab window') 180392fdd1e7SBram Moolenaar 180492fdd1e7SBram Moolenaar for attr in ('window', 'tabpage', 'buffer'): 180592fdd1e7SBram Moolenaar try: 180692fdd1e7SBram Moolenaar setattr(vim.current, attr, None) 180792fdd1e7SBram Moolenaar except TypeError: 180892fdd1e7SBram Moolenaar cb.append('Type error at assigning None to vim.current.' + attr) 180992fdd1e7SBram Moolenaar del attr 181092fdd1e7SBram Moolenaar EOF 181192fdd1e7SBram Moolenaar 181292fdd1e7SBram Moolenaar let expected =<< trim END 181392fdd1e7SBram Moolenaar ValueError at assigning foreign tab window 181492fdd1e7SBram Moolenaar Type error at assigning None to vim.current.window 181592fdd1e7SBram Moolenaar Type error at assigning None to vim.current.tabpage 181692fdd1e7SBram Moolenaar Type error at assigning None to vim.current.buffer 181792fdd1e7SBram Moolenaar END 181892fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 181992fdd1e7SBram Moolenaar call deletebufline(bufnr('Xfile'), 1, '$') 182092fdd1e7SBram Moolenaar 182192fdd1e7SBram Moolenaar call setbufline(bufnr('Xfile'), 1, 'python interface') 182292fdd1e7SBram Moolenaar py << trim EOF 182392fdd1e7SBram Moolenaar # Assigning: success 182492fdd1e7SBram Moolenaar vim.current.tabpage = vim.tabpages[-2] 182592fdd1e7SBram Moolenaar vim.current.buffer = cb 182692fdd1e7SBram Moolenaar vim.current.window = vim.windows[0] 182792fdd1e7SBram Moolenaar vim.current.window.cursor = (len(vim.current.buffer), 0) 182892fdd1e7SBram Moolenaar cb.append('Current tab page: ' + repr(vim.current.tabpage)) 182992fdd1e7SBram Moolenaar cb.append('Current window: ' + repr(vim.current.window)) 183092fdd1e7SBram Moolenaar cb.append('Current buffer: ' + repr(vim.current.buffer)) 183192fdd1e7SBram Moolenaar cb.append('Current line: ' + repr(vim.current.line)) 183292fdd1e7SBram Moolenaar EOF 183392fdd1e7SBram Moolenaar 183492fdd1e7SBram Moolenaar let expected =<< trim END 183592fdd1e7SBram Moolenaar Current tab page: <tabpage 2> 183692fdd1e7SBram Moolenaar Current window: <window 0> 183792fdd1e7SBram Moolenaar Current buffer: <buffer Xfile> 183892fdd1e7SBram Moolenaar Current line: 'python interface' 183992fdd1e7SBram Moolenaar END 184092fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 1841ab589463SBram Moolenaar py vim.current.line = 'one line' 1842ab589463SBram Moolenaar call assert_equal('one line', getline('.')) 184392fdd1e7SBram Moolenaar call deletebufline(bufnr('Xfile'), 1, '$') 184492fdd1e7SBram Moolenaar 184592fdd1e7SBram Moolenaar py << trim EOF 184692fdd1e7SBram Moolenaar ws = list(vim.windows) 184792fdd1e7SBram Moolenaar ts = list(vim.tabpages) 184892fdd1e7SBram Moolenaar for b in vim.buffers: 184992fdd1e7SBram Moolenaar if b is not cb: 185092fdd1e7SBram Moolenaar vim.command('bwipeout! ' + str(b.number)) 185192fdd1e7SBram Moolenaar del b 185292fdd1e7SBram Moolenaar cb.append('w.valid: ' + repr([w.valid for w in ws])) 185392fdd1e7SBram Moolenaar cb.append('t.valid: ' + repr([t.valid for t in ts])) 185492fdd1e7SBram Moolenaar del w 185592fdd1e7SBram Moolenaar del t 185692fdd1e7SBram Moolenaar del ts 185792fdd1e7SBram Moolenaar del ws 185892fdd1e7SBram Moolenaar EOF 185992fdd1e7SBram Moolenaar let expected =<< trim END 186092fdd1e7SBram Moolenaar w.valid: [True, False] 186192fdd1e7SBram Moolenaar t.valid: [True, False, True, False] 186292fdd1e7SBram Moolenaar END 186392fdd1e7SBram Moolenaar call assert_equal(expected, getbufline(bufnr('Xfile'), 2, '$')) 186492fdd1e7SBram Moolenaar %bw! 186592fdd1e7SBram Moolenaarendfunc 186692fdd1e7SBram Moolenaar 186792fdd1e7SBram Moolenaar" Test types 186892fdd1e7SBram Moolenaarfunc Test_python_types() 186992fdd1e7SBram Moolenaar %d 187092fdd1e7SBram Moolenaar py cb = vim.current.buffer 187192fdd1e7SBram Moolenaar py << trim EOF 187292fdd1e7SBram Moolenaar for expr, attr in ( 187392fdd1e7SBram Moolenaar ('vim.vars', 'Dictionary'), 187492fdd1e7SBram Moolenaar ('vim.options', 'Options'), 187592fdd1e7SBram Moolenaar ('vim.bindeval("{}")', 'Dictionary'), 187692fdd1e7SBram Moolenaar ('vim.bindeval("[]")', 'List'), 187792fdd1e7SBram Moolenaar ('vim.bindeval("function(\'tr\')")', 'Function'), 187892fdd1e7SBram Moolenaar ('vim.current.buffer', 'Buffer'), 187992fdd1e7SBram Moolenaar ('vim.current.range', 'Range'), 188092fdd1e7SBram Moolenaar ('vim.current.window', 'Window'), 188192fdd1e7SBram Moolenaar ('vim.current.tabpage', 'TabPage'), 188292fdd1e7SBram Moolenaar ): 188392fdd1e7SBram Moolenaar cb.append(expr + ':' + attr + ':' + \ 188492fdd1e7SBram Moolenaar repr(type(eval(expr)) is getattr(vim, attr))) 188592fdd1e7SBram Moolenaar del expr 188692fdd1e7SBram Moolenaar del attr 188792fdd1e7SBram Moolenaar EOF 188892fdd1e7SBram Moolenaar let expected =<< trim END 188992fdd1e7SBram Moolenaar vim.vars:Dictionary:True 189092fdd1e7SBram Moolenaar vim.options:Options:True 189192fdd1e7SBram Moolenaar vim.bindeval("{}"):Dictionary:True 189292fdd1e7SBram Moolenaar vim.bindeval("[]"):List:True 189392fdd1e7SBram Moolenaar vim.bindeval("function('tr')"):Function:True 189492fdd1e7SBram Moolenaar vim.current.buffer:Buffer:True 189592fdd1e7SBram Moolenaar vim.current.range:Range:True 189692fdd1e7SBram Moolenaar vim.current.window:Window:True 189792fdd1e7SBram Moolenaar vim.current.tabpage:TabPage:True 189892fdd1e7SBram Moolenaar END 189992fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 190092fdd1e7SBram Moolenaarendfunc 190192fdd1e7SBram Moolenaar 190292fdd1e7SBram Moolenaar" Test __dir__() method 190392fdd1e7SBram Moolenaarfunc Test_python_dir_method() 190492fdd1e7SBram Moolenaar %d 190592fdd1e7SBram Moolenaar py cb = vim.current.buffer 190692fdd1e7SBram Moolenaar py << trim EOF 190792fdd1e7SBram Moolenaar for name, o in ( 190892fdd1e7SBram Moolenaar ('current', vim.current), 190992fdd1e7SBram Moolenaar ('buffer', vim.current.buffer), 191092fdd1e7SBram Moolenaar ('window', vim.current.window), 191192fdd1e7SBram Moolenaar ('tabpage', vim.current.tabpage), 191292fdd1e7SBram Moolenaar ('range', vim.current.range), 191392fdd1e7SBram Moolenaar ('dictionary', vim.bindeval('{}')), 191492fdd1e7SBram Moolenaar ('list', vim.bindeval('[]')), 191592fdd1e7SBram Moolenaar ('function', vim.bindeval('function("tr")')), 191692fdd1e7SBram Moolenaar ('output', sys.stdout), 191792fdd1e7SBram Moolenaar ): 191892fdd1e7SBram Moolenaar cb.append(name + ':' + ','.join(dir(o))) 191992fdd1e7SBram Moolenaar del name 192092fdd1e7SBram Moolenaar del o 192192fdd1e7SBram Moolenaar EOF 192292fdd1e7SBram Moolenaar let expected =<< trim END 192392fdd1e7SBram Moolenaar current:__dir__,__members__,buffer,line,range,tabpage,window 192492fdd1e7SBram Moolenaar buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars 192592fdd1e7SBram Moolenaar window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars,width 192692fdd1e7SBram Moolenaar tabpage:__dir__,__members__,number,valid,vars,window,windows 192792fdd1e7SBram Moolenaar range:__dir__,__members__,append,end,start 192892fdd1e7SBram Moolenaar dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values 192992fdd1e7SBram Moolenaar list:__dir__,__members__,extend,locked 193092fdd1e7SBram Moolenaar function:__dir__,__members__,args,auto_rebind,self,softspace 193192fdd1e7SBram Moolenaar output:__dir__,__members__,close,closed,flush,isatty,readable,seekable,softspace,writable,write,writelines 193292fdd1e7SBram Moolenaar END 193392fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 193492fdd1e7SBram Moolenaarendfunc 193592fdd1e7SBram Moolenaar 193692fdd1e7SBram Moolenaar" Test vim.*.__new__ 193792fdd1e7SBram Moolenaarfunc Test_python_new() 193892fdd1e7SBram Moolenaar call assert_equal({}, pyeval('vim.Dictionary({})')) 193992fdd1e7SBram Moolenaar call assert_equal({'a': 1}, pyeval('vim.Dictionary(a=1)')) 194092fdd1e7SBram Moolenaar call assert_equal({'a': 1}, pyeval('vim.Dictionary(((''a'', 1),))')) 194192fdd1e7SBram Moolenaar call assert_equal([], pyeval('vim.List()')) 194292fdd1e7SBram Moolenaar call assert_equal(['a', 'b', 'c', '7'], pyeval('vim.List(iter(''abc7''))')) 194392fdd1e7SBram Moolenaar call assert_equal(function('tr'), pyeval('vim.Function(''tr'')')) 194492fdd1e7SBram Moolenaar call assert_equal(function('tr', [123, 3, 4]), 194592fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[123, 3, 4])')) 194692fdd1e7SBram Moolenaar call assert_equal(function('tr'), pyeval('vim.Function(''tr'', args=[])')) 194792fdd1e7SBram Moolenaar call assert_equal(function('tr', {}), 194892fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', self={})')) 194992fdd1e7SBram Moolenaar call assert_equal(function('tr', [123, 3, 4], {}), 195092fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[123, 3, 4], self={})')) 195192fdd1e7SBram Moolenaar call assert_equal(function('tr'), 195292fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', auto_rebind=False)')) 195392fdd1e7SBram Moolenaar call assert_equal(function('tr', [123, 3, 4]), 195492fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[123, 3, 4], auto_rebind=False)')) 195592fdd1e7SBram Moolenaar call assert_equal(function('tr'), 195692fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[], auto_rebind=False)')) 195792fdd1e7SBram Moolenaar call assert_equal(function('tr', {}), 195892fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', self={}, auto_rebind=False)')) 195992fdd1e7SBram Moolenaar call assert_equal(function('tr', [123, 3, 4], {}), 196092fdd1e7SBram Moolenaar \ pyeval('vim.Function(''tr'', args=[123, 3, 4], self={}, auto_rebind=False)')) 196192fdd1e7SBram Moolenaarendfunc 196292fdd1e7SBram Moolenaar 196392fdd1e7SBram Moolenaar" Test vim.Function 196492fdd1e7SBram Moolenaarfunc Test_python_vim_func() 1965ab589463SBram Moolenaar func Args(...) 196692fdd1e7SBram Moolenaar return a:000 1967ab589463SBram Moolenaar endfunc 196892fdd1e7SBram Moolenaar 1969ab589463SBram Moolenaar func SelfArgs(...) dict 197092fdd1e7SBram Moolenaar return [a:000, self] 1971ab589463SBram Moolenaar endfunc 197292fdd1e7SBram Moolenaar 197392fdd1e7SBram Moolenaar " The following four lines should not crash 197492fdd1e7SBram Moolenaar let Pt = function('tr', [[]], {'l': []}) 197592fdd1e7SBram Moolenaar py Pt = vim.bindeval('Pt') 197692fdd1e7SBram Moolenaar unlet Pt 197792fdd1e7SBram Moolenaar py del Pt 197892fdd1e7SBram Moolenaar 1979ab589463SBram Moolenaar call assert_equal(3, pyeval('vim.strwidth("a\tb")')) 1980ab589463SBram Moolenaar 198192fdd1e7SBram Moolenaar %bw! 198292fdd1e7SBram Moolenaar py cb = vim.current.buffer 198392fdd1e7SBram Moolenaar py << trim EOF 198492fdd1e7SBram Moolenaar def ecall(out_prefix, func, *args, **kwargs): 198592fdd1e7SBram Moolenaar line = out_prefix + ': ' 198692fdd1e7SBram Moolenaar try: 198792fdd1e7SBram Moolenaar ret = func(*args, **kwargs) 198892fdd1e7SBram Moolenaar except Exception: 198992fdd1e7SBram Moolenaar line += '!exception: ' + emsg(sys.exc_info()) 199092fdd1e7SBram Moolenaar else: 199192fdd1e7SBram Moolenaar line += '!result: ' + vim.Function('string')(ret) 199292fdd1e7SBram Moolenaar cb.append(line) 199392fdd1e7SBram Moolenaar a = vim.Function('Args') 199492fdd1e7SBram Moolenaar pa1 = vim.Function('Args', args=['abcArgsPA1']) 199592fdd1e7SBram Moolenaar pa2 = vim.Function('Args', args=[]) 199692fdd1e7SBram Moolenaar pa3 = vim.Function('Args', args=['abcArgsPA3'], self={'abcSelfPA3': 'abcSelfPA3Val'}) 199792fdd1e7SBram Moolenaar pa4 = vim.Function('Args', self={'abcSelfPA4': 'abcSelfPA4Val'}) 199892fdd1e7SBram Moolenaar cb.append('a: ' + repr(a)) 199992fdd1e7SBram Moolenaar cb.append('pa1: ' + repr(pa1)) 200092fdd1e7SBram Moolenaar cb.append('pa2: ' + repr(pa2)) 200192fdd1e7SBram Moolenaar cb.append('pa3: ' + repr(pa3)) 200292fdd1e7SBram Moolenaar cb.append('pa4: ' + repr(pa4)) 200392fdd1e7SBram Moolenaar sa = vim.Function('SelfArgs') 200492fdd1e7SBram Moolenaar psa1 = vim.Function('SelfArgs', args=['abcArgsPSA1']) 200592fdd1e7SBram Moolenaar psa2 = vim.Function('SelfArgs', args=[]) 200692fdd1e7SBram Moolenaar psa3 = vim.Function('SelfArgs', args=['abcArgsPSA3'], self={'abcSelfPSA3': 'abcSelfPSA3Val'}) 200792fdd1e7SBram Moolenaar psa4 = vim.Function('SelfArgs', self={'abcSelfPSA4': 'abcSelfPSA4Val'}) 200892fdd1e7SBram Moolenaar psa5 = vim.Function('SelfArgs', self={'abcSelfPSA5': 'abcSelfPSA5Val'}, auto_rebind=0) 200992fdd1e7SBram Moolenaar psa6 = vim.Function('SelfArgs', args=['abcArgsPSA6'], self={'abcSelfPSA6': 'abcSelfPSA6Val'}, auto_rebind=()) 201092fdd1e7SBram Moolenaar psa7 = vim.Function('SelfArgs', args=['abcArgsPSA7'], auto_rebind=[]) 201192fdd1e7SBram Moolenaar psa8 = vim.Function('SelfArgs', auto_rebind=False) 201292fdd1e7SBram Moolenaar psa9 = vim.Function('SelfArgs', self={'abcSelfPSA9': 'abcSelfPSA9Val'}, auto_rebind=True) 201392fdd1e7SBram Moolenaar psaA = vim.Function('SelfArgs', args=['abcArgsPSAA'], self={'abcSelfPSAA': 'abcSelfPSAAVal'}, auto_rebind=1) 201492fdd1e7SBram Moolenaar psaB = vim.Function('SelfArgs', args=['abcArgsPSAB'], auto_rebind={'abcARPSAB': 'abcARPSABVal'}) 201592fdd1e7SBram Moolenaar psaC = vim.Function('SelfArgs', auto_rebind=['abcARPSAC']) 201692fdd1e7SBram Moolenaar cb.append('sa: ' + repr(sa)) 201792fdd1e7SBram Moolenaar cb.append('psa1: ' + repr(psa1)) 201892fdd1e7SBram Moolenaar cb.append('psa2: ' + repr(psa2)) 201992fdd1e7SBram Moolenaar cb.append('psa3: ' + repr(psa3)) 202092fdd1e7SBram Moolenaar cb.append('psa4: ' + repr(psa4)) 202192fdd1e7SBram Moolenaar cb.append('psa5: ' + repr(psa5)) 202292fdd1e7SBram Moolenaar cb.append('psa6: ' + repr(psa6)) 202392fdd1e7SBram Moolenaar cb.append('psa7: ' + repr(psa7)) 202492fdd1e7SBram Moolenaar cb.append('psa8: ' + repr(psa8)) 202592fdd1e7SBram Moolenaar cb.append('psa9: ' + repr(psa9)) 202692fdd1e7SBram Moolenaar cb.append('psaA: ' + repr(psaA)) 202792fdd1e7SBram Moolenaar cb.append('psaB: ' + repr(psaB)) 202892fdd1e7SBram Moolenaar cb.append('psaC: ' + repr(psaC)) 202992fdd1e7SBram Moolenaar 203092fdd1e7SBram Moolenaar psar = vim.Function('SelfArgs', args=[{'abcArgsPSAr': 'abcArgsPSArVal'}], self={'abcSelfPSAr': 'abcSelfPSArVal'}) 203192fdd1e7SBram Moolenaar psar.args[0]['abcArgsPSAr2'] = [psar.self, psar.args[0]] 203292fdd1e7SBram Moolenaar psar.self['rec'] = psar 203392fdd1e7SBram Moolenaar psar.self['self'] = psar.self 203492fdd1e7SBram Moolenaar psar.self['args'] = psar.args 203592fdd1e7SBram Moolenaar 203692fdd1e7SBram Moolenaar try: 203792fdd1e7SBram Moolenaar cb.append('psar: ' + repr(psar)) 203892fdd1e7SBram Moolenaar except Exception: 203992fdd1e7SBram Moolenaar cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info())) 204092fdd1e7SBram Moolenaar EOF 204192fdd1e7SBram Moolenaar 204292fdd1e7SBram Moolenaar let expected =<< trim END 204392fdd1e7SBram Moolenaar a: <vim.Function 'Args'> 204492fdd1e7SBram Moolenaar pa1: <vim.Function 'Args', args=['abcArgsPA1']> 204592fdd1e7SBram Moolenaar pa2: <vim.Function 'Args'> 204692fdd1e7SBram Moolenaar pa3: <vim.Function 'Args', args=['abcArgsPA3'], self={'abcSelfPA3': 'abcSelfPA3Val'}> 204792fdd1e7SBram Moolenaar pa4: <vim.Function 'Args', self={'abcSelfPA4': 'abcSelfPA4Val'}> 204892fdd1e7SBram Moolenaar sa: <vim.Function 'SelfArgs'> 204992fdd1e7SBram Moolenaar psa1: <vim.Function 'SelfArgs', args=['abcArgsPSA1']> 205092fdd1e7SBram Moolenaar psa2: <vim.Function 'SelfArgs'> 205192fdd1e7SBram Moolenaar psa3: <vim.Function 'SelfArgs', args=['abcArgsPSA3'], self={'abcSelfPSA3': 'abcSelfPSA3Val'}> 205292fdd1e7SBram Moolenaar psa4: <vim.Function 'SelfArgs', self={'abcSelfPSA4': 'abcSelfPSA4Val'}> 205392fdd1e7SBram Moolenaar psa5: <vim.Function 'SelfArgs', self={'abcSelfPSA5': 'abcSelfPSA5Val'}> 205492fdd1e7SBram Moolenaar psa6: <vim.Function 'SelfArgs', args=['abcArgsPSA6'], self={'abcSelfPSA6': 'abcSelfPSA6Val'}> 205592fdd1e7SBram Moolenaar psa7: <vim.Function 'SelfArgs', args=['abcArgsPSA7']> 205692fdd1e7SBram Moolenaar psa8: <vim.Function 'SelfArgs'> 205792fdd1e7SBram Moolenaar psa9: <vim.Function 'SelfArgs', self={'abcSelfPSA9': 'abcSelfPSA9Val'}, auto_rebind=True> 205892fdd1e7SBram Moolenaar psaA: <vim.Function 'SelfArgs', args=['abcArgsPSAA'], self={'abcSelfPSAA': 'abcSelfPSAAVal'}, auto_rebind=True> 205992fdd1e7SBram Moolenaar psaB: <vim.Function 'SelfArgs', args=['abcArgsPSAB']> 206092fdd1e7SBram Moolenaar psaC: <vim.Function 'SelfArgs'> 206192fdd1e7SBram 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'}]}> 206292fdd1e7SBram Moolenaar END 206392fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 206492fdd1e7SBram Moolenaar %d 206592fdd1e7SBram Moolenaar 206692fdd1e7SBram Moolenaar call assert_equal(function('Args'), pyeval('a')) 206792fdd1e7SBram Moolenaar call assert_equal(function('Args', ['abcArgsPA1']), pyeval('pa1')) 206892fdd1e7SBram Moolenaar call assert_equal(function('Args'), pyeval('pa2')) 206992fdd1e7SBram Moolenaar call assert_equal(function('Args', ['abcArgsPA3'], {'abcSelfPA3': 'abcSelfPA3Val'}), pyeval('pa3')) 207092fdd1e7SBram Moolenaar call assert_equal(function('Args', {'abcSelfPA4': 'abcSelfPA4Val'}), pyeval('pa4')) 207192fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs'), pyeval('sa')) 207292fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSA1']), pyeval('psa1')) 207392fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs'), pyeval('psa2')) 207492fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}), pyeval('psa3')) 207592fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', {'abcSelfPSA4': 'abcSelfPSA4Val'}), pyeval('psa4')) 207692fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', {'abcSelfPSA5': 'abcSelfPSA5Val'}), pyeval('psa5')) 207792fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'}), pyeval('psa6')) 207892fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSA7']), pyeval('psa7')) 207992fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs'), pyeval('psa8')) 208092fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'}), pyeval('psa9')) 208192fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'}), pyeval('psaA')) 208292fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs', ['abcArgsPSAB']), pyeval('psaB')) 208392fdd1e7SBram Moolenaar call assert_equal(function('SelfArgs'), pyeval('psaC')) 208492fdd1e7SBram Moolenaar 208592fdd1e7SBram Moolenaar let res = [] 208692fdd1e7SBram Moolenaar for v in ['sa', 'psa1', 'psa2', 'psa3', 'psa4', 'psa5', 'psa6', 'psa7', 208792fdd1e7SBram Moolenaar \ 'psa8', 'psa9', 'psaA', 'psaB', 'psaC'] 208892fdd1e7SBram Moolenaar let d = {'f': pyeval(v)} 208992fdd1e7SBram Moolenaar call add(res, 'd.' .. v .. '(): ' .. string(d.f())) 209092fdd1e7SBram Moolenaar endfor 209192fdd1e7SBram Moolenaar 209292fdd1e7SBram Moolenaar let expected =<< trim END 209392fdd1e7SBram Moolenaar d.sa(): [[], {'f': function('SelfArgs')}] 209492fdd1e7SBram Moolenaar d.psa1(): [['abcArgsPSA1'], {'f': function('SelfArgs', ['abcArgsPSA1'])}] 209592fdd1e7SBram Moolenaar d.psa2(): [[], {'f': function('SelfArgs')}] 209692fdd1e7SBram Moolenaar d.psa3(): [['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}] 209792fdd1e7SBram Moolenaar d.psa4(): [[], {'abcSelfPSA4': 'abcSelfPSA4Val'}] 209892fdd1e7SBram Moolenaar d.psa5(): [[], {'abcSelfPSA5': 'abcSelfPSA5Val'}] 209992fdd1e7SBram Moolenaar d.psa6(): [['abcArgsPSA6'], {'abcSelfPSA6': 'abcSelfPSA6Val'}] 210092fdd1e7SBram Moolenaar d.psa7(): [['abcArgsPSA7'], {'f': function('SelfArgs', ['abcArgsPSA7'])}] 210192fdd1e7SBram Moolenaar d.psa8(): [[], {'f': function('SelfArgs')}] 210292fdd1e7SBram Moolenaar d.psa9(): [[], {'f': function('SelfArgs', {'abcSelfPSA9': 'abcSelfPSA9Val'})}] 210392fdd1e7SBram Moolenaar d.psaA(): [['abcArgsPSAA'], {'f': function('SelfArgs', ['abcArgsPSAA'], {'abcSelfPSAA': 'abcSelfPSAAVal'})}] 210492fdd1e7SBram Moolenaar d.psaB(): [['abcArgsPSAB'], {'f': function('SelfArgs', ['abcArgsPSAB'])}] 210592fdd1e7SBram Moolenaar d.psaC(): [[], {'f': function('SelfArgs')}] 210692fdd1e7SBram Moolenaar END 210792fdd1e7SBram Moolenaar call assert_equal(expected, res) 210892fdd1e7SBram Moolenaar 210992fdd1e7SBram Moolenaar py ecall('a()', a, ) 211092fdd1e7SBram Moolenaar py ecall('pa1()', pa1, ) 211192fdd1e7SBram Moolenaar py ecall('pa2()', pa2, ) 211292fdd1e7SBram Moolenaar py ecall('pa3()', pa3, ) 211392fdd1e7SBram Moolenaar py ecall('pa4()', pa4, ) 211492fdd1e7SBram Moolenaar py ecall('sa()', sa, ) 211592fdd1e7SBram Moolenaar py ecall('psa1()', psa1, ) 211692fdd1e7SBram Moolenaar py ecall('psa2()', psa2, ) 211792fdd1e7SBram Moolenaar py ecall('psa3()', psa3, ) 211892fdd1e7SBram Moolenaar py ecall('psa4()', psa4, ) 211992fdd1e7SBram Moolenaar 212092fdd1e7SBram Moolenaar py ecall('a(42, 43)', a, 42, 43) 212192fdd1e7SBram Moolenaar py ecall('pa1(42, 43)', pa1, 42, 43) 212292fdd1e7SBram Moolenaar py ecall('pa2(42, 43)', pa2, 42, 43) 212392fdd1e7SBram Moolenaar py ecall('pa3(42, 43)', pa3, 42, 43) 212492fdd1e7SBram Moolenaar py ecall('pa4(42, 43)', pa4, 42, 43) 212592fdd1e7SBram Moolenaar py ecall('sa(42, 43)', sa, 42, 43) 212692fdd1e7SBram Moolenaar py ecall('psa1(42, 43)', psa1, 42, 43) 212792fdd1e7SBram Moolenaar py ecall('psa2(42, 43)', psa2, 42, 43) 212892fdd1e7SBram Moolenaar py ecall('psa3(42, 43)', psa3, 42, 43) 212992fdd1e7SBram Moolenaar py ecall('psa4(42, 43)', psa4, 42, 43) 213092fdd1e7SBram Moolenaar 213192fdd1e7SBram Moolenaar py ecall('a(42, self={"20": 1})', a, 42, self={'20': 1}) 213292fdd1e7SBram Moolenaar py ecall('pa1(42, self={"20": 1})', pa1, 42, self={'20': 1}) 213392fdd1e7SBram Moolenaar py ecall('pa2(42, self={"20": 1})', pa2, 42, self={'20': 1}) 213492fdd1e7SBram Moolenaar py ecall('pa3(42, self={"20": 1})', pa3, 42, self={'20': 1}) 213592fdd1e7SBram Moolenaar py ecall('pa4(42, self={"20": 1})', pa4, 42, self={'20': 1}) 213692fdd1e7SBram Moolenaar py ecall('sa(42, self={"20": 1})', sa, 42, self={'20': 1}) 213792fdd1e7SBram Moolenaar py ecall('psa1(42, self={"20": 1})', psa1, 42, self={'20': 1}) 213892fdd1e7SBram Moolenaar py ecall('psa2(42, self={"20": 1})', psa2, 42, self={'20': 1}) 213992fdd1e7SBram Moolenaar py ecall('psa3(42, self={"20": 1})', psa3, 42, self={'20': 1}) 214092fdd1e7SBram Moolenaar py ecall('psa4(42, self={"20": 1})', psa4, 42, self={'20': 1}) 214192fdd1e7SBram Moolenaar 214292fdd1e7SBram Moolenaar py ecall('a(self={"20": 1})', a, self={'20': 1}) 214392fdd1e7SBram Moolenaar py ecall('pa1(self={"20": 1})', pa1, self={'20': 1}) 214492fdd1e7SBram Moolenaar py ecall('pa2(self={"20": 1})', pa2, self={'20': 1}) 214592fdd1e7SBram Moolenaar py ecall('pa3(self={"20": 1})', pa3, self={'20': 1}) 214692fdd1e7SBram Moolenaar py ecall('pa4(self={"20": 1})', pa4, self={'20': 1}) 214792fdd1e7SBram Moolenaar py ecall('sa(self={"20": 1})', sa, self={'20': 1}) 214892fdd1e7SBram Moolenaar py ecall('psa1(self={"20": 1})', psa1, self={'20': 1}) 214992fdd1e7SBram Moolenaar py ecall('psa2(self={"20": 1})', psa2, self={'20': 1}) 215092fdd1e7SBram Moolenaar py ecall('psa3(self={"20": 1})', psa3, self={'20': 1}) 215192fdd1e7SBram Moolenaar py ecall('psa4(self={"20": 1})', psa4, self={'20': 1}) 215292fdd1e7SBram Moolenaar 215392fdd1e7SBram Moolenaar py << trim EOF 215492fdd1e7SBram Moolenaar def s(v): 215592fdd1e7SBram Moolenaar if v is None: 215692fdd1e7SBram Moolenaar return repr(v) 215792fdd1e7SBram Moolenaar else: 215892fdd1e7SBram Moolenaar return vim.Function('string')(v) 215992fdd1e7SBram Moolenaar 216092fdd1e7SBram Moolenaar cb.append('a.args: ' + s(a.args)) 216192fdd1e7SBram Moolenaar cb.append('pa1.args: ' + s(pa1.args)) 216292fdd1e7SBram Moolenaar cb.append('pa2.args: ' + s(pa2.args)) 216392fdd1e7SBram Moolenaar cb.append('pa3.args: ' + s(pa3.args)) 216492fdd1e7SBram Moolenaar cb.append('pa4.args: ' + s(pa4.args)) 216592fdd1e7SBram Moolenaar cb.append('sa.args: ' + s(sa.args)) 216692fdd1e7SBram Moolenaar cb.append('psa1.args: ' + s(psa1.args)) 216792fdd1e7SBram Moolenaar cb.append('psa2.args: ' + s(psa2.args)) 216892fdd1e7SBram Moolenaar cb.append('psa3.args: ' + s(psa3.args)) 216992fdd1e7SBram Moolenaar cb.append('psa4.args: ' + s(psa4.args)) 217092fdd1e7SBram Moolenaar 217192fdd1e7SBram Moolenaar cb.append('a.self: ' + s(a.self)) 217292fdd1e7SBram Moolenaar cb.append('pa1.self: ' + s(pa1.self)) 217392fdd1e7SBram Moolenaar cb.append('pa2.self: ' + s(pa2.self)) 217492fdd1e7SBram Moolenaar cb.append('pa3.self: ' + s(pa3.self)) 217592fdd1e7SBram Moolenaar cb.append('pa4.self: ' + s(pa4.self)) 217692fdd1e7SBram Moolenaar cb.append('sa.self: ' + s(sa.self)) 217792fdd1e7SBram Moolenaar cb.append('psa1.self: ' + s(psa1.self)) 217892fdd1e7SBram Moolenaar cb.append('psa2.self: ' + s(psa2.self)) 217992fdd1e7SBram Moolenaar cb.append('psa3.self: ' + s(psa3.self)) 218092fdd1e7SBram Moolenaar cb.append('psa4.self: ' + s(psa4.self)) 218192fdd1e7SBram Moolenaar 218292fdd1e7SBram Moolenaar cb.append('a.name: ' + s(a.name)) 218392fdd1e7SBram Moolenaar cb.append('pa1.name: ' + s(pa1.name)) 218492fdd1e7SBram Moolenaar cb.append('pa2.name: ' + s(pa2.name)) 218592fdd1e7SBram Moolenaar cb.append('pa3.name: ' + s(pa3.name)) 218692fdd1e7SBram Moolenaar cb.append('pa4.name: ' + s(pa4.name)) 218792fdd1e7SBram Moolenaar cb.append('sa.name: ' + s(sa.name)) 218892fdd1e7SBram Moolenaar cb.append('psa1.name: ' + s(psa1.name)) 218992fdd1e7SBram Moolenaar cb.append('psa2.name: ' + s(psa2.name)) 219092fdd1e7SBram Moolenaar cb.append('psa3.name: ' + s(psa3.name)) 219192fdd1e7SBram Moolenaar cb.append('psa4.name: ' + s(psa4.name)) 219292fdd1e7SBram Moolenaar 219392fdd1e7SBram Moolenaar cb.append('a.auto_rebind: ' + s(a.auto_rebind)) 219492fdd1e7SBram Moolenaar cb.append('pa1.auto_rebind: ' + s(pa1.auto_rebind)) 219592fdd1e7SBram Moolenaar cb.append('pa2.auto_rebind: ' + s(pa2.auto_rebind)) 219692fdd1e7SBram Moolenaar cb.append('pa3.auto_rebind: ' + s(pa3.auto_rebind)) 219792fdd1e7SBram Moolenaar cb.append('pa4.auto_rebind: ' + s(pa4.auto_rebind)) 219892fdd1e7SBram Moolenaar cb.append('sa.auto_rebind: ' + s(sa.auto_rebind)) 219992fdd1e7SBram Moolenaar cb.append('psa1.auto_rebind: ' + s(psa1.auto_rebind)) 220092fdd1e7SBram Moolenaar cb.append('psa2.auto_rebind: ' + s(psa2.auto_rebind)) 220192fdd1e7SBram Moolenaar cb.append('psa3.auto_rebind: ' + s(psa3.auto_rebind)) 220292fdd1e7SBram Moolenaar cb.append('psa4.auto_rebind: ' + s(psa4.auto_rebind)) 220392fdd1e7SBram Moolenaar cb.append('psa5.auto_rebind: ' + s(psa5.auto_rebind)) 220492fdd1e7SBram Moolenaar cb.append('psa6.auto_rebind: ' + s(psa6.auto_rebind)) 220592fdd1e7SBram Moolenaar cb.append('psa7.auto_rebind: ' + s(psa7.auto_rebind)) 220692fdd1e7SBram Moolenaar cb.append('psa8.auto_rebind: ' + s(psa8.auto_rebind)) 220792fdd1e7SBram Moolenaar cb.append('psa9.auto_rebind: ' + s(psa9.auto_rebind)) 220892fdd1e7SBram Moolenaar cb.append('psaA.auto_rebind: ' + s(psaA.auto_rebind)) 220992fdd1e7SBram Moolenaar cb.append('psaB.auto_rebind: ' + s(psaB.auto_rebind)) 221092fdd1e7SBram Moolenaar cb.append('psaC.auto_rebind: ' + s(psaC.auto_rebind)) 221192fdd1e7SBram Moolenaar 221292fdd1e7SBram Moolenaar del s 221392fdd1e7SBram Moolenaar 221492fdd1e7SBram Moolenaar del a 221592fdd1e7SBram Moolenaar del pa1 221692fdd1e7SBram Moolenaar del pa2 221792fdd1e7SBram Moolenaar del pa3 221892fdd1e7SBram Moolenaar del pa4 221992fdd1e7SBram Moolenaar del sa 222092fdd1e7SBram Moolenaar del psa1 222192fdd1e7SBram Moolenaar del psa2 222292fdd1e7SBram Moolenaar del psa3 222392fdd1e7SBram Moolenaar del psa4 222492fdd1e7SBram Moolenaar del psa5 222592fdd1e7SBram Moolenaar del psa6 222692fdd1e7SBram Moolenaar del psa7 222792fdd1e7SBram Moolenaar del psa8 222892fdd1e7SBram Moolenaar del psa9 222992fdd1e7SBram Moolenaar del psaA 223092fdd1e7SBram Moolenaar del psaB 223192fdd1e7SBram Moolenaar del psaC 223292fdd1e7SBram Moolenaar del psar 223392fdd1e7SBram Moolenaar 223492fdd1e7SBram Moolenaar del ecall 223592fdd1e7SBram Moolenaar EOF 223692fdd1e7SBram Moolenaar 223792fdd1e7SBram Moolenaar let expected =<< trim END 223892fdd1e7SBram Moolenaar a(): !result: [] 223992fdd1e7SBram Moolenaar pa1(): !result: ['abcArgsPA1'] 224092fdd1e7SBram Moolenaar pa2(): !result: [] 224192fdd1e7SBram Moolenaar pa3(): !result: ['abcArgsPA3'] 224292fdd1e7SBram Moolenaar pa4(): !result: [] 224392fdd1e7SBram Moolenaar sa(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 224492fdd1e7SBram Moolenaar psa1(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 224592fdd1e7SBram Moolenaar psa2(): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 224692fdd1e7SBram Moolenaar psa3(): !result: [['abcArgsPSA3'], {'abcSelfPSA3': 'abcSelfPSA3Val'}] 224792fdd1e7SBram Moolenaar psa4(): !result: [[], {'abcSelfPSA4': 'abcSelfPSA4Val'}] 224892fdd1e7SBram Moolenaar a(42, 43): !result: [42, 43] 224992fdd1e7SBram Moolenaar pa1(42, 43): !result: ['abcArgsPA1', 42, 43] 225092fdd1e7SBram Moolenaar pa2(42, 43): !result: [42, 43] 225192fdd1e7SBram Moolenaar pa3(42, 43): !result: ['abcArgsPA3', 42, 43] 225292fdd1e7SBram Moolenaar pa4(42, 43): !result: [42, 43] 225392fdd1e7SBram Moolenaar sa(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 225492fdd1e7SBram Moolenaar psa1(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 225592fdd1e7SBram Moolenaar psa2(42, 43): !exception: error:('Vim:E725: Calling dict function without Dictionary: SelfArgs',) 225692fdd1e7SBram Moolenaar psa3(42, 43): !result: [['abcArgsPSA3', 42, 43], {'abcSelfPSA3': 'abcSelfPSA3Val'}] 225792fdd1e7SBram Moolenaar psa4(42, 43): !result: [[42, 43], {'abcSelfPSA4': 'abcSelfPSA4Val'}] 225892fdd1e7SBram Moolenaar a(42, self={"20": 1}): !result: [42] 225992fdd1e7SBram Moolenaar pa1(42, self={"20": 1}): !result: ['abcArgsPA1', 42] 226092fdd1e7SBram Moolenaar pa2(42, self={"20": 1}): !result: [42] 226192fdd1e7SBram Moolenaar pa3(42, self={"20": 1}): !result: ['abcArgsPA3', 42] 226292fdd1e7SBram Moolenaar pa4(42, self={"20": 1}): !result: [42] 226392fdd1e7SBram Moolenaar sa(42, self={"20": 1}): !result: [[42], {'20': 1}] 226492fdd1e7SBram Moolenaar psa1(42, self={"20": 1}): !result: [['abcArgsPSA1', 42], {'20': 1}] 226592fdd1e7SBram Moolenaar psa2(42, self={"20": 1}): !result: [[42], {'20': 1}] 226692fdd1e7SBram Moolenaar psa3(42, self={"20": 1}): !result: [['abcArgsPSA3', 42], {'20': 1}] 226792fdd1e7SBram Moolenaar psa4(42, self={"20": 1}): !result: [[42], {'20': 1}] 226892fdd1e7SBram Moolenaar a(self={"20": 1}): !result: [] 226992fdd1e7SBram Moolenaar pa1(self={"20": 1}): !result: ['abcArgsPA1'] 227092fdd1e7SBram Moolenaar pa2(self={"20": 1}): !result: [] 227192fdd1e7SBram Moolenaar pa3(self={"20": 1}): !result: ['abcArgsPA3'] 227292fdd1e7SBram Moolenaar pa4(self={"20": 1}): !result: [] 227392fdd1e7SBram Moolenaar sa(self={"20": 1}): !result: [[], {'20': 1}] 227492fdd1e7SBram Moolenaar psa1(self={"20": 1}): !result: [['abcArgsPSA1'], {'20': 1}] 227592fdd1e7SBram Moolenaar psa2(self={"20": 1}): !result: [[], {'20': 1}] 227692fdd1e7SBram Moolenaar psa3(self={"20": 1}): !result: [['abcArgsPSA3'], {'20': 1}] 227792fdd1e7SBram Moolenaar psa4(self={"20": 1}): !result: [[], {'20': 1}] 227892fdd1e7SBram Moolenaar a.args: None 227992fdd1e7SBram Moolenaar pa1.args: ['abcArgsPA1'] 228092fdd1e7SBram Moolenaar pa2.args: None 228192fdd1e7SBram Moolenaar pa3.args: ['abcArgsPA3'] 228292fdd1e7SBram Moolenaar pa4.args: None 228392fdd1e7SBram Moolenaar sa.args: None 228492fdd1e7SBram Moolenaar psa1.args: ['abcArgsPSA1'] 228592fdd1e7SBram Moolenaar psa2.args: None 228692fdd1e7SBram Moolenaar psa3.args: ['abcArgsPSA3'] 228792fdd1e7SBram Moolenaar psa4.args: None 228892fdd1e7SBram Moolenaar a.self: None 228992fdd1e7SBram Moolenaar pa1.self: None 229092fdd1e7SBram Moolenaar pa2.self: None 229192fdd1e7SBram Moolenaar pa3.self: {'abcSelfPA3': 'abcSelfPA3Val'} 229292fdd1e7SBram Moolenaar pa4.self: {'abcSelfPA4': 'abcSelfPA4Val'} 229392fdd1e7SBram Moolenaar sa.self: None 229492fdd1e7SBram Moolenaar psa1.self: None 229592fdd1e7SBram Moolenaar psa2.self: None 229692fdd1e7SBram Moolenaar psa3.self: {'abcSelfPSA3': 'abcSelfPSA3Val'} 229792fdd1e7SBram Moolenaar psa4.self: {'abcSelfPSA4': 'abcSelfPSA4Val'} 229892fdd1e7SBram Moolenaar a.name: 'Args' 229992fdd1e7SBram Moolenaar pa1.name: 'Args' 230092fdd1e7SBram Moolenaar pa2.name: 'Args' 230192fdd1e7SBram Moolenaar pa3.name: 'Args' 230292fdd1e7SBram Moolenaar pa4.name: 'Args' 230392fdd1e7SBram Moolenaar sa.name: 'SelfArgs' 230492fdd1e7SBram Moolenaar psa1.name: 'SelfArgs' 230592fdd1e7SBram Moolenaar psa2.name: 'SelfArgs' 230692fdd1e7SBram Moolenaar psa3.name: 'SelfArgs' 230792fdd1e7SBram Moolenaar psa4.name: 'SelfArgs' 230892fdd1e7SBram Moolenaar a.auto_rebind: 1 230992fdd1e7SBram Moolenaar pa1.auto_rebind: 1 231092fdd1e7SBram Moolenaar pa2.auto_rebind: 1 231192fdd1e7SBram Moolenaar pa3.auto_rebind: 0 231292fdd1e7SBram Moolenaar pa4.auto_rebind: 0 231392fdd1e7SBram Moolenaar sa.auto_rebind: 1 231492fdd1e7SBram Moolenaar psa1.auto_rebind: 1 231592fdd1e7SBram Moolenaar psa2.auto_rebind: 1 231692fdd1e7SBram Moolenaar psa3.auto_rebind: 0 231792fdd1e7SBram Moolenaar psa4.auto_rebind: 0 231892fdd1e7SBram Moolenaar psa5.auto_rebind: 0 231992fdd1e7SBram Moolenaar psa6.auto_rebind: 0 232092fdd1e7SBram Moolenaar psa7.auto_rebind: 1 232192fdd1e7SBram Moolenaar psa8.auto_rebind: 1 232292fdd1e7SBram Moolenaar psa9.auto_rebind: 1 232392fdd1e7SBram Moolenaar psaA.auto_rebind: 1 232492fdd1e7SBram Moolenaar psaB.auto_rebind: 1 232592fdd1e7SBram Moolenaar psaC.auto_rebind: 1 232692fdd1e7SBram Moolenaar END 232792fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 232892fdd1e7SBram Moolenaar %bw! 232992fdd1e7SBram Moolenaarendfunc 233092fdd1e7SBram Moolenaar 233192fdd1e7SBram Moolenaar" Test stdout/stderr 233292fdd1e7SBram Moolenaarfunc Test_python_stdin_stderr() 233392fdd1e7SBram Moolenaar let caught_writeerr = 0 233492fdd1e7SBram Moolenaar let caught_writelineerr = 0 233592fdd1e7SBram Moolenaar redir => messages 233692fdd1e7SBram Moolenaar py sys.stdout.write('abc8') ; sys.stdout.write('def') 233792fdd1e7SBram Moolenaar try 233892fdd1e7SBram Moolenaar py sys.stderr.write('abc9') ; sys.stderr.write('def') 233992fdd1e7SBram Moolenaar catch /abc9def/ 234092fdd1e7SBram Moolenaar let caught_writeerr = 1 234192fdd1e7SBram Moolenaar endtry 234292fdd1e7SBram Moolenaar py sys.stdout.writelines(iter('abcA')) 234392fdd1e7SBram Moolenaar try 234492fdd1e7SBram Moolenaar py sys.stderr.writelines(iter('abcB')) 234592fdd1e7SBram Moolenaar catch /abcB/ 234692fdd1e7SBram Moolenaar let caught_writelineerr = 1 234792fdd1e7SBram Moolenaar endtry 234892fdd1e7SBram Moolenaar redir END 234992fdd1e7SBram Moolenaar call assert_equal("\nabc8def\nabcA", messages) 235092fdd1e7SBram Moolenaar call assert_equal(1, caught_writeerr) 235192fdd1e7SBram Moolenaar call assert_equal(1, caught_writelineerr) 235292fdd1e7SBram Moolenaarendfunc 235392fdd1e7SBram Moolenaar 235492fdd1e7SBram Moolenaar" Test subclassing 235592fdd1e7SBram Moolenaarfunc Test_python_subclass() 235692fdd1e7SBram Moolenaar new 2357ab589463SBram Moolenaar func Put(...) 235892fdd1e7SBram Moolenaar return a:000 2359ab589463SBram Moolenaar endfunc 236092fdd1e7SBram Moolenaar 236192fdd1e7SBram Moolenaar py << trim EOF 236292fdd1e7SBram Moolenaar class DupDict(vim.Dictionary): 236392fdd1e7SBram Moolenaar def __setitem__(self, key, value): 236492fdd1e7SBram Moolenaar super(DupDict, self).__setitem__(key, value) 236592fdd1e7SBram Moolenaar super(DupDict, self).__setitem__('dup_' + key, value) 236692fdd1e7SBram Moolenaar dd = DupDict() 236792fdd1e7SBram Moolenaar dd['a'] = 'b' 236892fdd1e7SBram Moolenaar 236992fdd1e7SBram Moolenaar class DupList(vim.List): 237092fdd1e7SBram Moolenaar def __getitem__(self, idx): 237192fdd1e7SBram Moolenaar return [super(DupList, self).__getitem__(idx)] * 2 237292fdd1e7SBram Moolenaar 237392fdd1e7SBram Moolenaar dl = DupList() 237492fdd1e7SBram Moolenaar dl2 = DupList(iter('abcC')) 237592fdd1e7SBram Moolenaar dl.extend(dl2[0]) 237692fdd1e7SBram Moolenaar 237792fdd1e7SBram Moolenaar class DupFun(vim.Function): 237892fdd1e7SBram Moolenaar def __call__(self, arg): 237992fdd1e7SBram Moolenaar return super(DupFun, self).__call__(arg, arg) 238092fdd1e7SBram Moolenaar 238192fdd1e7SBram Moolenaar df = DupFun('Put') 238292fdd1e7SBram Moolenaar EOF 238392fdd1e7SBram Moolenaar 238492fdd1e7SBram Moolenaar call assert_equal(['a', 'dup_a'], sort(keys(pyeval('dd')))) 238592fdd1e7SBram Moolenaar call assert_equal(['a', 'a'], pyeval('dl')) 238692fdd1e7SBram Moolenaar call assert_equal(['a', 'b', 'c', 'C'], pyeval('dl2')) 238792fdd1e7SBram Moolenaar call assert_equal([2, 2], pyeval('df(2)')) 238892fdd1e7SBram Moolenaar call assert_equal(1, pyeval('dl') is# pyeval('dl')) 238992fdd1e7SBram Moolenaar call assert_equal(1, pyeval('dd') is# pyeval('dd')) 239092fdd1e7SBram Moolenaar call assert_equal(function('Put'), pyeval('df')) 239192fdd1e7SBram Moolenaar delfunction Put 239292fdd1e7SBram Moolenaar py << trim EOF 239392fdd1e7SBram Moolenaar del DupDict 239492fdd1e7SBram Moolenaar del DupList 239592fdd1e7SBram Moolenaar del DupFun 239692fdd1e7SBram Moolenaar del dd 239792fdd1e7SBram Moolenaar del dl 239892fdd1e7SBram Moolenaar del dl2 239992fdd1e7SBram Moolenaar del df 240092fdd1e7SBram Moolenaar EOF 240192fdd1e7SBram Moolenaar close! 240292fdd1e7SBram Moolenaarendfunc 240392fdd1e7SBram Moolenaar 240492fdd1e7SBram Moolenaar" Test chdir 240592fdd1e7SBram Moolenaarfunc Test_python_chdir() 240692fdd1e7SBram Moolenaar new Xfile 240792fdd1e7SBram Moolenaar py cb = vim.current.buffer 240892fdd1e7SBram Moolenaar py << trim EOF 240992fdd1e7SBram Moolenaar import os 241092fdd1e7SBram Moolenaar fnamemodify = vim.Function('fnamemodify') 241192fdd1e7SBram Moolenaar cb.append(fnamemodify('.', ':p:h:t')) 241292fdd1e7SBram Moolenaar cb.append(vim.eval('@%')) 241392fdd1e7SBram Moolenaar os.chdir('..') 241492fdd1e7SBram Moolenaar path = fnamemodify('.', ':p:h:t') 241592fdd1e7SBram Moolenaar if path != 'src': 241692fdd1e7SBram Moolenaar # Running tests from a shadow directory, so move up another level 241792fdd1e7SBram Moolenaar # This will result in @% looking like shadow/testdir/Xfile, hence the 241892fdd1e7SBram Moolenaar # extra fnamemodify 241992fdd1e7SBram Moolenaar os.chdir('..') 242092fdd1e7SBram Moolenaar cb.append(fnamemodify('.', ':p:h:t')) 242192fdd1e7SBram Moolenaar cb.append(fnamemodify(vim.eval('@%'), ':s?^%s.??' % path).replace(os.path.sep, '/')) 242292fdd1e7SBram Moolenaar os.chdir(path) 242392fdd1e7SBram Moolenaar del path 242492fdd1e7SBram Moolenaar else: 242592fdd1e7SBram Moolenaar cb.append(fnamemodify('.', ':p:h:t')) 242692fdd1e7SBram Moolenaar cb.append(vim.eval('@%').replace(os.path.sep, '/')) 242792fdd1e7SBram Moolenaar os.chdir('testdir') 242892fdd1e7SBram Moolenaar cb.append(fnamemodify('.', ':p:h:t')) 242992fdd1e7SBram Moolenaar cb.append(vim.eval('@%')) 243092fdd1e7SBram Moolenaar del fnamemodify 243192fdd1e7SBram Moolenaar EOF 243292fdd1e7SBram Moolenaar call assert_equal(['testdir', 'Xfile', 'src', 'testdir/Xfile', 'testdir', 243392fdd1e7SBram Moolenaar \ 'Xfile'], getline(2, '$')) 243492fdd1e7SBram Moolenaar close! 2435*0ab55d62SBram Moolenaar call AssertException(["py vim.chdir(None)"], "Vim(python):TypeError:") 243692fdd1e7SBram Moolenaarendfunc 243792fdd1e7SBram Moolenaar 243892fdd1e7SBram Moolenaar" Test errors 243992fdd1e7SBram Moolenaarfunc Test_python_errors() 2440ab589463SBram Moolenaar func F() dict 2441ab589463SBram Moolenaar endfunc 244292fdd1e7SBram Moolenaar 2443ab589463SBram Moolenaar func D() 2444ab589463SBram Moolenaar endfunc 244592fdd1e7SBram Moolenaar 244692fdd1e7SBram Moolenaar new 244792fdd1e7SBram Moolenaar py cb = vim.current.buffer 244892fdd1e7SBram Moolenaar 244992fdd1e7SBram Moolenaar py << trim EOF 245092fdd1e7SBram Moolenaar d = vim.Dictionary() 245192fdd1e7SBram Moolenaar ned = vim.Dictionary(foo='bar', baz='abcD') 245292fdd1e7SBram Moolenaar dl = vim.Dictionary(a=1) 245392fdd1e7SBram Moolenaar dl.locked = True 245492fdd1e7SBram Moolenaar l = vim.List() 245592fdd1e7SBram Moolenaar ll = vim.List('abcE') 245692fdd1e7SBram Moolenaar ll.locked = True 245792fdd1e7SBram Moolenaar nel = vim.List('abcO') 245892fdd1e7SBram Moolenaar f = vim.Function('string') 245992fdd1e7SBram Moolenaar fd = vim.Function('F') 246092fdd1e7SBram Moolenaar fdel = vim.Function('D') 246192fdd1e7SBram Moolenaar vim.command('delfunction D') 246292fdd1e7SBram Moolenaar 246392fdd1e7SBram Moolenaar def subexpr_test(expr, name, subexprs): 246492fdd1e7SBram Moolenaar cb.append('>>> Testing %s using %s' % (name, expr)) 246592fdd1e7SBram Moolenaar for subexpr in subexprs: 246692fdd1e7SBram Moolenaar ee(expr % subexpr) 246792fdd1e7SBram Moolenaar cb.append('<<< Finished') 246892fdd1e7SBram Moolenaar 246992fdd1e7SBram Moolenaar def stringtochars_test(expr): 247092fdd1e7SBram Moolenaar return subexpr_test(expr, 'StringToChars', ( 247192fdd1e7SBram Moolenaar '1', # Fail type checks 247292fdd1e7SBram Moolenaar 'u"\\0"', # Fail PyString_AsStringAndSize(bytes, , NULL) check 247392fdd1e7SBram Moolenaar '"\\0"', # Fail PyString_AsStringAndSize(object, , NULL) check 247492fdd1e7SBram Moolenaar )) 247592fdd1e7SBram Moolenaar 247692fdd1e7SBram Moolenaar class Mapping(object): 247792fdd1e7SBram Moolenaar def __init__(self, d): 247892fdd1e7SBram Moolenaar self.d = d 247992fdd1e7SBram Moolenaar 248092fdd1e7SBram Moolenaar def __getitem__(self, key): 248192fdd1e7SBram Moolenaar return self.d[key] 248292fdd1e7SBram Moolenaar 248392fdd1e7SBram Moolenaar def keys(self): 248492fdd1e7SBram Moolenaar return self.d.keys() 248592fdd1e7SBram Moolenaar 248692fdd1e7SBram Moolenaar def items(self): 248792fdd1e7SBram Moolenaar return self.d.items() 248892fdd1e7SBram Moolenaar 248992fdd1e7SBram Moolenaar def convertfrompyobject_test(expr, recurse=True): 249092fdd1e7SBram Moolenaar # pydict_to_tv 249192fdd1e7SBram Moolenaar stringtochars_test(expr % '{%s : 1}') 249292fdd1e7SBram Moolenaar if recurse: 249392fdd1e7SBram Moolenaar convertfrompyobject_test(expr % '{"abcF" : %s}', False) 249492fdd1e7SBram Moolenaar # pymap_to_tv 249592fdd1e7SBram Moolenaar stringtochars_test(expr % 'Mapping({%s : 1})') 249692fdd1e7SBram Moolenaar if recurse: 249792fdd1e7SBram Moolenaar convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False) 249892fdd1e7SBram Moolenaar # pyseq_to_tv 249992fdd1e7SBram Moolenaar iter_test(expr) 250092fdd1e7SBram Moolenaar return subexpr_test(expr, 'ConvertFromPyObject', ( 250192fdd1e7SBram Moolenaar 'None', # Not conversible 250292fdd1e7SBram Moolenaar '{"": 1}', # Empty key not allowed 250392fdd1e7SBram Moolenaar '{u"": 1}', # Same, but with unicode object 250492fdd1e7SBram Moolenaar 'FailingMapping()', # 250592fdd1e7SBram Moolenaar 'FailingMappingKey()', # 250692fdd1e7SBram Moolenaar 'FailingNumber()', # 250792fdd1e7SBram Moolenaar )) 250892fdd1e7SBram Moolenaar 250992fdd1e7SBram Moolenaar def convertfrompymapping_test(expr): 251092fdd1e7SBram Moolenaar convertfrompyobject_test(expr) 251192fdd1e7SBram Moolenaar return subexpr_test(expr, 'ConvertFromPyMapping', ( 251292fdd1e7SBram Moolenaar '[]', 251392fdd1e7SBram Moolenaar )) 251492fdd1e7SBram Moolenaar 251592fdd1e7SBram Moolenaar def iter_test(expr): 251692fdd1e7SBram Moolenaar return subexpr_test(expr, '*Iter*', ( 251792fdd1e7SBram Moolenaar 'FailingIter()', 251892fdd1e7SBram Moolenaar 'FailingIterNext()', 251992fdd1e7SBram Moolenaar )) 252092fdd1e7SBram Moolenaar 252192fdd1e7SBram Moolenaar def number_test(expr, natural=False, unsigned=False): 252292fdd1e7SBram Moolenaar if natural: 252392fdd1e7SBram Moolenaar unsigned = True 252492fdd1e7SBram Moolenaar return subexpr_test(expr, 'NumberToLong', ( 252592fdd1e7SBram Moolenaar '[]', 252692fdd1e7SBram Moolenaar 'None', 252792fdd1e7SBram Moolenaar ) + (unsigned and ('-1',) or ()) 252892fdd1e7SBram Moolenaar + (natural and ('0',) or ())) 252992fdd1e7SBram Moolenaar 253092fdd1e7SBram Moolenaar class FailingTrue(object): 253192fdd1e7SBram Moolenaar def __nonzero__(self): 253292fdd1e7SBram Moolenaar raise NotImplementedError('bool') 253392fdd1e7SBram Moolenaar 253492fdd1e7SBram Moolenaar class FailingIter(object): 253592fdd1e7SBram Moolenaar def __iter__(self): 253692fdd1e7SBram Moolenaar raise NotImplementedError('iter') 253792fdd1e7SBram Moolenaar 253892fdd1e7SBram Moolenaar class FailingIterNext(object): 253992fdd1e7SBram Moolenaar def __iter__(self): 254092fdd1e7SBram Moolenaar return self 254192fdd1e7SBram Moolenaar 254292fdd1e7SBram Moolenaar def next(self): 254392fdd1e7SBram Moolenaar raise NotImplementedError('next') 254492fdd1e7SBram Moolenaar 254592fdd1e7SBram Moolenaar class FailingIterNextN(object): 254692fdd1e7SBram Moolenaar def __init__(self, n): 254792fdd1e7SBram Moolenaar self.n = n 254892fdd1e7SBram Moolenaar 254992fdd1e7SBram Moolenaar def __iter__(self): 255092fdd1e7SBram Moolenaar return self 255192fdd1e7SBram Moolenaar 255292fdd1e7SBram Moolenaar def next(self): 255392fdd1e7SBram Moolenaar if self.n: 255492fdd1e7SBram Moolenaar self.n -= 1 255592fdd1e7SBram Moolenaar return 1 255692fdd1e7SBram Moolenaar else: 255792fdd1e7SBram Moolenaar raise NotImplementedError('next N') 255892fdd1e7SBram Moolenaar 255992fdd1e7SBram Moolenaar class FailingMappingKey(object): 256092fdd1e7SBram Moolenaar def __getitem__(self, item): 256192fdd1e7SBram Moolenaar raise NotImplementedError('getitem:mappingkey') 256292fdd1e7SBram Moolenaar 256392fdd1e7SBram Moolenaar def keys(self): 256492fdd1e7SBram Moolenaar return list("abcH") 256592fdd1e7SBram Moolenaar 256692fdd1e7SBram Moolenaar class FailingMapping(object): 256792fdd1e7SBram Moolenaar def __getitem__(self): 256892fdd1e7SBram Moolenaar raise NotImplementedError('getitem:mapping') 256992fdd1e7SBram Moolenaar 257092fdd1e7SBram Moolenaar def keys(self): 257192fdd1e7SBram Moolenaar raise NotImplementedError('keys') 257292fdd1e7SBram Moolenaar 257392fdd1e7SBram Moolenaar class FailingList(list): 257492fdd1e7SBram Moolenaar def __getitem__(self, idx): 257592fdd1e7SBram Moolenaar if i == 2: 257692fdd1e7SBram Moolenaar raise NotImplementedError('getitem:list') 257792fdd1e7SBram Moolenaar else: 257892fdd1e7SBram Moolenaar return super(FailingList, self).__getitem__(idx) 257992fdd1e7SBram Moolenaar 258092fdd1e7SBram Moolenaar class NoArgsCall(object): 258192fdd1e7SBram Moolenaar def __call__(self): 258292fdd1e7SBram Moolenaar pass 258392fdd1e7SBram Moolenaar 258492fdd1e7SBram Moolenaar class FailingCall(object): 258592fdd1e7SBram Moolenaar def __call__(self, path): 258692fdd1e7SBram Moolenaar raise NotImplementedError('call') 258792fdd1e7SBram Moolenaar 258892fdd1e7SBram Moolenaar class FailingNumber(object): 258992fdd1e7SBram Moolenaar def __int__(self): 259092fdd1e7SBram Moolenaar raise NotImplementedError('int') 259192fdd1e7SBram Moolenaar 259292fdd1e7SBram Moolenaar cb.append("> Output") 259392fdd1e7SBram Moolenaar cb.append(">> OutputSetattr") 259492fdd1e7SBram Moolenaar ee('del sys.stdout.softspace') 259592fdd1e7SBram Moolenaar number_test('sys.stdout.softspace = %s', unsigned=True) 259692fdd1e7SBram Moolenaar number_test('sys.stderr.softspace = %s', unsigned=True) 259792fdd1e7SBram Moolenaar ee('assert sys.stdout.isatty()==False') 259892fdd1e7SBram Moolenaar ee('assert sys.stdout.seekable()==False') 259992fdd1e7SBram Moolenaar ee('sys.stdout.close()') 260092fdd1e7SBram Moolenaar ee('sys.stdout.flush()') 260192fdd1e7SBram Moolenaar ee('assert sys.stderr.isatty()==False') 260292fdd1e7SBram Moolenaar ee('assert sys.stderr.seekable()==False') 260392fdd1e7SBram Moolenaar ee('sys.stderr.close()') 260492fdd1e7SBram Moolenaar ee('sys.stderr.flush()') 260592fdd1e7SBram Moolenaar ee('sys.stdout.attr = None') 260692fdd1e7SBram Moolenaar cb.append(">> OutputWrite") 260792fdd1e7SBram Moolenaar ee('assert sys.stdout.writable()==True') 260892fdd1e7SBram Moolenaar ee('assert sys.stdout.readable()==False') 260992fdd1e7SBram Moolenaar ee('assert sys.stderr.writable()==True') 261092fdd1e7SBram Moolenaar ee('assert sys.stderr.readable()==False') 261192fdd1e7SBram Moolenaar ee('assert sys.stdout.closed()==False') 261292fdd1e7SBram Moolenaar ee('assert sys.stderr.closed()==False') 261392fdd1e7SBram Moolenaar ee('assert sys.stdout.errors=="strict"') 261492fdd1e7SBram Moolenaar ee('assert sys.stderr.errors=="strict"') 261592fdd1e7SBram Moolenaar ee('assert sys.stdout.encoding==sys.stderr.encoding') 261692fdd1e7SBram Moolenaar ee('sys.stdout.write(None)') 261792fdd1e7SBram Moolenaar cb.append(">> OutputWriteLines") 261892fdd1e7SBram Moolenaar ee('sys.stdout.writelines(None)') 261992fdd1e7SBram Moolenaar ee('sys.stdout.writelines([1])') 262092fdd1e7SBram Moolenaar iter_test('sys.stdout.writelines(%s)') 262192fdd1e7SBram Moolenaar cb.append("> VimCommand") 262292fdd1e7SBram Moolenaar stringtochars_test('vim.command(%s)') 262392fdd1e7SBram Moolenaar ee('vim.command("", 2)') 262492fdd1e7SBram Moolenaar #! Not checked: vim->python exceptions translating: checked later 262592fdd1e7SBram Moolenaar cb.append("> VimToPython") 262692fdd1e7SBram Moolenaar #! Not checked: everything: needs errors in internal python functions 262792fdd1e7SBram Moolenaar cb.append("> VimEval") 262892fdd1e7SBram Moolenaar stringtochars_test('vim.eval(%s)') 262992fdd1e7SBram Moolenaar ee('vim.eval("", FailingTrue())') 263092fdd1e7SBram Moolenaar #! Not checked: everything: needs errors in internal python functions 263192fdd1e7SBram Moolenaar cb.append("> VimEvalPy") 263292fdd1e7SBram Moolenaar stringtochars_test('vim.bindeval(%s)') 263392fdd1e7SBram Moolenaar ee('vim.eval("", 2)') 263492fdd1e7SBram Moolenaar #! Not checked: vim->python exceptions translating: checked later 263592fdd1e7SBram Moolenaar cb.append("> VimStrwidth") 263692fdd1e7SBram Moolenaar stringtochars_test('vim.strwidth(%s)') 263792fdd1e7SBram Moolenaar cb.append("> VimForeachRTP") 263892fdd1e7SBram Moolenaar ee('vim.foreach_rtp(None)') 263992fdd1e7SBram Moolenaar ee('vim.foreach_rtp(NoArgsCall())') 264092fdd1e7SBram Moolenaar ee('vim.foreach_rtp(FailingCall())') 264192fdd1e7SBram Moolenaar ee('vim.foreach_rtp(int, 2)') 264292fdd1e7SBram Moolenaar cb.append('> import') 264392fdd1e7SBram Moolenaar old_rtp = vim.options['rtp'] 264492fdd1e7SBram Moolenaar vim.options['rtp'] = os.getcwd().replace('\\', '\\\\').replace(',', '\\,') 264592fdd1e7SBram Moolenaar ee('import xxx_no_such_module_xxx') 264692fdd1e7SBram Moolenaar ee('import failing_import') 264792fdd1e7SBram Moolenaar ee('import failing') 264892fdd1e7SBram Moolenaar vim.options['rtp'] = old_rtp 264992fdd1e7SBram Moolenaar del old_rtp 265092fdd1e7SBram Moolenaar cb.append("> Options") 265192fdd1e7SBram Moolenaar cb.append(">> OptionsItem") 265292fdd1e7SBram Moolenaar ee('vim.options["abcQ"]') 265392fdd1e7SBram Moolenaar ee('vim.options[""]') 265492fdd1e7SBram Moolenaar stringtochars_test('vim.options[%s]') 265592fdd1e7SBram Moolenaar cb.append(">> OptionsContains") 265692fdd1e7SBram Moolenaar stringtochars_test('%s in vim.options') 265792fdd1e7SBram Moolenaar cb.append("> Dictionary") 265892fdd1e7SBram Moolenaar cb.append(">> DictionaryConstructor") 265992fdd1e7SBram Moolenaar ee('vim.Dictionary("abcI")') 266092fdd1e7SBram Moolenaar ##! Not checked: py_dict_alloc failure 266192fdd1e7SBram Moolenaar cb.append(">> DictionarySetattr") 266292fdd1e7SBram Moolenaar ee('del d.locked') 266392fdd1e7SBram Moolenaar ee('d.locked = FailingTrue()') 266492fdd1e7SBram Moolenaar ee('vim.vvars.locked = False') 266592fdd1e7SBram Moolenaar ee('d.scope = True') 266692fdd1e7SBram Moolenaar ee('d.xxx = True') 266792fdd1e7SBram Moolenaar cb.append(">> _DictionaryItem") 266892fdd1e7SBram Moolenaar ee('d.get("a", 2, 3)') 266992fdd1e7SBram Moolenaar stringtochars_test('d.get(%s)') 267092fdd1e7SBram Moolenaar ee('d.pop("a")') 267192fdd1e7SBram Moolenaar ee('dl.pop("a")') 267292fdd1e7SBram Moolenaar cb.append(">> DictionaryContains") 267392fdd1e7SBram Moolenaar ee('"" in d') 267492fdd1e7SBram Moolenaar ee('0 in d') 267592fdd1e7SBram Moolenaar cb.append(">> DictionaryIterNext") 267692fdd1e7SBram Moolenaar ee('for i in ned: ned["a"] = 1') 267792fdd1e7SBram Moolenaar del i 267892fdd1e7SBram Moolenaar cb.append(">> DictionaryAssItem") 267992fdd1e7SBram Moolenaar ee('dl["b"] = 1') 268092fdd1e7SBram Moolenaar stringtochars_test('d[%s] = 1') 268192fdd1e7SBram Moolenaar convertfrompyobject_test('d["a"] = %s') 268292fdd1e7SBram Moolenaar cb.append(">> DictionaryUpdate") 268392fdd1e7SBram Moolenaar cb.append(">>> kwargs") 268492fdd1e7SBram Moolenaar cb.append(">>> iter") 268592fdd1e7SBram Moolenaar ee('d.update(FailingMapping())') 268692fdd1e7SBram Moolenaar ee('d.update([FailingIterNext()])') 268792fdd1e7SBram Moolenaar ee('d.update([FailingIterNextN(1)])') 268892fdd1e7SBram Moolenaar iter_test('d.update(%s)') 268992fdd1e7SBram Moolenaar convertfrompyobject_test('d.update(%s)') 269092fdd1e7SBram Moolenaar stringtochars_test('d.update(((%s, 0),))') 269192fdd1e7SBram Moolenaar convertfrompyobject_test('d.update((("a", %s),))') 269292fdd1e7SBram Moolenaar cb.append(">> DictionaryPopItem") 269392fdd1e7SBram Moolenaar ee('d.popitem(1, 2)') 269492fdd1e7SBram Moolenaar cb.append(">> DictionaryHasKey") 269592fdd1e7SBram Moolenaar ee('d.has_key()') 269692fdd1e7SBram Moolenaar cb.append("> List") 269792fdd1e7SBram Moolenaar cb.append(">> ListConstructor") 269892fdd1e7SBram Moolenaar ee('vim.List(1, 2)') 269992fdd1e7SBram Moolenaar ee('vim.List(a=1)') 270092fdd1e7SBram Moolenaar iter_test('vim.List(%s)') 270192fdd1e7SBram Moolenaar convertfrompyobject_test('vim.List([%s])') 270292fdd1e7SBram Moolenaar cb.append(">> ListItem") 270392fdd1e7SBram Moolenaar ee('l[1000]') 270492fdd1e7SBram Moolenaar cb.append(">> ListAssItem") 270592fdd1e7SBram Moolenaar ee('ll[1] = 2') 270692fdd1e7SBram Moolenaar ee('l[1000] = 3') 270792fdd1e7SBram Moolenaar cb.append(">> ListAssSlice") 270892fdd1e7SBram Moolenaar ee('ll[1:100] = "abcJ"') 270992fdd1e7SBram Moolenaar iter_test('l[:] = %s') 271092fdd1e7SBram Moolenaar ee('nel[1:10:2] = "abcK"') 271192fdd1e7SBram Moolenaar cb.append(repr(tuple(nel))) 271292fdd1e7SBram Moolenaar ee('nel[1:10:2] = "a"') 271392fdd1e7SBram Moolenaar cb.append(repr(tuple(nel))) 271492fdd1e7SBram Moolenaar ee('nel[1:1:-1] = "a"') 271592fdd1e7SBram Moolenaar cb.append(repr(tuple(nel))) 271692fdd1e7SBram Moolenaar ee('nel[:] = FailingIterNextN(2)') 271792fdd1e7SBram Moolenaar cb.append(repr(tuple(nel))) 271892fdd1e7SBram Moolenaar convertfrompyobject_test('l[:] = [%s]') 271992fdd1e7SBram Moolenaar cb.append(">> ListConcatInPlace") 272092fdd1e7SBram Moolenaar iter_test('l.extend(%s)') 272192fdd1e7SBram Moolenaar convertfrompyobject_test('l.extend([%s])') 272292fdd1e7SBram Moolenaar cb.append(">> ListSetattr") 272392fdd1e7SBram Moolenaar ee('del l.locked') 272492fdd1e7SBram Moolenaar ee('l.locked = FailingTrue()') 272592fdd1e7SBram Moolenaar ee('l.xxx = True') 272692fdd1e7SBram Moolenaar cb.append("> Function") 272792fdd1e7SBram Moolenaar cb.append(">> FunctionConstructor") 272892fdd1e7SBram Moolenaar cb.append(">>> FunctionConstructor") 272992fdd1e7SBram Moolenaar ee('vim.Function("123")') 273092fdd1e7SBram Moolenaar ee('vim.Function("xxx_non_existent_function_xxx")') 273192fdd1e7SBram Moolenaar ee('vim.Function("xxx#non#existent#function#xxx")') 273292fdd1e7SBram Moolenaar ee('vim.Function("xxx_non_existent_function_xxx2", args=[])') 273392fdd1e7SBram Moolenaar ee('vim.Function("xxx_non_existent_function_xxx3", self={})') 273492fdd1e7SBram Moolenaar ee('vim.Function("xxx_non_existent_function_xxx4", args=[], self={})') 273592fdd1e7SBram Moolenaar cb.append(">>> FunctionNew") 273692fdd1e7SBram Moolenaar ee('vim.Function("tr", self="abcFuncSelf")') 273792fdd1e7SBram Moolenaar ee('vim.Function("tr", args=427423)') 273892fdd1e7SBram Moolenaar ee('vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2")') 273992fdd1e7SBram Moolenaar ee('vim.Function(self="abcFuncSelf2", args="abcFuncArgs2")') 274092fdd1e7SBram Moolenaar ee('vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2")') 274192fdd1e7SBram Moolenaar ee('vim.Function("tr", "")') 274292fdd1e7SBram Moolenaar cb.append(">> FunctionCall") 274392fdd1e7SBram Moolenaar convertfrompyobject_test('f(%s)') 274492fdd1e7SBram Moolenaar convertfrompymapping_test('fd(self=%s)') 274592fdd1e7SBram Moolenaar cb.append("> TabPage") 274692fdd1e7SBram Moolenaar cb.append(">> TabPageAttr") 274792fdd1e7SBram Moolenaar ee('vim.current.tabpage.xxx') 274892fdd1e7SBram Moolenaar cb.append("> TabList") 274992fdd1e7SBram Moolenaar cb.append(">> TabListItem") 275092fdd1e7SBram Moolenaar ee('vim.tabpages[1000]') 275192fdd1e7SBram Moolenaar cb.append("> Window") 275292fdd1e7SBram Moolenaar cb.append(">> WindowAttr") 275392fdd1e7SBram Moolenaar ee('vim.current.window.xxx') 275492fdd1e7SBram Moolenaar cb.append(">> WindowSetattr") 275592fdd1e7SBram Moolenaar ee('vim.current.window.buffer = 0') 275692fdd1e7SBram Moolenaar ee('vim.current.window.cursor = (100000000, 100000000)') 275792fdd1e7SBram Moolenaar ee('vim.current.window.cursor = True') 275892fdd1e7SBram Moolenaar number_test('vim.current.window.height = %s', unsigned=True) 275992fdd1e7SBram Moolenaar number_test('vim.current.window.width = %s', unsigned=True) 276092fdd1e7SBram Moolenaar ee('vim.current.window.xxxxxx = True') 276192fdd1e7SBram Moolenaar cb.append("> WinList") 276292fdd1e7SBram Moolenaar cb.append(">> WinListItem") 276392fdd1e7SBram Moolenaar ee('vim.windows[1000]') 276492fdd1e7SBram Moolenaar cb.append("> Buffer") 276592fdd1e7SBram Moolenaar cb.append(">> StringToLine (indirect)") 276692fdd1e7SBram Moolenaar ee('vim.current.buffer[0] = "\\na"') 2767ab589463SBram Moolenaar ee('vim.current.buffer[0] = u"\\na"') 276892fdd1e7SBram Moolenaar cb.append(">> SetBufferLine (indirect)") 276992fdd1e7SBram Moolenaar ee('vim.current.buffer[0] = True') 277092fdd1e7SBram Moolenaar cb.append(">> SetBufferLineList (indirect)") 277192fdd1e7SBram Moolenaar ee('vim.current.buffer[:] = True') 277292fdd1e7SBram Moolenaar ee('vim.current.buffer[:] = ["\\na", "bc"]') 277392fdd1e7SBram Moolenaar cb.append(">> InsertBufferLines (indirect)") 277492fdd1e7SBram Moolenaar ee('vim.current.buffer.append(None)') 277592fdd1e7SBram Moolenaar ee('vim.current.buffer.append(["\\na", "bc"])') 277692fdd1e7SBram Moolenaar ee('vim.current.buffer.append("\\nbc")') 277792fdd1e7SBram Moolenaar cb.append(">> RBItem") 277892fdd1e7SBram Moolenaar ee('vim.current.buffer[100000000]') 277992fdd1e7SBram Moolenaar cb.append(">> RBAsItem") 278092fdd1e7SBram Moolenaar ee('vim.current.buffer[100000000] = ""') 278192fdd1e7SBram Moolenaar cb.append(">> BufferAttr") 278292fdd1e7SBram Moolenaar ee('vim.current.buffer.xxx') 278392fdd1e7SBram Moolenaar cb.append(">> BufferSetattr") 278492fdd1e7SBram Moolenaar ee('vim.current.buffer.name = True') 278592fdd1e7SBram Moolenaar ee('vim.current.buffer.xxx = True') 278692fdd1e7SBram Moolenaar cb.append(">> BufferMark") 278792fdd1e7SBram Moolenaar ee('vim.current.buffer.mark(0)') 278892fdd1e7SBram Moolenaar ee('vim.current.buffer.mark("abcM")') 278992fdd1e7SBram Moolenaar ee('vim.current.buffer.mark("!")') 279092fdd1e7SBram Moolenaar cb.append(">> BufferRange") 279192fdd1e7SBram Moolenaar ee('vim.current.buffer.range(1, 2, 3)') 279292fdd1e7SBram Moolenaar cb.append("> BufMap") 279392fdd1e7SBram Moolenaar cb.append(">> BufMapItem") 279492fdd1e7SBram Moolenaar ee('vim.buffers[100000000]') 279592fdd1e7SBram Moolenaar number_test('vim.buffers[%s]', natural=True) 279692fdd1e7SBram Moolenaar cb.append("> Current") 279792fdd1e7SBram Moolenaar cb.append(">> CurrentGetattr") 279892fdd1e7SBram Moolenaar ee('vim.current.xxx') 279992fdd1e7SBram Moolenaar cb.append(">> CurrentSetattr") 280092fdd1e7SBram Moolenaar ee('vim.current.line = True') 280192fdd1e7SBram Moolenaar ee('vim.current.buffer = True') 280292fdd1e7SBram Moolenaar ee('vim.current.window = True') 280392fdd1e7SBram Moolenaar ee('vim.current.tabpage = True') 280492fdd1e7SBram Moolenaar ee('vim.current.xxx = True') 280592fdd1e7SBram Moolenaar del d 280692fdd1e7SBram Moolenaar del ned 280792fdd1e7SBram Moolenaar del dl 280892fdd1e7SBram Moolenaar del l 280992fdd1e7SBram Moolenaar del ll 281092fdd1e7SBram Moolenaar del nel 281192fdd1e7SBram Moolenaar del f 281292fdd1e7SBram Moolenaar del fd 281392fdd1e7SBram Moolenaar del fdel 281492fdd1e7SBram Moolenaar del subexpr_test 281592fdd1e7SBram Moolenaar del stringtochars_test 281692fdd1e7SBram Moolenaar del Mapping 281792fdd1e7SBram Moolenaar del convertfrompyobject_test 281892fdd1e7SBram Moolenaar del convertfrompymapping_test 281992fdd1e7SBram Moolenaar del iter_test 282092fdd1e7SBram Moolenaar del number_test 282192fdd1e7SBram Moolenaar del FailingTrue 282292fdd1e7SBram Moolenaar del FailingIter 282392fdd1e7SBram Moolenaar del FailingIterNext 282492fdd1e7SBram Moolenaar del FailingIterNextN 282592fdd1e7SBram Moolenaar del FailingMapping 282692fdd1e7SBram Moolenaar del FailingMappingKey 282792fdd1e7SBram Moolenaar del FailingList 282892fdd1e7SBram Moolenaar del NoArgsCall 282992fdd1e7SBram Moolenaar del FailingCall 283092fdd1e7SBram Moolenaar del FailingNumber 283192fdd1e7SBram Moolenaar EOF 283292fdd1e7SBram Moolenaar delfunction F 283392fdd1e7SBram Moolenaar 283492fdd1e7SBram Moolenaar let expected =<< trim END 283592fdd1e7SBram Moolenaar > Output 283692fdd1e7SBram Moolenaar >> OutputSetattr 283792fdd1e7SBram Moolenaar del sys.stdout.softspace:AttributeError:('cannot delete OutputObject attributes',) 283892fdd1e7SBram Moolenaar >>> Testing NumberToLong using sys.stdout.softspace = %s 283992fdd1e7SBram Moolenaar sys.stdout.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 284092fdd1e7SBram Moolenaar sys.stdout.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 284192fdd1e7SBram Moolenaar sys.stdout.softspace = -1:ValueError:('number must be greater or equal to zero',) 284292fdd1e7SBram Moolenaar <<< Finished 284392fdd1e7SBram Moolenaar >>> Testing NumberToLong using sys.stderr.softspace = %s 284492fdd1e7SBram Moolenaar sys.stderr.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 284592fdd1e7SBram Moolenaar sys.stderr.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 284692fdd1e7SBram Moolenaar sys.stderr.softspace = -1:ValueError:('number must be greater or equal to zero',) 284792fdd1e7SBram Moolenaar <<< Finished 284892fdd1e7SBram Moolenaar assert sys.stdout.isatty()==False:NOT FAILED 284992fdd1e7SBram Moolenaar assert sys.stdout.seekable()==False:NOT FAILED 285092fdd1e7SBram Moolenaar sys.stdout.close():NOT FAILED 285192fdd1e7SBram Moolenaar sys.stdout.flush():NOT FAILED 285292fdd1e7SBram Moolenaar assert sys.stderr.isatty()==False:NOT FAILED 285392fdd1e7SBram Moolenaar assert sys.stderr.seekable()==False:NOT FAILED 285492fdd1e7SBram Moolenaar sys.stderr.close():NOT FAILED 285592fdd1e7SBram Moolenaar sys.stderr.flush():NOT FAILED 285692fdd1e7SBram Moolenaar sys.stdout.attr = None:AttributeError:('invalid attribute: attr',) 285792fdd1e7SBram Moolenaar >> OutputWrite 285892fdd1e7SBram Moolenaar assert sys.stdout.writable()==True:NOT FAILED 285992fdd1e7SBram Moolenaar assert sys.stdout.readable()==False:NOT FAILED 286092fdd1e7SBram Moolenaar assert sys.stderr.writable()==True:NOT FAILED 286192fdd1e7SBram Moolenaar assert sys.stderr.readable()==False:NOT FAILED 286292fdd1e7SBram Moolenaar assert sys.stdout.closed()==False:NOT FAILED 286392fdd1e7SBram Moolenaar assert sys.stderr.closed()==False:NOT FAILED 286492fdd1e7SBram Moolenaar assert sys.stdout.errors=="strict":NOT FAILED 286592fdd1e7SBram Moolenaar assert sys.stderr.errors=="strict":NOT FAILED 286692fdd1e7SBram Moolenaar assert sys.stdout.encoding==sys.stderr.encoding:NOT FAILED 286792fdd1e7SBram Moolenaar sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',) 286892fdd1e7SBram Moolenaar >> OutputWriteLines 286992fdd1e7SBram Moolenaar sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",) 287092fdd1e7SBram Moolenaar sys.stdout.writelines([1]):TypeError:('coercing to Unicode: need string or buffer, int found',) 287192fdd1e7SBram Moolenaar >>> Testing *Iter* using sys.stdout.writelines(%s) 287292fdd1e7SBram Moolenaar sys.stdout.writelines(FailingIter()):NotImplementedError:('iter',) 287392fdd1e7SBram Moolenaar sys.stdout.writelines(FailingIterNext()):NotImplementedError:('next',) 287492fdd1e7SBram Moolenaar <<< Finished 287592fdd1e7SBram Moolenaar > VimCommand 287692fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.command(%s) 287792fdd1e7SBram Moolenaar vim.command(1):TypeError:('expected str() or unicode() instance, but got int',) 287892fdd1e7SBram Moolenaar vim.command(u"\0"):TypeError:('expected string without null bytes',) 287992fdd1e7SBram Moolenaar vim.command("\0"):TypeError:('expected string without null bytes',) 288092fdd1e7SBram Moolenaar <<< Finished 288192fdd1e7SBram Moolenaar vim.command("", 2):TypeError:('command() takes exactly one argument (2 given)',) 288292fdd1e7SBram Moolenaar > VimToPython 288392fdd1e7SBram Moolenaar > VimEval 288492fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.eval(%s) 288592fdd1e7SBram Moolenaar vim.eval(1):TypeError:('expected str() or unicode() instance, but got int',) 288692fdd1e7SBram Moolenaar vim.eval(u"\0"):TypeError:('expected string without null bytes',) 288792fdd1e7SBram Moolenaar vim.eval("\0"):TypeError:('expected string without null bytes',) 288892fdd1e7SBram Moolenaar <<< Finished 288992fdd1e7SBram Moolenaar vim.eval("", FailingTrue()):TypeError:('function takes exactly 1 argument (2 given)',) 289092fdd1e7SBram Moolenaar > VimEvalPy 289192fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.bindeval(%s) 289292fdd1e7SBram Moolenaar vim.bindeval(1):TypeError:('expected str() or unicode() instance, but got int',) 289392fdd1e7SBram Moolenaar vim.bindeval(u"\0"):TypeError:('expected string without null bytes',) 289492fdd1e7SBram Moolenaar vim.bindeval("\0"):TypeError:('expected string without null bytes',) 289592fdd1e7SBram Moolenaar <<< Finished 289692fdd1e7SBram Moolenaar vim.eval("", 2):TypeError:('function takes exactly 1 argument (2 given)',) 289792fdd1e7SBram Moolenaar > VimStrwidth 289892fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.strwidth(%s) 289992fdd1e7SBram Moolenaar vim.strwidth(1):TypeError:('expected str() or unicode() instance, but got int',) 290092fdd1e7SBram Moolenaar vim.strwidth(u"\0"):TypeError:('expected string without null bytes',) 290192fdd1e7SBram Moolenaar vim.strwidth("\0"):TypeError:('expected string without null bytes',) 290292fdd1e7SBram Moolenaar <<< Finished 290392fdd1e7SBram Moolenaar > VimForeachRTP 290492fdd1e7SBram Moolenaar vim.foreach_rtp(None):TypeError:("'NoneType' object is not callable",) 290592fdd1e7SBram Moolenaar vim.foreach_rtp(NoArgsCall()):TypeError:('__call__() takes exactly 1 argument (2 given)',) 290692fdd1e7SBram Moolenaar vim.foreach_rtp(FailingCall()):NotImplementedError:('call',) 290792fdd1e7SBram Moolenaar vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',) 290892fdd1e7SBram Moolenaar > import 290992fdd1e7SBram Moolenaar import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',) 291092fdd1e7SBram Moolenaar import failing_import:ImportError:() 291192fdd1e7SBram Moolenaar import failing:NotImplementedError:() 291292fdd1e7SBram Moolenaar > Options 291392fdd1e7SBram Moolenaar >> OptionsItem 291492fdd1e7SBram Moolenaar vim.options["abcQ"]:KeyError:('abcQ',) 291592fdd1e7SBram Moolenaar vim.options[""]:ValueError:('empty keys are not allowed',) 291692fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.options[%s] 291792fdd1e7SBram Moolenaar vim.options[1]:TypeError:('expected str() or unicode() instance, but got int',) 291892fdd1e7SBram Moolenaar vim.options[u"\0"]:TypeError:('expected string without null bytes',) 291992fdd1e7SBram Moolenaar vim.options["\0"]:TypeError:('expected string without null bytes',) 292092fdd1e7SBram Moolenaar <<< Finished 292192fdd1e7SBram Moolenaar >> OptionsContains 292292fdd1e7SBram Moolenaar >>> Testing StringToChars using %s in vim.options 292392fdd1e7SBram Moolenaar 1 in vim.options:TypeError:('expected str() or unicode() instance, but got int',) 292492fdd1e7SBram Moolenaar u"\0" in vim.options:TypeError:('expected string without null bytes',) 292592fdd1e7SBram Moolenaar "\0" in vim.options:TypeError:('expected string without null bytes',) 292692fdd1e7SBram Moolenaar <<< Finished 292792fdd1e7SBram Moolenaar > Dictionary 292892fdd1e7SBram Moolenaar >> DictionaryConstructor 292992fdd1e7SBram Moolenaar vim.Dictionary("abcI"):ValueError:('expected sequence element of size 2, but got sequence of size 1',) 293092fdd1e7SBram Moolenaar >> DictionarySetattr 293192fdd1e7SBram Moolenaar del d.locked:AttributeError:('cannot delete vim.Dictionary attributes',) 293292fdd1e7SBram Moolenaar d.locked = FailingTrue():NotImplementedError:('bool',) 293392fdd1e7SBram Moolenaar vim.vvars.locked = False:TypeError:('cannot modify fixed dictionary',) 293492fdd1e7SBram Moolenaar d.scope = True:AttributeError:('cannot set attribute scope',) 293592fdd1e7SBram Moolenaar d.xxx = True:AttributeError:('cannot set attribute xxx',) 293692fdd1e7SBram Moolenaar >> _DictionaryItem 293792fdd1e7SBram Moolenaar d.get("a", 2, 3):TypeError:('function takes at most 2 arguments (3 given)',) 293892fdd1e7SBram Moolenaar >>> Testing StringToChars using d.get(%s) 293992fdd1e7SBram Moolenaar d.get(1):TypeError:('expected str() or unicode() instance, but got int',) 294092fdd1e7SBram Moolenaar d.get(u"\0"):TypeError:('expected string without null bytes',) 294192fdd1e7SBram Moolenaar d.get("\0"):TypeError:('expected string without null bytes',) 294292fdd1e7SBram Moolenaar <<< Finished 294392fdd1e7SBram Moolenaar d.pop("a"):KeyError:('a',) 294492fdd1e7SBram Moolenaar dl.pop("a"):error:('dictionary is locked',) 294592fdd1e7SBram Moolenaar >> DictionaryContains 294692fdd1e7SBram Moolenaar "" in d:ValueError:('empty keys are not allowed',) 294792fdd1e7SBram Moolenaar 0 in d:TypeError:('expected str() or unicode() instance, but got int',) 294892fdd1e7SBram Moolenaar >> DictionaryIterNext 294992fdd1e7SBram Moolenaar for i in ned: ned["a"] = 1:RuntimeError:('hashtab changed during iteration',) 295092fdd1e7SBram Moolenaar >> DictionaryAssItem 295192fdd1e7SBram Moolenaar dl["b"] = 1:error:('dictionary is locked',) 295292fdd1e7SBram Moolenaar >>> Testing StringToChars using d[%s] = 1 295392fdd1e7SBram Moolenaar d[1] = 1:TypeError:('expected str() or unicode() instance, but got int',) 295492fdd1e7SBram Moolenaar d[u"\0"] = 1:TypeError:('expected string without null bytes',) 295592fdd1e7SBram Moolenaar d["\0"] = 1:TypeError:('expected string without null bytes',) 295692fdd1e7SBram Moolenaar <<< Finished 295792fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = {%s : 1} 295892fdd1e7SBram Moolenaar d["a"] = {1 : 1}:TypeError:('expected str() or unicode() instance, but got int',) 295992fdd1e7SBram Moolenaar d["a"] = {u"\0" : 1}:TypeError:('expected string without null bytes',) 296092fdd1e7SBram Moolenaar d["a"] = {"\0" : 1}:TypeError:('expected string without null bytes',) 296192fdd1e7SBram Moolenaar <<< Finished 296292fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}} 296392fdd1e7SBram Moolenaar d["a"] = {"abcF" : {1 : 1}}:TypeError:('expected str() or unicode() instance, but got int',) 296492fdd1e7SBram Moolenaar d["a"] = {"abcF" : {u"\0" : 1}}:TypeError:('expected string without null bytes',) 296592fdd1e7SBram Moolenaar d["a"] = {"abcF" : {"\0" : 1}}:TypeError:('expected string without null bytes',) 296692fdd1e7SBram Moolenaar <<< Finished 296792fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})} 296892fdd1e7SBram Moolenaar d["a"] = {"abcF" : Mapping({1 : 1})}:TypeError:('expected str() or unicode() instance, but got int',) 296992fdd1e7SBram Moolenaar d["a"] = {"abcF" : Mapping({u"\0" : 1})}:TypeError:('expected string without null bytes',) 297092fdd1e7SBram Moolenaar d["a"] = {"abcF" : Mapping({"\0" : 1})}:TypeError:('expected string without null bytes',) 297192fdd1e7SBram Moolenaar <<< Finished 297292fdd1e7SBram Moolenaar >>> Testing *Iter* using d["a"] = {"abcF" : %s} 297392fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingIter()}:TypeError:('unable to convert FailingIter to a Vim structure',) 297492fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingIterNext()}:NotImplementedError:('next',) 297592fdd1e7SBram Moolenaar <<< Finished 297692fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s} 297792fdd1e7SBram Moolenaar d["a"] = {"abcF" : None}:NOT FAILED 297892fdd1e7SBram Moolenaar d["a"] = {"abcF" : {"": 1}}:ValueError:('empty keys are not allowed',) 297992fdd1e7SBram Moolenaar d["a"] = {"abcF" : {u"": 1}}:ValueError:('empty keys are not allowed',) 298092fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingMapping()}:NotImplementedError:('keys',) 298192fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingMappingKey()}:NotImplementedError:('getitem:mappingkey',) 298292fdd1e7SBram Moolenaar d["a"] = {"abcF" : FailingNumber()}:TypeError:('long() argument must be a string or a number',) 298392fdd1e7SBram Moolenaar <<< Finished 298492fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = Mapping({%s : 1}) 298592fdd1e7SBram Moolenaar d["a"] = Mapping({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) 298692fdd1e7SBram Moolenaar d["a"] = Mapping({u"\0" : 1}):TypeError:('expected string without null bytes',) 298792fdd1e7SBram Moolenaar d["a"] = Mapping({"\0" : 1}):TypeError:('expected string without null bytes',) 298892fdd1e7SBram Moolenaar <<< Finished 298992fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}}) 299092fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',) 299192fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {u"\0" : 1}}):TypeError:('expected string without null bytes',) 299292fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {"\0" : 1}}):TypeError:('expected string without null bytes',) 299392fdd1e7SBram Moolenaar <<< Finished 299492fdd1e7SBram Moolenaar >>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})}) 299592fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',) 299692fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',) 299792fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',) 299892fdd1e7SBram Moolenaar <<< Finished 299992fdd1e7SBram Moolenaar >>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s}) 300092fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',) 300192fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingIterNext()}):NotImplementedError:('next',) 300292fdd1e7SBram Moolenaar <<< Finished 300392fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s}) 300492fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : None}):NOT FAILED 300592fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {"": 1}}):ValueError:('empty keys are not allowed',) 300692fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : {u"": 1}}):ValueError:('empty keys are not allowed',) 300792fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingMapping()}):NotImplementedError:('keys',) 300892fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) 300992fdd1e7SBram Moolenaar d["a"] = Mapping({"abcG" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) 301092fdd1e7SBram Moolenaar <<< Finished 301192fdd1e7SBram Moolenaar >>> Testing *Iter* using d["a"] = %s 301292fdd1e7SBram Moolenaar d["a"] = FailingIter():TypeError:('unable to convert FailingIter to a Vim structure',) 301392fdd1e7SBram Moolenaar d["a"] = FailingIterNext():NotImplementedError:('next',) 301492fdd1e7SBram Moolenaar <<< Finished 301592fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d["a"] = %s 301692fdd1e7SBram Moolenaar d["a"] = None:NOT FAILED 301792fdd1e7SBram Moolenaar d["a"] = {"": 1}:ValueError:('empty keys are not allowed',) 301892fdd1e7SBram Moolenaar d["a"] = {u"": 1}:ValueError:('empty keys are not allowed',) 301992fdd1e7SBram Moolenaar d["a"] = FailingMapping():NotImplementedError:('keys',) 302092fdd1e7SBram Moolenaar d["a"] = FailingMappingKey():NotImplementedError:('getitem:mappingkey',) 302192fdd1e7SBram Moolenaar d["a"] = FailingNumber():TypeError:('long() argument must be a string or a number',) 302292fdd1e7SBram Moolenaar <<< Finished 302392fdd1e7SBram Moolenaar >> DictionaryUpdate 302492fdd1e7SBram Moolenaar >>> kwargs 302592fdd1e7SBram Moolenaar >>> iter 302692fdd1e7SBram Moolenaar d.update(FailingMapping()):NotImplementedError:('keys',) 302792fdd1e7SBram Moolenaar d.update([FailingIterNext()]):NotImplementedError:('next',) 302892fdd1e7SBram Moolenaar d.update([FailingIterNextN(1)]):NotImplementedError:('next N',) 302992fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update(%s) 303092fdd1e7SBram Moolenaar d.update(FailingIter()):NotImplementedError:('iter',) 303192fdd1e7SBram Moolenaar d.update(FailingIterNext()):NotImplementedError:('next',) 303292fdd1e7SBram Moolenaar <<< Finished 303392fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update({%s : 1}) 303492fdd1e7SBram Moolenaar d.update({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) 303592fdd1e7SBram Moolenaar d.update({u"\0" : 1}):TypeError:('expected string without null bytes',) 303692fdd1e7SBram Moolenaar d.update({"\0" : 1}):TypeError:('expected string without null bytes',) 303792fdd1e7SBram Moolenaar <<< Finished 303892fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update({"abcF" : {%s : 1}}) 303992fdd1e7SBram Moolenaar d.update({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',) 304092fdd1e7SBram Moolenaar d.update({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',) 304192fdd1e7SBram Moolenaar d.update({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',) 304292fdd1e7SBram Moolenaar <<< Finished 304392fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})}) 304492fdd1e7SBram Moolenaar d.update({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',) 304592fdd1e7SBram Moolenaar d.update({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',) 304692fdd1e7SBram Moolenaar d.update({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',) 304792fdd1e7SBram Moolenaar <<< Finished 304892fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update({"abcF" : %s}) 304992fdd1e7SBram Moolenaar d.update({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',) 305092fdd1e7SBram Moolenaar d.update({"abcF" : FailingIterNext()}):NotImplementedError:('next',) 305192fdd1e7SBram Moolenaar <<< Finished 305292fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update({"abcF" : %s}) 305392fdd1e7SBram Moolenaar d.update({"abcF" : None}):NOT FAILED 305492fdd1e7SBram Moolenaar d.update({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) 305592fdd1e7SBram Moolenaar d.update({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) 305692fdd1e7SBram Moolenaar d.update({"abcF" : FailingMapping()}):NotImplementedError:('keys',) 305792fdd1e7SBram Moolenaar d.update({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) 305892fdd1e7SBram Moolenaar d.update({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) 305992fdd1e7SBram Moolenaar <<< Finished 306092fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update(Mapping({%s : 1})) 306192fdd1e7SBram Moolenaar d.update(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) 306292fdd1e7SBram Moolenaar d.update(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',) 306392fdd1e7SBram Moolenaar d.update(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',) 306492fdd1e7SBram Moolenaar <<< Finished 306592fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}})) 306692fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',) 306792fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',) 306892fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',) 306992fdd1e7SBram Moolenaar <<< Finished 307092fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})})) 307192fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',) 307292fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',) 307392fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',) 307492fdd1e7SBram Moolenaar <<< Finished 307592fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update(Mapping({"abcG" : %s})) 307692fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',) 307792fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) 307892fdd1e7SBram Moolenaar <<< Finished 307992fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s})) 308092fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : None})):NOT FAILED 308192fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) 308292fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) 308392fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) 308492fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) 308592fdd1e7SBram Moolenaar d.update(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) 308692fdd1e7SBram Moolenaar <<< Finished 308792fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update(%s) 308892fdd1e7SBram Moolenaar d.update(FailingIter()):NotImplementedError:('iter',) 308992fdd1e7SBram Moolenaar d.update(FailingIterNext()):NotImplementedError:('next',) 309092fdd1e7SBram Moolenaar <<< Finished 309192fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update(%s) 309292fdd1e7SBram Moolenaar d.update(None):TypeError:("'NoneType' object is not iterable",) 309392fdd1e7SBram Moolenaar d.update({"": 1}):ValueError:('empty keys are not allowed',) 309492fdd1e7SBram Moolenaar d.update({u"": 1}):ValueError:('empty keys are not allowed',) 309592fdd1e7SBram Moolenaar d.update(FailingMapping()):NotImplementedError:('keys',) 309692fdd1e7SBram Moolenaar d.update(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) 309792fdd1e7SBram Moolenaar d.update(FailingNumber()):TypeError:("'FailingNumber' object is not iterable",) 309892fdd1e7SBram Moolenaar <<< Finished 309992fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update(((%s, 0),)) 310092fdd1e7SBram Moolenaar d.update(((1, 0),)):TypeError:('expected str() or unicode() instance, but got int',) 310192fdd1e7SBram Moolenaar d.update(((u"\0", 0),)):TypeError:('expected string without null bytes',) 310292fdd1e7SBram Moolenaar d.update((("\0", 0),)):TypeError:('expected string without null bytes',) 310392fdd1e7SBram Moolenaar <<< Finished 310492fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", {%s : 1}),)) 310592fdd1e7SBram Moolenaar d.update((("a", {1 : 1}),)):TypeError:('expected str() or unicode() instance, but got int',) 310692fdd1e7SBram Moolenaar d.update((("a", {u"\0" : 1}),)):TypeError:('expected string without null bytes',) 310792fdd1e7SBram Moolenaar d.update((("a", {"\0" : 1}),)):TypeError:('expected string without null bytes',) 310892fdd1e7SBram Moolenaar <<< Finished 310992fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),)) 311092fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {1 : 1}}),)):TypeError:('expected str() or unicode() instance, but got int',) 311192fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {u"\0" : 1}}),)):TypeError:('expected string without null bytes',) 311292fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {"\0" : 1}}),)):TypeError:('expected string without null bytes',) 311392fdd1e7SBram Moolenaar <<< Finished 311492fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),)) 311592fdd1e7SBram Moolenaar d.update((("a", {"abcF" : Mapping({1 : 1})}),)):TypeError:('expected str() or unicode() instance, but got int',) 311692fdd1e7SBram Moolenaar d.update((("a", {"abcF" : Mapping({u"\0" : 1})}),)):TypeError:('expected string without null bytes',) 311792fdd1e7SBram Moolenaar d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):TypeError:('expected string without null bytes',) 311892fdd1e7SBram Moolenaar <<< Finished 311992fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update((("a", {"abcF" : %s}),)) 312092fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingIter()}),)):TypeError:('unable to convert FailingIter to a Vim structure',) 312192fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingIterNext()}),)):NotImplementedError:('next',) 312292fdd1e7SBram Moolenaar <<< Finished 312392fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),)) 312492fdd1e7SBram Moolenaar d.update((("a", {"abcF" : None}),)):error:("failed to add key 'a' to dictionary",) 312592fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {"": 1}}),)):ValueError:('empty keys are not allowed',) 312692fdd1e7SBram Moolenaar d.update((("a", {"abcF" : {u"": 1}}),)):ValueError:('empty keys are not allowed',) 312792fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingMapping()}),)):NotImplementedError:('keys',) 312892fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingMappingKey()}),)):NotImplementedError:('getitem:mappingkey',) 312992fdd1e7SBram Moolenaar d.update((("a", {"abcF" : FailingNumber()}),)):TypeError:('long() argument must be a string or a number',) 313092fdd1e7SBram Moolenaar <<< Finished 313192fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),)) 313292fdd1e7SBram Moolenaar d.update((("a", Mapping({1 : 1})),)):TypeError:('expected str() or unicode() instance, but got int',) 313392fdd1e7SBram Moolenaar d.update((("a", Mapping({u"\0" : 1})),)):TypeError:('expected string without null bytes',) 313492fdd1e7SBram Moolenaar d.update((("a", Mapping({"\0" : 1})),)):TypeError:('expected string without null bytes',) 313592fdd1e7SBram Moolenaar <<< Finished 313692fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),)) 313792fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {1 : 1}})),)):TypeError:('expected str() or unicode() instance, but got int',) 313892fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {u"\0" : 1}})),)):TypeError:('expected string without null bytes',) 313992fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):TypeError:('expected string without null bytes',) 314092fdd1e7SBram Moolenaar <<< Finished 314192fdd1e7SBram Moolenaar >>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),)) 314292fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):TypeError:('expected str() or unicode() instance, but got int',) 314392fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : Mapping({u"\0" : 1})})),)):TypeError:('expected string without null bytes',) 314492fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):TypeError:('expected string without null bytes',) 314592fdd1e7SBram Moolenaar <<< Finished 314692fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),)) 314792fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingIter()})),)):TypeError:('unable to convert FailingIter to a Vim structure',) 314892fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):NotImplementedError:('next',) 314992fdd1e7SBram Moolenaar <<< Finished 315092fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),)) 315192fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : None})),)):error:("failed to add key 'a' to dictionary",) 315292fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {"": 1}})),)):ValueError:('empty keys are not allowed',) 315392fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : {u"": 1}})),)):ValueError:('empty keys are not allowed',) 315492fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingMapping()})),)):NotImplementedError:('keys',) 315592fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):NotImplementedError:('getitem:mappingkey',) 315692fdd1e7SBram Moolenaar d.update((("a", Mapping({"abcG" : FailingNumber()})),)):TypeError:('long() argument must be a string or a number',) 315792fdd1e7SBram Moolenaar <<< Finished 315892fdd1e7SBram Moolenaar >>> Testing *Iter* using d.update((("a", %s),)) 315992fdd1e7SBram Moolenaar d.update((("a", FailingIter()),)):TypeError:('unable to convert FailingIter to a Vim structure',) 316092fdd1e7SBram Moolenaar d.update((("a", FailingIterNext()),)):NotImplementedError:('next',) 316192fdd1e7SBram Moolenaar <<< Finished 316292fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using d.update((("a", %s),)) 316392fdd1e7SBram Moolenaar d.update((("a", None),)):error:("failed to add key 'a' to dictionary",) 316492fdd1e7SBram Moolenaar d.update((("a", {"": 1}),)):ValueError:('empty keys are not allowed',) 316592fdd1e7SBram Moolenaar d.update((("a", {u"": 1}),)):ValueError:('empty keys are not allowed',) 316692fdd1e7SBram Moolenaar d.update((("a", FailingMapping()),)):NotImplementedError:('keys',) 316792fdd1e7SBram Moolenaar d.update((("a", FailingMappingKey()),)):NotImplementedError:('getitem:mappingkey',) 316892fdd1e7SBram Moolenaar d.update((("a", FailingNumber()),)):TypeError:('long() argument must be a string or a number',) 316992fdd1e7SBram Moolenaar <<< Finished 317092fdd1e7SBram Moolenaar >> DictionaryPopItem 317192fdd1e7SBram Moolenaar d.popitem(1, 2):TypeError:('popitem() takes no arguments (2 given)',) 317292fdd1e7SBram Moolenaar >> DictionaryHasKey 317392fdd1e7SBram Moolenaar d.has_key():TypeError:('has_key() takes exactly one argument (0 given)',) 317492fdd1e7SBram Moolenaar > List 317592fdd1e7SBram Moolenaar >> ListConstructor 317692fdd1e7SBram Moolenaar vim.List(1, 2):TypeError:('function takes at most 1 argument (2 given)',) 317792fdd1e7SBram Moolenaar vim.List(a=1):TypeError:('list constructor does not accept keyword arguments',) 317892fdd1e7SBram Moolenaar >>> Testing *Iter* using vim.List(%s) 317992fdd1e7SBram Moolenaar vim.List(FailingIter()):NotImplementedError:('iter',) 318092fdd1e7SBram Moolenaar vim.List(FailingIterNext()):NotImplementedError:('next',) 318192fdd1e7SBram Moolenaar <<< Finished 318292fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([{%s : 1}]) 318392fdd1e7SBram Moolenaar vim.List([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',) 318492fdd1e7SBram Moolenaar vim.List([{u"\0" : 1}]):TypeError:('expected string without null bytes',) 318592fdd1e7SBram Moolenaar vim.List([{"\0" : 1}]):TypeError:('expected string without null bytes',) 318692fdd1e7SBram Moolenaar <<< Finished 318792fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}]) 318892fdd1e7SBram Moolenaar vim.List([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',) 318992fdd1e7SBram Moolenaar vim.List([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',) 319092fdd1e7SBram Moolenaar vim.List([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',) 319192fdd1e7SBram Moolenaar <<< Finished 319292fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}]) 319392fdd1e7SBram Moolenaar vim.List([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',) 319492fdd1e7SBram Moolenaar vim.List([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',) 319592fdd1e7SBram Moolenaar vim.List([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',) 319692fdd1e7SBram Moolenaar <<< Finished 319792fdd1e7SBram Moolenaar >>> Testing *Iter* using vim.List([{"abcF" : %s}]) 319892fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to a Vim structure',) 319992fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',) 320092fdd1e7SBram Moolenaar <<< Finished 320192fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}]) 320292fdd1e7SBram Moolenaar vim.List([{"abcF" : None}]):NOT FAILED 320392fdd1e7SBram Moolenaar vim.List([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',) 320492fdd1e7SBram Moolenaar vim.List([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',) 320592fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',) 320692fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',) 320792fdd1e7SBram Moolenaar vim.List([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',) 320892fdd1e7SBram Moolenaar <<< Finished 320992fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([Mapping({%s : 1})]) 321092fdd1e7SBram Moolenaar vim.List([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',) 321192fdd1e7SBram Moolenaar vim.List([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',) 321292fdd1e7SBram Moolenaar vim.List([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',) 321392fdd1e7SBram Moolenaar <<< Finished 321492fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})]) 321592fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',) 321692fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',) 321792fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',) 321892fdd1e7SBram Moolenaar <<< Finished 321992fdd1e7SBram Moolenaar >>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})]) 322092fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',) 322192fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',) 322292fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',) 322392fdd1e7SBram Moolenaar <<< Finished 322492fdd1e7SBram Moolenaar >>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})]) 322592fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to a Vim structure',) 322692fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',) 322792fdd1e7SBram Moolenaar <<< Finished 322892fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})]) 322992fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : None})]):NOT FAILED 323092fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',) 323192fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',) 323292fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',) 323392fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',) 323492fdd1e7SBram Moolenaar vim.List([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',) 323592fdd1e7SBram Moolenaar <<< Finished 323692fdd1e7SBram Moolenaar >>> Testing *Iter* using vim.List([%s]) 323792fdd1e7SBram Moolenaar vim.List([FailingIter()]):TypeError:('unable to convert FailingIter to a Vim structure',) 323892fdd1e7SBram Moolenaar vim.List([FailingIterNext()]):NotImplementedError:('next',) 323992fdd1e7SBram Moolenaar <<< Finished 324092fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using vim.List([%s]) 324192fdd1e7SBram Moolenaar vim.List([None]):NOT FAILED 324292fdd1e7SBram Moolenaar vim.List([{"": 1}]):ValueError:('empty keys are not allowed',) 324392fdd1e7SBram Moolenaar vim.List([{u"": 1}]):ValueError:('empty keys are not allowed',) 324492fdd1e7SBram Moolenaar vim.List([FailingMapping()]):NotImplementedError:('keys',) 324592fdd1e7SBram Moolenaar vim.List([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',) 324692fdd1e7SBram Moolenaar vim.List([FailingNumber()]):TypeError:('long() argument must be a string or a number',) 324792fdd1e7SBram Moolenaar <<< Finished 324892fdd1e7SBram Moolenaar >> ListItem 324992fdd1e7SBram Moolenaar l[1000]:IndexError:('list index out of range',) 325092fdd1e7SBram Moolenaar >> ListAssItem 325192fdd1e7SBram Moolenaar ll[1] = 2:error:('list is locked',) 325292fdd1e7SBram Moolenaar l[1000] = 3:IndexError:('list index out of range',) 325392fdd1e7SBram Moolenaar >> ListAssSlice 325492fdd1e7SBram Moolenaar ll[1:100] = "abcJ":error:('list is locked',) 325592fdd1e7SBram Moolenaar >>> Testing *Iter* using l[:] = %s 325692fdd1e7SBram Moolenaar l[:] = FailingIter():NotImplementedError:('iter',) 325792fdd1e7SBram Moolenaar l[:] = FailingIterNext():NotImplementedError:('next',) 325892fdd1e7SBram Moolenaar <<< Finished 325992fdd1e7SBram Moolenaar nel[1:10:2] = "abcK":ValueError:('attempt to assign sequence of size greater than 2 to extended slice',) 326092fdd1e7SBram Moolenaar ('a', 'b', 'c', 'O') 326192fdd1e7SBram Moolenaar nel[1:10:2] = "a":ValueError:('attempt to assign sequence of size 1 to extended slice of size 2',) 326292fdd1e7SBram Moolenaar ('a', 'b', 'c', 'O') 326392fdd1e7SBram Moolenaar nel[1:1:-1] = "a":ValueError:('attempt to assign sequence of size greater than 0 to extended slice',) 326492fdd1e7SBram Moolenaar ('a', 'b', 'c', 'O') 326592fdd1e7SBram Moolenaar nel[:] = FailingIterNextN(2):NotImplementedError:('next N',) 326692fdd1e7SBram Moolenaar ('a', 'b', 'c', 'O') 326792fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [{%s : 1}] 326892fdd1e7SBram Moolenaar l[:] = [{1 : 1}]:TypeError:('expected str() or unicode() instance, but got int',) 326992fdd1e7SBram Moolenaar l[:] = [{u"\0" : 1}]:TypeError:('expected string without null bytes',) 327092fdd1e7SBram Moolenaar l[:] = [{"\0" : 1}]:TypeError:('expected string without null bytes',) 327192fdd1e7SBram Moolenaar <<< Finished 327292fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}] 327392fdd1e7SBram Moolenaar l[:] = [{"abcF" : {1 : 1}}]:TypeError:('expected str() or unicode() instance, but got int',) 327492fdd1e7SBram Moolenaar l[:] = [{"abcF" : {u"\0" : 1}}]:TypeError:('expected string without null bytes',) 327592fdd1e7SBram Moolenaar l[:] = [{"abcF" : {"\0" : 1}}]:TypeError:('expected string without null bytes',) 327692fdd1e7SBram Moolenaar <<< Finished 327792fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}] 327892fdd1e7SBram Moolenaar l[:] = [{"abcF" : Mapping({1 : 1})}]:TypeError:('expected str() or unicode() instance, but got int',) 327992fdd1e7SBram Moolenaar l[:] = [{"abcF" : Mapping({u"\0" : 1})}]:TypeError:('expected string without null bytes',) 328092fdd1e7SBram Moolenaar l[:] = [{"abcF" : Mapping({"\0" : 1})}]:TypeError:('expected string without null bytes',) 328192fdd1e7SBram Moolenaar <<< Finished 328292fdd1e7SBram Moolenaar >>> Testing *Iter* using l[:] = [{"abcF" : %s}] 328392fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingIter()}]:TypeError:('unable to convert FailingIter to a Vim structure',) 328492fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingIterNext()}]:NotImplementedError:('next',) 328592fdd1e7SBram Moolenaar <<< Finished 328692fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}] 328792fdd1e7SBram Moolenaar l[:] = [{"abcF" : None}]:NOT FAILED 328892fdd1e7SBram Moolenaar l[:] = [{"abcF" : {"": 1}}]:ValueError:('empty keys are not allowed',) 328992fdd1e7SBram Moolenaar l[:] = [{"abcF" : {u"": 1}}]:ValueError:('empty keys are not allowed',) 329092fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingMapping()}]:NotImplementedError:('keys',) 329192fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingMappingKey()}]:NotImplementedError:('getitem:mappingkey',) 329292fdd1e7SBram Moolenaar l[:] = [{"abcF" : FailingNumber()}]:TypeError:('long() argument must be a string or a number',) 329392fdd1e7SBram Moolenaar <<< Finished 329492fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [Mapping({%s : 1})] 329592fdd1e7SBram Moolenaar l[:] = [Mapping({1 : 1})]:TypeError:('expected str() or unicode() instance, but got int',) 329692fdd1e7SBram Moolenaar l[:] = [Mapping({u"\0" : 1})]:TypeError:('expected string without null bytes',) 329792fdd1e7SBram Moolenaar l[:] = [Mapping({"\0" : 1})]:TypeError:('expected string without null bytes',) 329892fdd1e7SBram Moolenaar <<< Finished 329992fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})] 330092fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {1 : 1}})]:TypeError:('expected str() or unicode() instance, but got int',) 330192fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {u"\0" : 1}})]:TypeError:('expected string without null bytes',) 330292fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {"\0" : 1}})]:TypeError:('expected string without null bytes',) 330392fdd1e7SBram Moolenaar <<< Finished 330492fdd1e7SBram Moolenaar >>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})] 330592fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:TypeError:('expected str() or unicode() instance, but got int',) 330692fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : Mapping({u"\0" : 1})})]:TypeError:('expected string without null bytes',) 330792fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:TypeError:('expected string without null bytes',) 330892fdd1e7SBram Moolenaar <<< Finished 330992fdd1e7SBram Moolenaar >>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})] 331092fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingIter()})]:TypeError:('unable to convert FailingIter to a Vim structure',) 331192fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingIterNext()})]:NotImplementedError:('next',) 331292fdd1e7SBram Moolenaar <<< Finished 331392fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})] 331492fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : None})]:NOT FAILED 331592fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {"": 1}})]:ValueError:('empty keys are not allowed',) 331692fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : {u"": 1}})]:ValueError:('empty keys are not allowed',) 331792fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingMapping()})]:NotImplementedError:('keys',) 331892fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingMappingKey()})]:NotImplementedError:('getitem:mappingkey',) 331992fdd1e7SBram Moolenaar l[:] = [Mapping({"abcG" : FailingNumber()})]:TypeError:('long() argument must be a string or a number',) 332092fdd1e7SBram Moolenaar <<< Finished 332192fdd1e7SBram Moolenaar >>> Testing *Iter* using l[:] = [%s] 332292fdd1e7SBram Moolenaar l[:] = [FailingIter()]:TypeError:('unable to convert FailingIter to a Vim structure',) 332392fdd1e7SBram Moolenaar l[:] = [FailingIterNext()]:NotImplementedError:('next',) 332492fdd1e7SBram Moolenaar <<< Finished 332592fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l[:] = [%s] 332692fdd1e7SBram Moolenaar l[:] = [None]:NOT FAILED 332792fdd1e7SBram Moolenaar l[:] = [{"": 1}]:ValueError:('empty keys are not allowed',) 332892fdd1e7SBram Moolenaar l[:] = [{u"": 1}]:ValueError:('empty keys are not allowed',) 332992fdd1e7SBram Moolenaar l[:] = [FailingMapping()]:NotImplementedError:('keys',) 333092fdd1e7SBram Moolenaar l[:] = [FailingMappingKey()]:NotImplementedError:('getitem:mappingkey',) 333192fdd1e7SBram Moolenaar l[:] = [FailingNumber()]:TypeError:('long() argument must be a string or a number',) 333292fdd1e7SBram Moolenaar <<< Finished 333392fdd1e7SBram Moolenaar >> ListConcatInPlace 333492fdd1e7SBram Moolenaar >>> Testing *Iter* using l.extend(%s) 333592fdd1e7SBram Moolenaar l.extend(FailingIter()):NotImplementedError:('iter',) 333692fdd1e7SBram Moolenaar l.extend(FailingIterNext()):NotImplementedError:('next',) 333792fdd1e7SBram Moolenaar <<< Finished 333892fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([{%s : 1}]) 333992fdd1e7SBram Moolenaar l.extend([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',) 334092fdd1e7SBram Moolenaar l.extend([{u"\0" : 1}]):TypeError:('expected string without null bytes',) 334192fdd1e7SBram Moolenaar l.extend([{"\0" : 1}]):TypeError:('expected string without null bytes',) 334292fdd1e7SBram Moolenaar <<< Finished 334392fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}]) 334492fdd1e7SBram Moolenaar l.extend([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',) 334592fdd1e7SBram Moolenaar l.extend([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',) 334692fdd1e7SBram Moolenaar l.extend([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',) 334792fdd1e7SBram Moolenaar <<< Finished 334892fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}]) 334992fdd1e7SBram Moolenaar l.extend([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',) 335092fdd1e7SBram Moolenaar l.extend([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',) 335192fdd1e7SBram Moolenaar l.extend([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',) 335292fdd1e7SBram Moolenaar <<< Finished 335392fdd1e7SBram Moolenaar >>> Testing *Iter* using l.extend([{"abcF" : %s}]) 335492fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to a Vim structure',) 335592fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',) 335692fdd1e7SBram Moolenaar <<< Finished 335792fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}]) 335892fdd1e7SBram Moolenaar l.extend([{"abcF" : None}]):NOT FAILED 335992fdd1e7SBram Moolenaar l.extend([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',) 336092fdd1e7SBram Moolenaar l.extend([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',) 336192fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',) 336292fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',) 336392fdd1e7SBram Moolenaar l.extend([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',) 336492fdd1e7SBram Moolenaar <<< Finished 336592fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([Mapping({%s : 1})]) 336692fdd1e7SBram Moolenaar l.extend([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',) 336792fdd1e7SBram Moolenaar l.extend([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',) 336892fdd1e7SBram Moolenaar l.extend([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',) 336992fdd1e7SBram Moolenaar <<< Finished 337092fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})]) 337192fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',) 337292fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',) 337392fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',) 337492fdd1e7SBram Moolenaar <<< Finished 337592fdd1e7SBram Moolenaar >>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})]) 337692fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',) 337792fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',) 337892fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',) 337992fdd1e7SBram Moolenaar <<< Finished 338092fdd1e7SBram Moolenaar >>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})]) 338192fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to a Vim structure',) 338292fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',) 338392fdd1e7SBram Moolenaar <<< Finished 338492fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})]) 338592fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : None})]):NOT FAILED 338692fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',) 338792fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',) 338892fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',) 338992fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',) 339092fdd1e7SBram Moolenaar l.extend([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',) 339192fdd1e7SBram Moolenaar <<< Finished 339292fdd1e7SBram Moolenaar >>> Testing *Iter* using l.extend([%s]) 339392fdd1e7SBram Moolenaar l.extend([FailingIter()]):TypeError:('unable to convert FailingIter to a Vim structure',) 339492fdd1e7SBram Moolenaar l.extend([FailingIterNext()]):NotImplementedError:('next',) 339592fdd1e7SBram Moolenaar <<< Finished 339692fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using l.extend([%s]) 339792fdd1e7SBram Moolenaar l.extend([None]):NOT FAILED 339892fdd1e7SBram Moolenaar l.extend([{"": 1}]):ValueError:('empty keys are not allowed',) 339992fdd1e7SBram Moolenaar l.extend([{u"": 1}]):ValueError:('empty keys are not allowed',) 340092fdd1e7SBram Moolenaar l.extend([FailingMapping()]):NotImplementedError:('keys',) 340192fdd1e7SBram Moolenaar l.extend([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',) 340292fdd1e7SBram Moolenaar l.extend([FailingNumber()]):TypeError:('long() argument must be a string or a number',) 340392fdd1e7SBram Moolenaar <<< Finished 340492fdd1e7SBram Moolenaar >> ListSetattr 340592fdd1e7SBram Moolenaar del l.locked:AttributeError:('cannot delete vim.List attributes',) 340692fdd1e7SBram Moolenaar l.locked = FailingTrue():NotImplementedError:('bool',) 340792fdd1e7SBram Moolenaar l.xxx = True:AttributeError:('cannot set attribute xxx',) 340892fdd1e7SBram Moolenaar > Function 340992fdd1e7SBram Moolenaar >> FunctionConstructor 341092fdd1e7SBram Moolenaar >>> FunctionConstructor 341192fdd1e7SBram Moolenaar vim.Function("123"):ValueError:('unnamed function 123 does not exist',) 341292fdd1e7SBram Moolenaar vim.Function("xxx_non_existent_function_xxx"):ValueError:('function xxx_non_existent_function_xxx does not exist',) 341392fdd1e7SBram Moolenaar vim.Function("xxx#non#existent#function#xxx"):NOT FAILED 341492fdd1e7SBram Moolenaar vim.Function("xxx_non_existent_function_xxx2", args=[]):ValueError:('function xxx_non_existent_function_xxx2 does not exist',) 341592fdd1e7SBram Moolenaar vim.Function("xxx_non_existent_function_xxx3", self={}):ValueError:('function xxx_non_existent_function_xxx3 does not exist',) 341692fdd1e7SBram Moolenaar vim.Function("xxx_non_existent_function_xxx4", args=[], self={}):ValueError:('function xxx_non_existent_function_xxx4 does not exist',) 341792fdd1e7SBram Moolenaar >>> FunctionNew 341892fdd1e7SBram Moolenaar vim.Function("tr", self="abcFuncSelf"):TypeError:('unable to convert str to a Vim dictionary',) 341992fdd1e7SBram Moolenaar vim.Function("tr", args=427423):TypeError:('unable to convert int to a Vim list',) 342092fdd1e7SBram Moolenaar vim.Function("tr", self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',) 342192fdd1e7SBram Moolenaar vim.Function(self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',) 342292fdd1e7SBram Moolenaar vim.Function("tr", "", self="abcFuncSelf2", args="abcFuncArgs2"):TypeError:('unable to convert str to a Vim dictionary',) 342392fdd1e7SBram Moolenaar vim.Function("tr", ""):TypeError:('function takes exactly 1 argument (2 given)',) 342492fdd1e7SBram Moolenaar >> FunctionCall 342592fdd1e7SBram Moolenaar >>> Testing StringToChars using f({%s : 1}) 342692fdd1e7SBram Moolenaar f({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) 342792fdd1e7SBram Moolenaar f({u"\0" : 1}):TypeError:('expected string without null bytes',) 342892fdd1e7SBram Moolenaar f({"\0" : 1}):TypeError:('expected string without null bytes',) 342992fdd1e7SBram Moolenaar <<< Finished 343092fdd1e7SBram Moolenaar >>> Testing StringToChars using f({"abcF" : {%s : 1}}) 343192fdd1e7SBram Moolenaar f({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',) 343292fdd1e7SBram Moolenaar f({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',) 343392fdd1e7SBram Moolenaar f({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',) 343492fdd1e7SBram Moolenaar <<< Finished 343592fdd1e7SBram Moolenaar >>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})}) 343692fdd1e7SBram Moolenaar f({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',) 343792fdd1e7SBram Moolenaar f({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',) 343892fdd1e7SBram Moolenaar f({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',) 343992fdd1e7SBram Moolenaar <<< Finished 344092fdd1e7SBram Moolenaar >>> Testing *Iter* using f({"abcF" : %s}) 344192fdd1e7SBram Moolenaar f({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',) 344292fdd1e7SBram Moolenaar f({"abcF" : FailingIterNext()}):NotImplementedError:('next',) 344392fdd1e7SBram Moolenaar <<< Finished 344492fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using f({"abcF" : %s}) 344592fdd1e7SBram Moolenaar f({"abcF" : None}):NOT FAILED 344692fdd1e7SBram Moolenaar f({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) 344792fdd1e7SBram Moolenaar f({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) 344892fdd1e7SBram Moolenaar f({"abcF" : FailingMapping()}):NotImplementedError:('keys',) 344992fdd1e7SBram Moolenaar f({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) 345092fdd1e7SBram Moolenaar f({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) 345192fdd1e7SBram Moolenaar <<< Finished 345292fdd1e7SBram Moolenaar >>> Testing StringToChars using f(Mapping({%s : 1})) 345392fdd1e7SBram Moolenaar f(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) 345492fdd1e7SBram Moolenaar f(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',) 345592fdd1e7SBram Moolenaar f(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',) 345692fdd1e7SBram Moolenaar <<< Finished 345792fdd1e7SBram Moolenaar >>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}})) 345892fdd1e7SBram Moolenaar f(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',) 345992fdd1e7SBram Moolenaar f(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',) 346092fdd1e7SBram Moolenaar f(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',) 346192fdd1e7SBram Moolenaar <<< Finished 346292fdd1e7SBram Moolenaar >>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})})) 346392fdd1e7SBram Moolenaar f(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',) 346492fdd1e7SBram Moolenaar f(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',) 346592fdd1e7SBram Moolenaar f(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',) 346692fdd1e7SBram Moolenaar <<< Finished 346792fdd1e7SBram Moolenaar >>> Testing *Iter* using f(Mapping({"abcG" : %s})) 346892fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',) 346992fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) 347092fdd1e7SBram Moolenaar <<< Finished 347192fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s})) 347292fdd1e7SBram Moolenaar f(Mapping({"abcG" : None})):NOT FAILED 347392fdd1e7SBram Moolenaar f(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) 347492fdd1e7SBram Moolenaar f(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) 347592fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) 347692fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) 347792fdd1e7SBram Moolenaar f(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) 347892fdd1e7SBram Moolenaar <<< Finished 347992fdd1e7SBram Moolenaar >>> Testing *Iter* using f(%s) 348092fdd1e7SBram Moolenaar f(FailingIter()):TypeError:('unable to convert FailingIter to a Vim structure',) 348192fdd1e7SBram Moolenaar f(FailingIterNext()):NotImplementedError:('next',) 348292fdd1e7SBram Moolenaar <<< Finished 348392fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using f(%s) 348492fdd1e7SBram Moolenaar f(None):NOT FAILED 348592fdd1e7SBram Moolenaar f({"": 1}):ValueError:('empty keys are not allowed',) 348692fdd1e7SBram Moolenaar f({u"": 1}):ValueError:('empty keys are not allowed',) 348792fdd1e7SBram Moolenaar f(FailingMapping()):NotImplementedError:('keys',) 348892fdd1e7SBram Moolenaar f(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) 348992fdd1e7SBram Moolenaar f(FailingNumber()):TypeError:('long() argument must be a string or a number',) 349092fdd1e7SBram Moolenaar <<< Finished 349192fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self={%s : 1}) 349292fdd1e7SBram Moolenaar fd(self={1 : 1}):TypeError:('expected str() or unicode() instance, but got int',) 349392fdd1e7SBram Moolenaar fd(self={u"\0" : 1}):TypeError:('expected string without null bytes',) 349492fdd1e7SBram Moolenaar fd(self={"\0" : 1}):TypeError:('expected string without null bytes',) 349592fdd1e7SBram Moolenaar <<< Finished 349692fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self={"abcF" : {%s : 1}}) 349792fdd1e7SBram Moolenaar fd(self={"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',) 349892fdd1e7SBram Moolenaar fd(self={"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',) 349992fdd1e7SBram Moolenaar fd(self={"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',) 350092fdd1e7SBram Moolenaar <<< Finished 350192fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})}) 350292fdd1e7SBram Moolenaar fd(self={"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',) 350392fdd1e7SBram Moolenaar fd(self={"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',) 350492fdd1e7SBram Moolenaar fd(self={"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',) 350592fdd1e7SBram Moolenaar <<< Finished 350692fdd1e7SBram Moolenaar >>> Testing *Iter* using fd(self={"abcF" : %s}) 350792fdd1e7SBram Moolenaar fd(self={"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to a Vim structure',) 350892fdd1e7SBram Moolenaar fd(self={"abcF" : FailingIterNext()}):NotImplementedError:('next',) 350992fdd1e7SBram Moolenaar <<< Finished 351092fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using fd(self={"abcF" : %s}) 351192fdd1e7SBram Moolenaar fd(self={"abcF" : None}):NOT FAILED 351292fdd1e7SBram Moolenaar fd(self={"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',) 351392fdd1e7SBram Moolenaar fd(self={"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',) 351492fdd1e7SBram Moolenaar fd(self={"abcF" : FailingMapping()}):NotImplementedError:('keys',) 351592fdd1e7SBram Moolenaar fd(self={"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',) 351692fdd1e7SBram Moolenaar fd(self={"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',) 351792fdd1e7SBram Moolenaar <<< Finished 351892fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self=Mapping({%s : 1})) 351992fdd1e7SBram Moolenaar fd(self=Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',) 352092fdd1e7SBram Moolenaar fd(self=Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',) 352192fdd1e7SBram Moolenaar fd(self=Mapping({"\0" : 1})):TypeError:('expected string without null bytes',) 352292fdd1e7SBram Moolenaar <<< Finished 352392fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}})) 352492fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',) 352592fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',) 352692fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',) 352792fdd1e7SBram Moolenaar <<< Finished 352892fdd1e7SBram Moolenaar >>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})})) 352992fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',) 353092fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',) 353192fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',) 353292fdd1e7SBram Moolenaar <<< Finished 353392fdd1e7SBram Moolenaar >>> Testing *Iter* using fd(self=Mapping({"abcG" : %s})) 353492fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to a Vim structure',) 353592fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',) 353692fdd1e7SBram Moolenaar <<< Finished 353792fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s})) 353892fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : None})):NOT FAILED 353992fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',) 354092fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',) 354192fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',) 354292fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',) 354392fdd1e7SBram Moolenaar fd(self=Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',) 354492fdd1e7SBram Moolenaar <<< Finished 354592fdd1e7SBram Moolenaar >>> Testing *Iter* using fd(self=%s) 354692fdd1e7SBram Moolenaar fd(self=FailingIter()):TypeError:('unable to convert FailingIter to a Vim dictionary',) 354792fdd1e7SBram Moolenaar fd(self=FailingIterNext()):TypeError:('unable to convert FailingIterNext to a Vim dictionary',) 354892fdd1e7SBram Moolenaar <<< Finished 354992fdd1e7SBram Moolenaar >>> Testing ConvertFromPyObject using fd(self=%s) 355092fdd1e7SBram Moolenaar fd(self=None):TypeError:('unable to convert NoneType to a Vim dictionary',) 355192fdd1e7SBram Moolenaar fd(self={"": 1}):ValueError:('empty keys are not allowed',) 355292fdd1e7SBram Moolenaar fd(self={u"": 1}):ValueError:('empty keys are not allowed',) 355392fdd1e7SBram Moolenaar fd(self=FailingMapping()):NotImplementedError:('keys',) 355492fdd1e7SBram Moolenaar fd(self=FailingMappingKey()):NotImplementedError:('getitem:mappingkey',) 355592fdd1e7SBram Moolenaar fd(self=FailingNumber()):TypeError:('unable to convert FailingNumber to a Vim dictionary',) 355692fdd1e7SBram Moolenaar <<< Finished 355792fdd1e7SBram Moolenaar >>> Testing ConvertFromPyMapping using fd(self=%s) 355892fdd1e7SBram Moolenaar fd(self=[]):TypeError:('unable to convert list to a Vim dictionary',) 355992fdd1e7SBram Moolenaar <<< Finished 356092fdd1e7SBram Moolenaar > TabPage 356192fdd1e7SBram Moolenaar >> TabPageAttr 356292fdd1e7SBram Moolenaar vim.current.tabpage.xxx:AttributeError:('xxx',) 356392fdd1e7SBram Moolenaar > TabList 356492fdd1e7SBram Moolenaar >> TabListItem 356592fdd1e7SBram Moolenaar vim.tabpages[1000]:IndexError:('no such tab page',) 356692fdd1e7SBram Moolenaar > Window 356792fdd1e7SBram Moolenaar >> WindowAttr 356892fdd1e7SBram Moolenaar vim.current.window.xxx:AttributeError:('xxx',) 356992fdd1e7SBram Moolenaar >> WindowSetattr 357092fdd1e7SBram Moolenaar vim.current.window.buffer = 0:TypeError:('readonly attribute: buffer',) 357192fdd1e7SBram Moolenaar vim.current.window.cursor = (100000000, 100000000):error:('cursor position outside buffer',) 357292fdd1e7SBram Moolenaar vim.current.window.cursor = True:TypeError:('argument must be 2-item sequence, not bool',) 357392fdd1e7SBram Moolenaar >>> Testing NumberToLong using vim.current.window.height = %s 357492fdd1e7SBram Moolenaar vim.current.window.height = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 357592fdd1e7SBram Moolenaar vim.current.window.height = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 357692fdd1e7SBram Moolenaar vim.current.window.height = -1:ValueError:('number must be greater or equal to zero',) 357792fdd1e7SBram Moolenaar <<< Finished 357892fdd1e7SBram Moolenaar >>> Testing NumberToLong using vim.current.window.width = %s 357992fdd1e7SBram Moolenaar vim.current.window.width = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 358092fdd1e7SBram Moolenaar vim.current.window.width = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 358192fdd1e7SBram Moolenaar vim.current.window.width = -1:ValueError:('number must be greater or equal to zero',) 358292fdd1e7SBram Moolenaar <<< Finished 358392fdd1e7SBram Moolenaar vim.current.window.xxxxxx = True:AttributeError:('xxxxxx',) 358492fdd1e7SBram Moolenaar > WinList 358592fdd1e7SBram Moolenaar >> WinListItem 358692fdd1e7SBram Moolenaar vim.windows[1000]:IndexError:('no such window',) 358792fdd1e7SBram Moolenaar > Buffer 358892fdd1e7SBram Moolenaar >> StringToLine (indirect) 358992fdd1e7SBram Moolenaar vim.current.buffer[0] = "\na":error:('string cannot contain newlines',) 3590ab589463SBram Moolenaar vim.current.buffer[0] = u"\na":error:('string cannot contain newlines',) 359192fdd1e7SBram Moolenaar >> SetBufferLine (indirect) 359292fdd1e7SBram Moolenaar vim.current.buffer[0] = True:TypeError:('bad argument type for built-in operation',) 359392fdd1e7SBram Moolenaar >> SetBufferLineList (indirect) 359492fdd1e7SBram Moolenaar vim.current.buffer[:] = True:TypeError:('bad argument type for built-in operation',) 359592fdd1e7SBram Moolenaar vim.current.buffer[:] = ["\na", "bc"]:error:('string cannot contain newlines',) 359692fdd1e7SBram Moolenaar >> InsertBufferLines (indirect) 359792fdd1e7SBram Moolenaar vim.current.buffer.append(None):TypeError:('bad argument type for built-in operation',) 359892fdd1e7SBram Moolenaar vim.current.buffer.append(["\na", "bc"]):error:('string cannot contain newlines',) 359992fdd1e7SBram Moolenaar vim.current.buffer.append("\nbc"):error:('string cannot contain newlines',) 360092fdd1e7SBram Moolenaar >> RBItem 360192fdd1e7SBram Moolenaar vim.current.buffer[100000000]:IndexError:('line number out of range',) 360292fdd1e7SBram Moolenaar >> RBAsItem 360392fdd1e7SBram Moolenaar vim.current.buffer[100000000] = "":IndexError:('line number out of range',) 360492fdd1e7SBram Moolenaar >> BufferAttr 360592fdd1e7SBram Moolenaar vim.current.buffer.xxx:AttributeError:('xxx',) 360692fdd1e7SBram Moolenaar >> BufferSetattr 360792fdd1e7SBram Moolenaar vim.current.buffer.name = True:TypeError:('expected str() or unicode() instance, but got bool',) 360892fdd1e7SBram Moolenaar vim.current.buffer.xxx = True:AttributeError:('xxx',) 360992fdd1e7SBram Moolenaar >> BufferMark 361092fdd1e7SBram Moolenaar vim.current.buffer.mark(0):TypeError:('expected str() or unicode() instance, but got int',) 361192fdd1e7SBram Moolenaar vim.current.buffer.mark("abcM"):ValueError:('mark name must be a single character',) 361292fdd1e7SBram Moolenaar vim.current.buffer.mark("!"):error:('invalid mark name',) 361392fdd1e7SBram Moolenaar >> BufferRange 361492fdd1e7SBram Moolenaar vim.current.buffer.range(1, 2, 3):TypeError:('function takes exactly 2 arguments (3 given)',) 361592fdd1e7SBram Moolenaar > BufMap 361692fdd1e7SBram Moolenaar >> BufMapItem 361792fdd1e7SBram Moolenaar vim.buffers[100000000]:KeyError:(100000000,) 361892fdd1e7SBram Moolenaar >>> Testing NumberToLong using vim.buffers[%s] 361992fdd1e7SBram Moolenaar vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',) 362092fdd1e7SBram Moolenaar vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',) 362192fdd1e7SBram Moolenaar vim.buffers[-1]:ValueError:('number must be greater than zero',) 362292fdd1e7SBram Moolenaar vim.buffers[0]:ValueError:('number must be greater than zero',) 362392fdd1e7SBram Moolenaar <<< Finished 362492fdd1e7SBram Moolenaar > Current 362592fdd1e7SBram Moolenaar >> CurrentGetattr 362692fdd1e7SBram Moolenaar vim.current.xxx:AttributeError:('xxx',) 362792fdd1e7SBram Moolenaar >> CurrentSetattr 362892fdd1e7SBram Moolenaar vim.current.line = True:TypeError:('bad argument type for built-in operation',) 362992fdd1e7SBram Moolenaar vim.current.buffer = True:TypeError:('expected vim.Buffer object, but got bool',) 363092fdd1e7SBram Moolenaar vim.current.window = True:TypeError:('expected vim.Window object, but got bool',) 363192fdd1e7SBram Moolenaar vim.current.tabpage = True:TypeError:('expected vim.TabPage object, but got bool',) 363292fdd1e7SBram Moolenaar vim.current.xxx = True:AttributeError:('xxx',) 363392fdd1e7SBram Moolenaar END 363492fdd1e7SBram Moolenaar 363592fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 363692fdd1e7SBram Moolenaar close! 363792fdd1e7SBram Moolenaarendfunc 363892fdd1e7SBram Moolenaar 363992fdd1e7SBram Moolenaar" Test import 364092fdd1e7SBram Moolenaarfunc Test_python_import() 364192fdd1e7SBram Moolenaar new 364292fdd1e7SBram Moolenaar py cb = vim.current.buffer 364392fdd1e7SBram Moolenaar 364492fdd1e7SBram Moolenaar py << trim EOF 364592fdd1e7SBram Moolenaar sys.path.insert(0, os.path.join(os.getcwd(), 'python_before')) 364692fdd1e7SBram Moolenaar sys.path.append(os.path.join(os.getcwd(), 'python_after')) 364792fdd1e7SBram Moolenaar vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\') 364892fdd1e7SBram Moolenaar l = [] 364992fdd1e7SBram Moolenaar def callback(path): 365092fdd1e7SBram Moolenaar l.append(path[-len('/testdir'):].replace(os.path.sep, '/')) 365192fdd1e7SBram Moolenaar vim.foreach_rtp(callback) 365292fdd1e7SBram Moolenaar cb.append(repr(l)) 365392fdd1e7SBram Moolenaar del l 365492fdd1e7SBram Moolenaar def callback(path): 365592fdd1e7SBram Moolenaar return path[-len('/testdir'):].replace(os.path.sep, '/') 365692fdd1e7SBram Moolenaar cb.append(repr(vim.foreach_rtp(callback))) 365792fdd1e7SBram Moolenaar del callback 365892fdd1e7SBram Moolenaar from module import dir as d 365992fdd1e7SBram Moolenaar from modulex import ddir 366092fdd1e7SBram Moolenaar cb.append(d + ',' + ddir) 366192fdd1e7SBram Moolenaar import before 366292fdd1e7SBram Moolenaar cb.append(before.dir) 366392fdd1e7SBram Moolenaar import after 366492fdd1e7SBram Moolenaar cb.append(after.dir) 366592fdd1e7SBram Moolenaar import topmodule as tm 366692fdd1e7SBram Moolenaar import topmodule.submodule as tms 366792fdd1e7SBram Moolenaar import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss 366892fdd1e7SBram Moolenaar cb.append(tm.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):]) 366992fdd1e7SBram Moolenaar cb.append(tms.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):]) 367092fdd1e7SBram Moolenaar cb.append(tmsss.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):]) 3671ab589463SBram Moolenaar 367292fdd1e7SBram Moolenaar del before 367392fdd1e7SBram Moolenaar del after 367492fdd1e7SBram Moolenaar del d 367592fdd1e7SBram Moolenaar del ddir 367692fdd1e7SBram Moolenaar del tm 367792fdd1e7SBram Moolenaar del tms 367892fdd1e7SBram Moolenaar del tmsss 367992fdd1e7SBram Moolenaar EOF 368092fdd1e7SBram Moolenaar 368192fdd1e7SBram Moolenaar let expected =<< trim END 368292fdd1e7SBram Moolenaar ['/testdir'] 368392fdd1e7SBram Moolenaar '/testdir' 368492fdd1e7SBram Moolenaar 2,xx 368592fdd1e7SBram Moolenaar before 368692fdd1e7SBram Moolenaar after 368792fdd1e7SBram Moolenaar pythonx/topmodule/__init__.py 368892fdd1e7SBram Moolenaar pythonx/topmodule/submodule/__init__.py 368992fdd1e7SBram Moolenaar pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py 369092fdd1e7SBram Moolenaar END 369192fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 369292fdd1e7SBram Moolenaar close! 3693ab589463SBram Moolenaar 3694ab589463SBram Moolenaar " Try to import a non-existing moudle with a dot (.) 3695ab589463SBram Moolenaar call AssertException(['py import a.b.c'], 'ImportError:') 369692fdd1e7SBram Moolenaarendfunc 369792fdd1e7SBram Moolenaar 369892fdd1e7SBram Moolenaar" Test exceptions 369992fdd1e7SBram Moolenaarfunc Test_python_exception() 3700ab589463SBram Moolenaar func Exe(e) 370192fdd1e7SBram Moolenaar execute a:e 3702ab589463SBram Moolenaar endfunc 370392fdd1e7SBram Moolenaar 370492fdd1e7SBram Moolenaar new 370592fdd1e7SBram Moolenaar py cb = vim.current.buffer 370692fdd1e7SBram Moolenaar 370792fdd1e7SBram Moolenaar py << trim EOF 370892fdd1e7SBram Moolenaar Exe = vim.bindeval('function("Exe")') 370992fdd1e7SBram Moolenaar ee('vim.command("throw \'abcN\'")') 371092fdd1e7SBram Moolenaar ee('Exe("throw \'def\'")') 371192fdd1e7SBram Moolenaar ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")') 371292fdd1e7SBram Moolenaar ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")') 371392fdd1e7SBram Moolenaar ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")') 371492fdd1e7SBram Moolenaar ee('vim.eval("xxx_unknown_function_xxx()")') 371592fdd1e7SBram Moolenaar ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")') 371692fdd1e7SBram Moolenaar del Exe 371792fdd1e7SBram Moolenaar EOF 371892fdd1e7SBram Moolenaar delfunction Exe 371992fdd1e7SBram Moolenaar 372092fdd1e7SBram Moolenaar let expected =<< trim END 372192fdd1e7SBram Moolenaar vim.command("throw 'abcN'"):error:('abcN',) 372292fdd1e7SBram Moolenaar Exe("throw 'def'"):error:('def',) 372392fdd1e7SBram Moolenaar vim.eval("Exe('throw ''ghi''')"):error:('ghi',) 372492fdd1e7SBram Moolenaar vim.eval("Exe('echoerr ''jkl''')"):error:('Vim(echoerr):jkl',) 372592fdd1e7SBram Moolenaar vim.eval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',) 372692fdd1e7SBram Moolenaar vim.eval("xxx_unknown_function_xxx()"):error:('Vim:E117: Unknown function: xxx_unknown_function_xxx',) 372792fdd1e7SBram Moolenaar vim.bindeval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',) 372892fdd1e7SBram Moolenaar END 372992fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 373092fdd1e7SBram Moolenaar close! 373192fdd1e7SBram Moolenaarendfunc 373292fdd1e7SBram Moolenaar 373392fdd1e7SBram Moolenaar" Regression: interrupting vim.command propagates to next vim.command 373492fdd1e7SBram Moolenaarfunc Test_python_keyboard_interrupt() 373592fdd1e7SBram Moolenaar new 373692fdd1e7SBram Moolenaar py cb = vim.current.buffer 373792fdd1e7SBram Moolenaar py << trim EOF 373892fdd1e7SBram Moolenaar def test_keyboard_interrupt(): 373992fdd1e7SBram Moolenaar try: 374092fdd1e7SBram Moolenaar vim.command('while 1 | endwhile') 374192fdd1e7SBram Moolenaar except KeyboardInterrupt: 374292fdd1e7SBram Moolenaar cb.append('Caught KeyboardInterrupt') 374392fdd1e7SBram Moolenaar except Exception: 374492fdd1e7SBram Moolenaar cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info())) 374592fdd1e7SBram Moolenaar else: 374692fdd1e7SBram Moolenaar cb.append('!!!!!!!! No exception') 374792fdd1e7SBram Moolenaar try: 374892fdd1e7SBram Moolenaar vim.command('$ put =\'Running :put\'') 374992fdd1e7SBram Moolenaar except KeyboardInterrupt: 375092fdd1e7SBram Moolenaar cb.append('!!!!!!!! Caught KeyboardInterrupt') 375192fdd1e7SBram Moolenaar except Exception: 375292fdd1e7SBram Moolenaar cb.append('!!!!!!!! Caught exception: ' + emsg(sys.exc_info())) 375392fdd1e7SBram Moolenaar else: 375492fdd1e7SBram Moolenaar cb.append('No exception') 375592fdd1e7SBram Moolenaar EOF 375692fdd1e7SBram Moolenaar 375792fdd1e7SBram Moolenaar debuggreedy 375892fdd1e7SBram Moolenaar call inputsave() 375992fdd1e7SBram Moolenaar call feedkeys("s\ns\ns\ns\nq\n") 376092fdd1e7SBram Moolenaar redir => output 376192fdd1e7SBram Moolenaar debug silent! py test_keyboard_interrupt() 376292fdd1e7SBram Moolenaar redir END 376392fdd1e7SBram Moolenaar 0 debuggreedy 376492fdd1e7SBram Moolenaar call inputrestore() 376592fdd1e7SBram Moolenaar py del test_keyboard_interrupt 376692fdd1e7SBram Moolenaar 376792fdd1e7SBram Moolenaar let expected =<< trim END 376892fdd1e7SBram Moolenaar Caught KeyboardInterrupt 376992fdd1e7SBram Moolenaar Running :put 377092fdd1e7SBram Moolenaar No exception 377192fdd1e7SBram Moolenaar END 377292fdd1e7SBram Moolenaar call assert_equal(expected, getline(2, '$')) 377392fdd1e7SBram Moolenaar call assert_equal('', output) 377492fdd1e7SBram Moolenaar close! 377592fdd1e7SBram Moolenaarendfunc 377692fdd1e7SBram Moolenaar 37776c2b7b80SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 3778