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