153901442SBram Moolenaar" Test for python 3 commands. 2213ed008SBram Moolenaar" TODO: move tests from test87.in here. 3a58883b4SBram Moolenaar 4b46fecd3SBram Moolenaarsource check.vim 5b46fecd3SBram MoolenaarCheckFeature python3 6a58883b4SBram Moolenaar 7a58883b4SBram Moolenaarfunc Test_py3do() 8a58883b4SBram Moolenaar " Check deleting lines does not trigger an ml_get error. 9a58883b4SBram Moolenaar py3 import vim 10a58883b4SBram Moolenaar new 11a58883b4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 12a58883b4SBram Moolenaar py3do vim.command("%d_") 13a58883b4SBram Moolenaar bwipe! 14a58883b4SBram Moolenaar 15a58883b4SBram Moolenaar " Check switching to another buffer does not trigger an ml_get error. 16a58883b4SBram Moolenaar new 17a58883b4SBram Moolenaar let wincount = winnr('$') 18a58883b4SBram Moolenaar call setline(1, ['one', 'two', 'three']) 19a58883b4SBram Moolenaar py3do vim.command("new") 20a58883b4SBram Moolenaar call assert_equal(wincount + 1, winnr('$')) 21a58883b4SBram Moolenaar bwipe! 22a58883b4SBram Moolenaar bwipe! 23a58883b4SBram Moolenaarendfunc 2453901442SBram Moolenaar 2553901442SBram Moolenaarfunc Test_set_cursor() 2653901442SBram Moolenaar " Check that setting the cursor position works. 2753901442SBram Moolenaar py3 import vim 2853901442SBram Moolenaar new 2953901442SBram Moolenaar call setline(1, ['first line', 'second line']) 3053901442SBram Moolenaar normal gg 3153901442SBram Moolenaar py3do vim.current.window.cursor = (1, 5) 3253901442SBram Moolenaar call assert_equal([1, 6], [line('.'), col('.')]) 3353901442SBram Moolenaar 3453901442SBram Moolenaar " Check that movement after setting cursor position keeps current column. 3553901442SBram Moolenaar normal j 3653901442SBram Moolenaar call assert_equal([2, 6], [line('.'), col('.')]) 3753901442SBram Moolenaarendfunc 389123c0b3SBram Moolenaar 399123c0b3SBram Moolenaarfunc Test_vim_function() 409123c0b3SBram Moolenaar " Check creating vim.Function object 419123c0b3SBram Moolenaar py3 import vim 429123c0b3SBram Moolenaar 439123c0b3SBram Moolenaar func s:foo() 449123c0b3SBram Moolenaar return matchstr(expand('<sfile>'), '<SNR>\zs\d\+_foo$') 459123c0b3SBram Moolenaar endfunc 469123c0b3SBram Moolenaar let name = '<SNR>' . s:foo() 479123c0b3SBram Moolenaar 489123c0b3SBram Moolenaar try 499123c0b3SBram Moolenaar py3 f = vim.bindeval('function("s:foo")') 509123c0b3SBram Moolenaar call assert_equal(name, py3eval('f.name')) 519123c0b3SBram Moolenaar catch 529123c0b3SBram Moolenaar call assert_false(v:exception) 539123c0b3SBram Moolenaar endtry 549123c0b3SBram Moolenaar 559123c0b3SBram Moolenaar try 569123c0b3SBram Moolenaar py3 f = vim.Function(b'\x80\xfdR' + vim.eval('s:foo()').encode()) 573f4f3d8eSBram Moolenaar call assert_equal(name, 'f.name'->py3eval()) 589123c0b3SBram Moolenaar catch 599123c0b3SBram Moolenaar call assert_false(v:exception) 609123c0b3SBram Moolenaar endtry 619123c0b3SBram Moolenaar 629123c0b3SBram Moolenaar py3 del f 639123c0b3SBram Moolenaar delfunc s:foo 649123c0b3SBram Moolenaarendfunc 6514816ad6SBram Moolenaar 6614816ad6SBram Moolenaarfunc Test_skipped_python3_command_does_not_affect_pyxversion() 6714816ad6SBram Moolenaar set pyxversion=0 6814816ad6SBram Moolenaar if 0 6914816ad6SBram Moolenaar python3 import vim 7014816ad6SBram Moolenaar endif 7114816ad6SBram Moolenaar call assert_equal(0, &pyxversion) " This assertion would have failed with Vim 8.0.0251. (pyxversion was introduced in 8.0.0251.) 7214816ad6SBram Moolenaarendfunc 7363dbfd33SBram Moolenaar 7463dbfd33SBram Moolenaarfunc _SetUpHiddenBuffer() 7563dbfd33SBram Moolenaar py3 import vim 7663dbfd33SBram Moolenaar new 7763dbfd33SBram Moolenaar edit hidden 7863dbfd33SBram Moolenaar setlocal bufhidden=hide 7963dbfd33SBram Moolenaar 8063dbfd33SBram Moolenaar enew 8163dbfd33SBram Moolenaar let lnum = 0 8263dbfd33SBram Moolenaar while lnum < 10 8363dbfd33SBram Moolenaar call append( 1, string( lnum ) ) 8463dbfd33SBram Moolenaar let lnum = lnum + 1 8563dbfd33SBram Moolenaar endwhile 8663dbfd33SBram Moolenaar normal G 8763dbfd33SBram Moolenaar 8863dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 8963dbfd33SBram Moolenaarendfunc 9063dbfd33SBram Moolenaar 91bfd36036SBram Moolenaarfunc _CleanUpHiddenBuffer() 92bfd36036SBram Moolenaar bwipe! hidden 93bfd36036SBram Moolenaar bwipe! 94bfd36036SBram Moolenaarendfunc 95bfd36036SBram Moolenaar 9663dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_Clear() 9763dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 9863dbfd33SBram Moolenaar py3 vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][:] = None 9963dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 100bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 10163dbfd33SBram Moolenaarendfunc 10263dbfd33SBram Moolenaar 10363dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_List() 10463dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 10563dbfd33SBram Moolenaar py3 vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][:] = [ 'test' ] 10663dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 107bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 10863dbfd33SBram Moolenaarendfunc 10963dbfd33SBram Moolenaar 11063dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_Str() 11163dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 11263dbfd33SBram Moolenaar py3 vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][0] = 'test' 11363dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 114bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 11563dbfd33SBram Moolenaarendfunc 11663dbfd33SBram Moolenaar 11763dbfd33SBram Moolenaarfunc Test_Write_To_HiddenBuffer_Does_Not_Fix_Cursor_ClearLine() 11863dbfd33SBram Moolenaar call _SetUpHiddenBuffer() 11963dbfd33SBram Moolenaar py3 vim.buffers[ int( vim.eval( 'bufnr("hidden")' ) ) ][0] = None 12063dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 121bfd36036SBram Moolenaar call _CleanUpHiddenBuffer() 12263dbfd33SBram Moolenaarendfunc 12363dbfd33SBram Moolenaar 12463dbfd33SBram Moolenaarfunc _SetUpVisibleBuffer() 12563dbfd33SBram Moolenaar py3 import vim 12663dbfd33SBram Moolenaar new 12763dbfd33SBram Moolenaar let lnum = 0 12863dbfd33SBram Moolenaar while lnum < 10 12963dbfd33SBram Moolenaar call append( 1, string( lnum ) ) 13063dbfd33SBram Moolenaar let lnum = lnum + 1 13163dbfd33SBram Moolenaar endwhile 13263dbfd33SBram Moolenaar normal G 13363dbfd33SBram Moolenaar call assert_equal( line( '.' ), 11 ) 13463dbfd33SBram Moolenaarendfunc 13563dbfd33SBram Moolenaar 13663dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_Clear() 13763dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 13863dbfd33SBram Moolenaar 13963dbfd33SBram Moolenaar py3 vim.current.buffer[:] = None 14063dbfd33SBram Moolenaar call assert_equal( line( '.' ), 1 ) 14163dbfd33SBram Moolenaar 14263dbfd33SBram Moolenaar bwipe! 14363dbfd33SBram Moolenaarendfunc 14463dbfd33SBram Moolenaar 14563dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_List() 14663dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 14763dbfd33SBram Moolenaar 14863dbfd33SBram Moolenaar py3 vim.current.buffer[:] = [ 'test' ] 14963dbfd33SBram Moolenaar call assert_equal( line( '.' ), 1 ) 15063dbfd33SBram Moolenaar 15163dbfd33SBram Moolenaar bwipe! 15263dbfd33SBram Moolenaarendfunction 15363dbfd33SBram Moolenaar 15463dbfd33SBram Moolenaarfunc Test_Write_To_Current_Buffer_Fixes_Cursor_Str() 15563dbfd33SBram Moolenaar call _SetUpVisibleBuffer() 15663dbfd33SBram Moolenaar 15763dbfd33SBram Moolenaar py3 vim.current.buffer[-1] = None 15863dbfd33SBram Moolenaar call assert_equal( line( '.' ), 10 ) 15963dbfd33SBram Moolenaar 16063dbfd33SBram Moolenaar bwipe! 16163dbfd33SBram Moolenaarendfunction 1627f3a2849SBram Moolenaar 1637f3a2849SBram Moolenaarfunc Test_Catch_Exception_Message() 1647f3a2849SBram Moolenaar try 1657f3a2849SBram Moolenaar py3 raise RuntimeError( 'TEST' ) 1667f3a2849SBram Moolenaar catch /.*/ 1677f3a2849SBram Moolenaar call assert_match( '^Vim(.*):RuntimeError: TEST$', v:exception ) 1687f3a2849SBram Moolenaar endtry 1697f3a2849SBram Moolenaarendfunc 170556684ffSBram Moolenaar 171556684ffSBram Moolenaarfunc Test_unicode() 172556684ffSBram Moolenaar " this crashed Vim once 1732466aea5SBram Moolenaar if &tenc != '' 1742466aea5SBram Moolenaar throw "Skipped: 'termencoding' is not empty" 1752466aea5SBram Moolenaar endif 1764b7cdca2SBram Moolenaar 177556684ffSBram Moolenaar set encoding=utf32 178556684ffSBram Moolenaar py3 print('hello') 1794b7cdca2SBram Moolenaar 180955f4e6fSBram Moolenaar if !has('win32') 181d518f952SBram Moolenaar set encoding=debug 182d518f952SBram Moolenaar py3 print('hello') 1834b7cdca2SBram Moolenaar 184d518f952SBram Moolenaar set encoding=euc-tw 185d518f952SBram Moolenaar py3 print('hello') 1867fc4785eSBram Moolenaar endif 1874b7cdca2SBram Moolenaar 188556684ffSBram Moolenaar set encoding=utf8 189556684ffSBram Moolenaarendfunc 190904edabbSBram Moolenaar 191026270c0SBram Moolenaar" Test vim.eval() with various types. 192026270c0SBram Moolenaarfunc Test_python3_vim_val() 193026270c0SBram Moolenaar call assert_equal("\n8", execute('py3 print(vim.eval("3+5"))')) 194026270c0SBram Moolenaar if has('float') 195026270c0SBram Moolenaar call assert_equal("\n3.140000", execute('py3 print(vim.eval("1.01+2.13"))')) 196026270c0SBram Moolenaar call assert_equal("\n0.000000", execute('py3 print(vim.eval("0.0/(1.0/0.0)"))')) 197026270c0SBram Moolenaar call assert_equal("\n0.000000", execute('py3 print(vim.eval("0.0/(1.0/0.0)"))')) 198026270c0SBram Moolenaar call assert_equal("\n-0.000000", execute('py3 print(vim.eval("0.0/(-1.0/0.0)"))')) 199026270c0SBram Moolenaar " Commented out: output of infinity and nan depend on platforms. 200026270c0SBram Moolenaar " call assert_equal("\ninf", execute('py3 print(vim.eval("1.0/0.0"))')) 201026270c0SBram Moolenaar " call assert_equal("\n-inf", execute('py3 print(vim.eval("-1.0/0.0"))')) 202026270c0SBram Moolenaar " call assert_equal("\n-nan", execute('py3 print(vim.eval("0.0/0.0"))')) 203026270c0SBram Moolenaar endif 204026270c0SBram Moolenaar call assert_equal("\nabc", execute('py3 print(vim.eval("\"abc\""))')) 205026270c0SBram Moolenaar call assert_equal("\n['1', '2']", execute('py3 print(vim.eval("[1, 2]"))')) 206026270c0SBram Moolenaar call assert_equal("\n{'1': '2'}", execute('py3 print(vim.eval("{1:2}"))')) 207026270c0SBram Moolenaar call assert_equal("\nTrue", execute('py3 print(vim.eval("v:true"))')) 208026270c0SBram Moolenaar call assert_equal("\nFalse", execute('py3 print(vim.eval("v:false"))')) 209026270c0SBram Moolenaar call assert_equal("\nNone", execute('py3 print(vim.eval("v:null"))')) 210026270c0SBram Moolenaar call assert_equal("\nNone", execute('py3 print(vim.eval("v:none"))')) 211026270c0SBram Moolenaar call assert_equal("\nb'\\xab\\x12'", execute('py3 print(vim.eval("0zab12"))')) 212026270c0SBram Moolenaar 213026270c0SBram Moolenaar call assert_fails('py3 vim.eval("1+")', 'vim.error: invalid expression') 214026270c0SBram Moolenaarendfunc 215026270c0SBram Moolenaar 216904edabbSBram Moolenaar" Test range objects, see :help python-range 21750985eb1SBram Moolenaarfunc Test_python3_range() 218904edabbSBram Moolenaar new 219904edabbSBram Moolenaar py3 b = vim.current.buffer 220904edabbSBram Moolenaar 221904edabbSBram Moolenaar call setline(1, range(1, 6)) 222904edabbSBram Moolenaar py3 r = b.range(2, 4) 223904edabbSBram Moolenaar call assert_equal(6, py3eval('len(b)')) 224904edabbSBram Moolenaar call assert_equal(3, py3eval('len(r)')) 225904edabbSBram Moolenaar call assert_equal('3', py3eval('b[2]')) 226904edabbSBram Moolenaar call assert_equal('4', py3eval('r[2]')) 227904edabbSBram Moolenaar 228904edabbSBram Moolenaar call assert_fails('py3 r[3] = "x"', 'IndexError: line number out of range') 229904edabbSBram Moolenaar call assert_fails('py3 x = r[3]', 'IndexError: line number out of range') 230904edabbSBram Moolenaar call assert_fails('py3 r["a"] = "x"', 'TypeError') 231904edabbSBram Moolenaar call assert_fails('py3 x = r["a"]', 'TypeError') 232904edabbSBram Moolenaar 233904edabbSBram Moolenaar py3 del r[:] 234904edabbSBram Moolenaar call assert_equal(['1', '5', '6'], getline(1, '$')) 235904edabbSBram Moolenaar 236904edabbSBram Moolenaar %d | call setline(1, range(1, 6)) 237904edabbSBram Moolenaar py3 r = b.range(2, 5) 238904edabbSBram Moolenaar py3 del r[2] 239904edabbSBram Moolenaar call assert_equal(['1', '2', '3', '5', '6'], getline(1, '$')) 240904edabbSBram Moolenaar 241904edabbSBram Moolenaar %d | call setline(1, range(1, 6)) 242904edabbSBram Moolenaar py3 r = b.range(2, 4) 243904edabbSBram Moolenaar py3 vim.command("%d,%dnorm Ax" % (r.start + 1, r.end + 1)) 244904edabbSBram Moolenaar call assert_equal(['1', '2x', '3x', '4x', '5', '6'], getline(1, '$')) 245904edabbSBram Moolenaar 246904edabbSBram Moolenaar %d | call setline(1, range(1, 4)) 247904edabbSBram Moolenaar py3 r = b.range(2, 3) 248904edabbSBram Moolenaar py3 r.append(['a', 'b']) 249904edabbSBram Moolenaar call assert_equal(['1', '2', '3', 'a', 'b', '4'], getline(1, '$')) 250904edabbSBram Moolenaar py3 r.append(['c', 'd'], 0) 251904edabbSBram Moolenaar call assert_equal(['1', 'c', 'd', '2', '3', 'a', 'b', '4'], getline(1, '$')) 252904edabbSBram Moolenaar 253904edabbSBram Moolenaar %d | call setline(1, range(1, 5)) 254904edabbSBram Moolenaar py3 r = b.range(2, 4) 255904edabbSBram Moolenaar py3 r.append('a') 256904edabbSBram Moolenaar call assert_equal(['1', '2', '3', '4', 'a', '5'], getline(1, '$')) 257904edabbSBram Moolenaar py3 r.append('b', 1) 258904edabbSBram Moolenaar call assert_equal(['1', '2', 'b', '3', '4', 'a', '5'], getline(1, '$')) 259904edabbSBram Moolenaar 260904edabbSBram Moolenaar bwipe! 261904edabbSBram Moolenaarendfunc 2621363a30cSBram Moolenaar 2631363a30cSBram Moolenaar" Test for resetting options with local values to global values 2641363a30cSBram Moolenaarfunc Test_python3_opt_reset_local_to_global() 2651363a30cSBram Moolenaar new 2661363a30cSBram Moolenaar 2671363a30cSBram Moolenaar py3 curbuf = vim.current.buffer 2681363a30cSBram Moolenaar py3 curwin = vim.current.window 2691363a30cSBram Moolenaar 2701363a30cSBram Moolenaar " List of buffer-local options. Each list item has [option name, global 2711363a30cSBram Moolenaar " value, buffer-local value, buffer-local value after reset] to use in the 2721363a30cSBram Moolenaar " test. 2731363a30cSBram Moolenaar let bopts = [ 2741363a30cSBram Moolenaar \ ['autoread', 1, 0, -1], 2751363a30cSBram Moolenaar \ ['equalprg', 'geprg', 'leprg', ''], 2761363a30cSBram Moolenaar \ ['keywordprg', 'gkprg', 'lkprg', ''], 2771363a30cSBram Moolenaar \ ['path', 'gpath', 'lpath', ''], 2781363a30cSBram Moolenaar \ ['backupcopy', 'yes', 'no', ''], 2791363a30cSBram Moolenaar \ ['tags', 'gtags', 'ltags', ''], 2801363a30cSBram Moolenaar \ ['tagcase', 'ignore', 'match', ''], 2811363a30cSBram Moolenaar \ ['define', 'gdef', 'ldef', ''], 2821363a30cSBram Moolenaar \ ['include', 'ginc', 'linc', ''], 2831363a30cSBram Moolenaar \ ['dict', 'gdict', 'ldict', ''], 2841363a30cSBram Moolenaar \ ['thesaurus', 'gtsr', 'ltsr', ''], 2851363a30cSBram Moolenaar \ ['formatprg', 'gfprg', 'lfprg', ''], 2861363a30cSBram Moolenaar \ ['errorformat', '%f:%l:%m', '%s-%l-%m', ''], 2871363a30cSBram Moolenaar \ ['grepprg', 'ggprg', 'lgprg', ''], 2881363a30cSBram Moolenaar \ ['makeprg', 'gmprg', 'lmprg', ''], 2891363a30cSBram Moolenaar \ ['balloonexpr', 'gbexpr', 'lbexpr', ''], 2901363a30cSBram Moolenaar \ ['cryptmethod', 'blowfish2', 'zip', ''], 2911363a30cSBram Moolenaar \ ['lispwords', 'abc', 'xyz', ''], 2921363a30cSBram Moolenaar \ ['makeencoding', 'utf-8', 'latin1', ''], 2931363a30cSBram Moolenaar \ ['undolevels', 100, 200, -123456]] 2941363a30cSBram Moolenaar 2951363a30cSBram Moolenaar " Set the global and buffer-local option values and then clear the 2961363a30cSBram Moolenaar " buffer-local option value. 2971363a30cSBram Moolenaar for opt in bopts 2986c2b7b80SBram Moolenaar py3 << trim END 2996c2b7b80SBram Moolenaar pyopt = vim.bindeval("opt") 3006c2b7b80SBram Moolenaar vim.options[pyopt[0]] = pyopt[1] 3016c2b7b80SBram Moolenaar curbuf.options[pyopt[0]] = pyopt[2] 3026c2b7b80SBram Moolenaar END 3031363a30cSBram Moolenaar exe "call assert_equal(opt[2], &" .. opt[0] .. ")" 3041363a30cSBram Moolenaar exe "call assert_equal(opt[1], &g:" .. opt[0] .. ")" 3051363a30cSBram Moolenaar exe "call assert_equal(opt[2], &l:" .. opt[0] .. ")" 3061363a30cSBram Moolenaar py3 del curbuf.options[pyopt[0]] 3071363a30cSBram Moolenaar exe "call assert_equal(opt[1], &" .. opt[0] .. ")" 3081363a30cSBram Moolenaar exe "call assert_equal(opt[1], &g:" .. opt[0] .. ")" 3091363a30cSBram Moolenaar exe "call assert_equal(opt[3], &l:" .. opt[0] .. ")" 3101363a30cSBram Moolenaar exe "set " .. opt[0] .. "&" 3111363a30cSBram Moolenaar endfor 3121363a30cSBram Moolenaar 3131363a30cSBram Moolenaar " Set the global and window-local option values and then clear the 3141363a30cSBram Moolenaar " window-local option value. 3151363a30cSBram Moolenaar let wopts = [ 3161363a30cSBram Moolenaar \ ['scrolloff', 5, 10, -1], 3171363a30cSBram Moolenaar \ ['sidescrolloff', 6, 12, -1], 3181363a30cSBram Moolenaar \ ['statusline', '%<%f', '%<%F', '']] 3191363a30cSBram Moolenaar for opt in wopts 3206c2b7b80SBram Moolenaar py3 << trim 3216c2b7b80SBram Moolenaar pyopt = vim.bindeval("opt") 3226c2b7b80SBram Moolenaar vim.options[pyopt[0]] = pyopt[1] 3236c2b7b80SBram Moolenaar curwin.options[pyopt[0]] = pyopt[2] 3246c2b7b80SBram Moolenaar . 3251363a30cSBram Moolenaar exe "call assert_equal(opt[2], &" .. opt[0] .. ")" 3261363a30cSBram Moolenaar exe "call assert_equal(opt[1], &g:" .. opt[0] .. ")" 3271363a30cSBram Moolenaar exe "call assert_equal(opt[2], &l:" .. opt[0] .. ")" 3281363a30cSBram Moolenaar py3 del curwin.options[pyopt[0]] 3291363a30cSBram Moolenaar exe "call assert_equal(opt[1], &" .. opt[0] .. ")" 3301363a30cSBram Moolenaar exe "call assert_equal(opt[1], &g:" .. opt[0] .. ")" 3311363a30cSBram Moolenaar exe "call assert_equal(opt[3], &l:" .. opt[0] .. ")" 3321363a30cSBram Moolenaar exe "set " .. opt[0] .. "&" 3331363a30cSBram Moolenaar endfor 3341363a30cSBram Moolenaar 3351363a30cSBram Moolenaar close! 3361363a30cSBram Moolenaarendfunc 3371363a30cSBram Moolenaar 3386c2b7b80SBram Moolenaar" Test for various heredoc syntax 3396c2b7b80SBram Moolenaarfunc Test_python3_heredoc() 3406c2b7b80SBram Moolenaar python3 << END 3416c2b7b80SBram Moolenaars='A' 3426c2b7b80SBram MoolenaarEND 3436c2b7b80SBram Moolenaar python3 << 3446c2b7b80SBram Moolenaars+='B' 3456c2b7b80SBram Moolenaar. 3466c2b7b80SBram Moolenaar python3 << trim END 3476c2b7b80SBram Moolenaar s+='C' 3486c2b7b80SBram Moolenaar END 3496c2b7b80SBram Moolenaar python3 << trim 3506c2b7b80SBram Moolenaar s+='D' 3516c2b7b80SBram Moolenaar . 352*6ab0953fSBram Moolenaar python3 << trim eof 353*6ab0953fSBram Moolenaar s+='E' 354*6ab0953fSBram Moolenaar eof 355*6ab0953fSBram Moolenaar call assert_equal('ABCDE', pyxeval('s')) 3566c2b7b80SBram Moolenaarendfunc 3576c2b7b80SBram Moolenaar 3581363a30cSBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab 359