blob: 40b359afab0c44b474339600dbf7a9ccf6e03384 [file] [log] [blame] [edit]
" Test for pyx* commands and functions with Python 2.
set pyx=2
CheckFeature python
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:py2pattern, split(var)[0])
endfunc
func Test_pyxdo()
pyx import sys
enew
pyxdo return sys.version.split("\n")[0]
call assert_match(s:py2pattern, split(getline('.'))[0])
endfunc
func Test_pyxeval()
pyx import sys
call assert_match(s:py2pattern, split('sys.version'->pyxeval())[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))
py << 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:py2pattern, split(var)[0])
" 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])
if has('python3')
" 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])
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_pyx2_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
pyx << trimm
result+='F'
trimm
call assert_equal('ABCDEF', pyxeval('result'))
endfunc
" vim: shiftwidth=2 sts=2 expandtab