summaryrefslogtreecommitdiff
path: root/src/testdir
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-01-17 21:15:58 +0100
committerBram Moolenaar <Bram@vim.org>2016-01-17 21:15:58 +0100
commite9b892ebcd8596bf813793a1eed5a460a9495a28 (patch)
tree209bed14093b4006bc946bbffdedc15d048db039 /src/testdir
parent25b2b94ea73eff2aeef624d2ba7f59a1a265a0c1 (diff)
downloadvim-git-e9b892ebcd8596bf813793a1eed5a460a9495a28.tar.gz
patch 7.4.1125v7.4.1125
Problem: There is no perleval(). Solution: Add perleval(). (Damien)
Diffstat (limited to 'src/testdir')
-rw-r--r--src/testdir/Make_all.mak3
-rw-r--r--src/testdir/test_perl.vim74
2 files changed, 76 insertions, 1 deletions
diff --git a/src/testdir/Make_all.mak b/src/testdir/Make_all.mak
index 69fd936cd..87fcbf9db 100644
--- a/src/testdir/Make_all.mak
+++ b/src/testdir/Make_all.mak
@@ -178,7 +178,8 @@ NEW_TESTS = test_arglist.res \
test_increment.res \
test_quickfix.res \
test_viml.res \
- test_alot.res
+ test_alot.res \
+ test_perl.res
# Explicit dependencies.
diff --git a/src/testdir/test_perl.vim b/src/testdir/test_perl.vim
new file mode 100644
index 000000000..3741fc7d5
--- /dev/null
+++ b/src/testdir/test_perl.vim
@@ -0,0 +1,74 @@
+" Tests for Perl interface
+
+if !has('perl')
+ finish
+end
+
+set nocp viminfo+=nviminfo
+
+fu <SID>catch_peval(expr)
+ try
+ call perleval(a:expr)
+ catch
+ return v:exception
+ endtry
+ call assert_true(0, 'no exception for `perleval("'.a:expr.'")`')
+ return ''
+endf
+
+function Test_perleval()
+ call assert_false(perleval('undef'))
+
+ " scalar
+ call assert_equal(0, perleval('0'))
+ call assert_equal(2, perleval('2'))
+ call assert_equal(-2, perleval('-2'))
+ if has('float')
+ call assert_equal(2.5, perleval('2.5'))
+ else
+ call assert_equal(2, perleval('2.5'))
+ end
+
+ sandbox call assert_equal(2, perleval('2'))
+
+ call assert_equal('abc', perleval('"abc"'))
+ call assert_equal("abc\ndef", perleval('"abc\0def"'))
+
+ " ref
+ call assert_equal([], perleval('[]'))
+ call assert_equal(['word', 42, [42],{}], perleval('["word", 42, [42], {}]'))
+
+ call assert_equal({}, perleval('{}'))
+ call assert_equal({'foo': 'bar'}, perleval('{foo => "bar"}'))
+
+ perl our %h; our @a;
+ let a = perleval('[\(%h, %h, @a, @a)]')
+ call assert_true((a[0] is a[1]))
+ call assert_true((a[2] is a[3]))
+ perl undef %h; undef @a;
+
+ call assert_true(<SID>catch_peval('{"" , 0}') =~ 'Malformed key Dictionary')
+ call assert_true(<SID>catch_peval('{"\0" , 0}') =~ 'Malformed key Dictionary')
+ call assert_true(<SID>catch_peval('{"foo\0bar" , 0}') =~ 'Malformed key Dictionary')
+
+ call assert_equal('*VIM', perleval('"*VIM"'))
+ call assert_true(perleval('\\0') =~ 'SCALAR(0x\x\+)')
+endf
+
+function Test_perldo()
+ sp __TEST__
+ exe 'read ' g:testname
+ perldo s/perl/vieux_chameau/g
+ 1
+ call assert_false(search('\Cperl'))
+ bw!
+endf
+
+function Test_VIM_package()
+ perl VIM::DoCommand('let l:var = "foo"')
+ call assert_equal(l:var, 'foo')
+
+ set noet
+ perl VIM::SetOption('et')
+ call assert_true(&et)
+endf