blob: f2b991aa7b5d8e0097504c2e8efc013b479bd79b [file] [log] [blame]
Bram Moolenaare9b892e2016-01-17 21:15:58 +01001" Tests for Perl interface
2
3if !has('perl')
4 finish
5end
6
Bram Moolenaar021b5932016-01-17 22:05:48 +01007func Test_change_buffer()
8 call setline(line('$'), ['1 line 1'])
9 perl VIM::DoCommand("normal /^1\n")
10 perl $curline = VIM::Eval("line('.')")
11 perl $curbuf->Set($curline, "1 changed line 1")
12 call assert_equal('1 changed line 1', getline('$'))
13endfunc
14
15func Test_evaluate_list()
16 call setline(line('$'), ['2 line 2'])
17 perl VIM::DoCommand("normal /^2\n")
18 perl $curline = VIM::Eval("line('.')")
19 let l = ["abc", "def"]
20 perl << EOF
21 $l = VIM::Eval("l");
22 $curbuf->Append($curline, $l);
23EOF
24 normal j
25 .perldo s|\n|/|g
26 call assert_equal('abc/def/', getline('$'))
27endfunc
Bram Moolenaare9b892e2016-01-17 21:15:58 +010028
29fu <SID>catch_peval(expr)
30 try
31 call perleval(a:expr)
32 catch
33 return v:exception
34 endtry
35 call assert_true(0, 'no exception for `perleval("'.a:expr.'")`')
36 return ''
Bram Moolenaar95509e12016-04-15 21:16:11 +020037endfunc
Bram Moolenaare9b892e2016-01-17 21:15:58 +010038
39function Test_perleval()
40 call assert_false(perleval('undef'))
41
42 " scalar
43 call assert_equal(0, perleval('0'))
44 call assert_equal(2, perleval('2'))
45 call assert_equal(-2, perleval('-2'))
46 if has('float')
47 call assert_equal(2.5, perleval('2.5'))
48 else
49 call assert_equal(2, perleval('2.5'))
50 end
51
52 sandbox call assert_equal(2, perleval('2'))
53
54 call assert_equal('abc', perleval('"abc"'))
55 call assert_equal("abc\ndef", perleval('"abc\0def"'))
56
57 " ref
58 call assert_equal([], perleval('[]'))
59 call assert_equal(['word', 42, [42],{}], perleval('["word", 42, [42], {}]'))
60
61 call assert_equal({}, perleval('{}'))
62 call assert_equal({'foo': 'bar'}, perleval('{foo => "bar"}'))
63
64 perl our %h; our @a;
65 let a = perleval('[\(%h, %h, @a, @a)]')
66 call assert_true((a[0] is a[1]))
67 call assert_true((a[2] is a[3]))
68 perl undef %h; undef @a;
69
70 call assert_true(<SID>catch_peval('{"" , 0}') =~ 'Malformed key Dictionary')
71 call assert_true(<SID>catch_peval('{"\0" , 0}') =~ 'Malformed key Dictionary')
72 call assert_true(<SID>catch_peval('{"foo\0bar" , 0}') =~ 'Malformed key Dictionary')
73
74 call assert_equal('*VIM', perleval('"*VIM"'))
75 call assert_true(perleval('\\0') =~ 'SCALAR(0x\x\+)')
Bram Moolenaar95509e12016-04-15 21:16:11 +020076endfunc
Bram Moolenaare9b892e2016-01-17 21:15:58 +010077
78function Test_perldo()
79 sp __TEST__
80 exe 'read ' g:testname
81 perldo s/perl/vieux_chameau/g
82 1
83 call assert_false(search('\Cperl'))
84 bw!
Bram Moolenaar85b57432017-01-29 22:59:12 +010085
86 " Check deleting lines does not trigger ml_get error.
87 new
88 call setline(1, ['one', 'two', 'three'])
89 perldo VIM::DoCommand("%d_")
90 bwipe!
91
92 " Check switching to another buffer does not trigger ml_get error.
93 new
94 let wincount = winnr('$')
95 call setline(1, ['one', 'two', 'three'])
96 perldo VIM::DoCommand("new")
97 call assert_equal(wincount + 1, winnr('$'))
98 bwipe!
99 bwipe!
Bram Moolenaar95509e12016-04-15 21:16:11 +0200100endfunc
Bram Moolenaare9b892e2016-01-17 21:15:58 +0100101
102function Test_VIM_package()
103 perl VIM::DoCommand('let l:var = "foo"')
104 call assert_equal(l:var, 'foo')
105
106 set noet
107 perl VIM::SetOption('et')
108 call assert_true(&et)
Bram Moolenaar95509e12016-04-15 21:16:11 +0200109endfunc
Bram Moolenaar6244a0f2016-04-14 14:09:25 +0200110
111function Test_stdio()
112 redir =>l:out
113 perl <<EOF
114 VIM::Msg("&VIM::Msg");
115 print "STDOUT";
116 print STDERR "STDERR";
117EOF
118 redir END
119 call assert_equal(['&VIM::Msg', 'STDOUT', 'STDERR'], split(l:out, "\n"))
Bram Moolenaar95509e12016-04-15 21:16:11 +0200120endfunc
121
122function Test_SvREFCNT()
123 new t
124 perl <<--perl
125 my ($b, $w);
126 $b = $curbuf for 0 .. 10;
127 $w = $curwin for 0 .. 10;
128 VIM::DoCommand('bw! t');
129 if (exists &Internals::SvREFCNT) {
130 my $cb = Internals::SvREFCNT($$b);
131 my $cw = Internals::SvREFCNT($$w);
132 VIM::Eval("assert_equal(2, $cb)");
133 VIM::Eval("assert_equal(2, $cw)");
134 }
135 VIM::Eval("assert_false($$b)");
136 VIM::Eval("assert_false($$w)");
137--perl
138endfunc