Mercurial > vim
view src/testdir/test_pyx3.vim @ 36484:a0b0c1e07064 draft v9.1.0844
patch 9.1.0844: if_python: no way to pass local vars to python
Commit: https://github.com/vim/vim/commit/ea19e7856b6c7850eab7ce74aa209e09e2c6eae3
Author: Ben Jackson <puremourning@gmail.com>
Date: Wed Nov 6 21:50:05 2024 +0100
patch 9.1.0844: if_python: no way to pass local vars to python
Problem: if_python: no way to pass local vars to python
Solution: Add locals argument to py3eval(), pyeval() and pyxeval()
(Ben Jackson)
fixes: #8573
closes: #10594
Signed-off-by: Ben Jackson <puremourning@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 06 Nov 2024 22:00:04 +0100 |
parents | 5f9c2c7d3d73 |
children |
line wrap: on
line source
" Test for pyx* commands and functions with Python 3. set pyx=3 source check.vim CheckFeature python3 let s:py2pattern = '^2\.[0-7]\.\d\+' let s:py3pattern = '^3\.\d\+\.\d\+' func Test_has_pythonx() call assert_true(has('pythonx')) endfunc func Test_pyx() redir => var pyx << trim EOF import sys print(sys.version) EOF redir END call assert_match(s:py3pattern, split(var)[0]) endfunc func Test_pyxdo() pyx import sys enew pyxdo return sys.version.split("\n")[0] call assert_match(s:py3pattern, split(getline('.'))[0]) endfunc func Test_pyxeval() pyx import sys call assert_match(s:py3pattern, split(pyxeval('sys.version'))[0]) endfunc " Test for pyxeval with locals func Test_python_pyeval_locals() let str = 'a string' let num = 0xbadb33f let d = {'a': 1, 'b': 2, 'c': str} let l = [ str, num, d ] let locals = #{ \ s: str, \ n: num, \ d: d, \ l: l, \ } " check basics call assert_equal('a string', pyxeval('s', locals)) call assert_equal(0xbadb33f, pyxeval('n', locals)) call assert_equal(d, pyxeval('d', locals)) call assert_equal(l, pyxeval('l', locals)) py3 << trim EOF def __UpdateDict(d, upd): d.update(upd) return d def __ExtendList(l, *args): l.extend(*args) return l EOF " check assign to dict member works like bindeval call assert_equal(3, pyxeval('__UpdateDict( d, {"c": 3} )["c"]', locals)) call assert_equal(3, d['c']) " check append lo list call assert_equal(4, pyxeval('len(__ExtendList(l, ["new item"]))', locals)) call assert_equal("new item", l[-1]) " check calling a function let StrLen = function('strlen') call assert_equal(3, pyxeval('f("abc")', {'f': StrLen})) endfunc func Test_pyxfile() " No special comments nor shebangs redir => var pyxfile pyxfile/pyx.py redir END call assert_match(s:py3pattern, split(var)[0]) " Python 3 special comment redir => var pyxfile pyxfile/py3_magic.py redir END call assert_match(s:py3pattern, split(var)[0]) " Python 3 shebang redir => var pyxfile pyxfile/py3_shebang.py redir END call assert_match(s:py3pattern, split(var)[0]) if has('python') " Python 2 special comment redir => var pyxfile pyxfile/py2_magic.py redir END call assert_match(s:py2pattern, split(var)[0]) " Python 2 shebang redir => var pyxfile pyxfile/py2_shebang.py redir END call assert_match(s:py2pattern, split(var)[0]) endif endfunc func Test_Catch_Exception_Message() try pyx raise RuntimeError( 'TEST' ) catch /.*/ call assert_match( '^Vim(.*):RuntimeError: TEST$', v:exception ) endtry endfunc " Test for various heredoc syntaxes func Test_pyx3_heredoc() pyx << END result='A' END pyx << result+='B' . pyx << trim END result+='C' END pyx << trim result+='D' . pyx << trim eof result+='E' eof call assert_equal('ABCDE', pyxeval('result')) endfunc " vim: shiftwidth=2 sts=2 expandtab