xref: /vim-8.2.3635/src/testdir/test_perl.vim (revision cb03397a)
1" Tests for Perl interface
2
3if !has('perl')
4  finish
5end
6
7func 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
28
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 ''
37endfunc
38
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\+)')
76endfunc
77
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!
85endfunc
86
87function Test_VIM_package()
88  perl VIM::DoCommand('let l:var = "foo"')
89  call assert_equal(l:var, 'foo')
90
91  set noet
92  perl VIM::SetOption('et')
93  call assert_true(&et)
94endfunc
95
96function Test_stdio()
97  redir =>l:out
98  perl <<EOF
99    VIM::Msg("&VIM::Msg");
100    print "STDOUT";
101    print STDERR "STDERR";
102EOF
103  redir END
104  call assert_equal(['&VIM::Msg', 'STDOUT', 'STDERR'], split(l:out, "\n"))
105endfunc
106
107function Test_SvREFCNT()
108  new t
109  perl <<--perl
110  my ($b, $w);
111  $b = $curbuf for 0 .. 10;
112  $w = $curwin for 0 .. 10;
113  VIM::DoCommand('bw! t');
114  if (exists &Internals::SvREFCNT) {
115      my $cb = Internals::SvREFCNT($$b);
116      my $cw = Internals::SvREFCNT($$w);
117      VIM::Eval("assert_equal(2, $cb)");
118      VIM::Eval("assert_equal(2, $cw)");
119  }
120  VIM::Eval("assert_false($$b)");
121  VIM::Eval("assert_false($$w)");
122--perl
123endfunc
124