diff options
Diffstat (limited to 'mnv/src/testdir/test_pyx3.mnv')
| -rw-r--r-- | mnv/src/testdir/test_pyx3.mnv | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/mnv/src/testdir/test_pyx3.mnv b/mnv/src/testdir/test_pyx3.mnv new file mode 100644 index 0000000000..ffd0508aa2 --- /dev/null +++ b/mnv/src/testdir/test_pyx3.mnv @@ -0,0 +1,147 @@ +" Test for pyx* commands and functions with Python 3. + +set pyx=3 +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( '^MNV(.*):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 + pyx << trimm +result+='F' +trimm + call assert_equal('ABCDEF', pyxeval('result')) +endfunc + +" mnv: shiftwidth=2 sts=2 expandtab |
