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 29func Test_buffer_Delete() 30 new 31 call setline(1, ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) 32 perl $curbuf->Delete(7) 33 perl $curbuf->Delete(2, 5) 34 perl $curbuf->Delete(10) 35 call assert_equal(['a', 'f', 'h'], getline(1, '$')) 36 bwipe! 37endfunc 38 39func Test_buffer_Append() 40 new 41 perl $curbuf->Append(1, '1') 42 perl $curbuf->Append(2, '2', '3', '4') 43 perl @l = ('5' ..'7') 44 perl $curbuf->Append(0, @l) 45 call assert_equal(['5', '6', '7', '', '1', '2', '3', '4'], getline(1, '$')) 46 bwipe! 47endfunc 48 49func Test_buffer_Set() 50 new 51 call setline(1, ['1', '2', '3', '4', '5']) 52 perl $curbuf->Set(2, 'a', 'b', 'c') 53 perl $curbuf->Set(4, 'A', 'B', 'C') 54 call assert_equal(['1', 'a', 'b', 'A', 'B'], getline(1, '$')) 55 bwipe! 56endfunc 57 58func Test_buffer_Get() 59 new 60 call setline(1, ['1', '2', '3', '4']) 61 call assert_equal('2:3', perleval('join(":", $curbuf->Get(2, 3))')) 62 bwipe! 63endfunc 64 65func Test_buffer_Count() 66 new 67 call setline(1, ['a', 'b', 'c']) 68 call assert_equal(3, perleval('$curbuf->Count()')) 69 bwipe! 70endfunc 71 72func Test_buffer_Name() 73 new 74 call assert_equal('', perleval('$curbuf->Name()')) 75 bwipe! 76 new Xfoo 77 call assert_equal('Xfoo', perleval('$curbuf->Name()')) 78 bwipe! 79endfunc 80 81func Test_buffer_Number() 82 call assert_equal(bufnr('%'), perleval('$curbuf->Number()')) 83endfunc 84 85func Test_window_Cursor() 86 new 87 call setline(1, ['line1', 'line2']) 88 perl $curwin->Cursor(2, 3) 89 call assert_equal('2:3', perleval('join(":", $curwin->Cursor())')) 90 " Col is numbered from 0 in Perl, and from 1 in Vim script. 91 call assert_equal([0, 2, 4, 0], getpos('.')) 92 bwipe! 93endfunc 94 95func Test_window_SetHeight() 96 new 97 perl $curwin->SetHeight(2) 98 call assert_equal(2, winheight(0)) 99 bwipe! 100endfunc 101 102func Test_VIM_Windows() 103 new 104 " VIM::Windows() without argument in scalar and list context. 105 perl $winnr = VIM::Windows() 106 perl @winlist = VIM::Windows() 107 perl $curbuf->Append(0, $winnr, scalar(@winlist)) 108 call assert_equal(['2', '2', ''], getline(1, '$')) 109 110 " VIM::Windows() with window number argument. 111 perl VIM::Windows(VIM::Eval('winnr()'))->Buffer()->Set(1, 'bar') 112 call assert_equal('bar', getline(1)) 113 bwipe! 114endfunc 115 116func Test_VIM_Buffers() 117 new Xbar 118 " VIM::Buffers() without argument in scalar and list context. 119 perl $nbuf = VIM::Buffers() 120 perl @buflist = VIM::Buffers() 121 122 " VIM::Buffers() with argument. 123 perl $mybuf = (VIM::Buffers('Xbar'))[0] 124 perl $mybuf->Append(0, $nbuf, scalar(@buflist)) 125 call assert_equal(['2', '2', ''], getline(1, '$')) 126 bwipe! 127endfunc 128 129func <SID>catch_peval(expr) 130 try 131 call perleval(a:expr) 132 catch 133 return v:exception 134 endtry 135 call assert_report('no exception for `perleval("'.a:expr.'")`') 136 return '' 137endfunc 138 139func Test_perleval() 140 call assert_false(perleval('undef')) 141 142 " scalar 143 call assert_equal(0, perleval('0')) 144 call assert_equal(2, perleval('2')) 145 call assert_equal(-2, perleval('-2')) 146 if has('float') 147 call assert_equal(2.5, perleval('2.5')) 148 else 149 call assert_equal(2, perleval('2.5')) 150 end 151 152 sandbox call assert_equal(2, perleval('2')) 153 154 call assert_equal('abc', perleval('"abc"')) 155 call assert_equal("abc\ndef", perleval('"abc\0def"')) 156 157 " ref 158 call assert_equal([], perleval('[]')) 159 call assert_equal(['word', 42, [42],{}], perleval('["word", 42, [42], {}]')) 160 161 call assert_equal({}, perleval('{}')) 162 call assert_equal({'foo': 'bar'}, perleval('{foo => "bar"}')) 163 164 perl our %h; our @a; 165 let a = perleval('[\(%h, %h, @a, @a)]') 166 call assert_true((a[0] is a[1])) 167 call assert_true((a[2] is a[3])) 168 perl undef %h; undef @a; 169 170 call assert_true(<SID>catch_peval('{"" , 0}') =~ 'Malformed key Dictionary') 171 call assert_true(<SID>catch_peval('{"\0" , 0}') =~ 'Malformed key Dictionary') 172 call assert_true(<SID>catch_peval('{"foo\0bar" , 0}') =~ 'Malformed key Dictionary') 173 174 call assert_equal('*VIM', perleval('"*VIM"')) 175 call assert_true(perleval('\\0') =~ 'SCALAR(0x\x\+)') 176endfunc 177 178func Test_perldo() 179 sp __TEST__ 180 exe 'read ' g:testname 181 perldo s/perl/vieux_chameau/g 182 1 183 call assert_false(search('\Cperl')) 184 bw! 185 186 " Check deleting lines does not trigger ml_get error. 187 new 188 call setline(1, ['one', 'two', 'three']) 189 perldo VIM::DoCommand("%d_") 190 bwipe! 191 192 " Check switching to another buffer does not trigger ml_get error. 193 new 194 let wincount = winnr('$') 195 call setline(1, ['one', 'two', 'three']) 196 perldo VIM::DoCommand("new") 197 call assert_equal(wincount + 1, winnr('$')) 198 bwipe! 199 bwipe! 200endfunc 201 202func Test_VIM_package() 203 perl VIM::DoCommand('let l:var = "foo"') 204 call assert_equal(l:var, 'foo') 205 206 set noet 207 perl VIM::SetOption('et') 208 call assert_true(&et) 209endfunc 210 211func Test_stdio() 212 redir =>l:out 213 perl <<EOF 214 VIM::Msg("&VIM::Msg"); 215 print "STDOUT"; 216 print STDERR "STDERR"; 217EOF 218 redir END 219 call assert_equal(['&VIM::Msg', 'STDOUT', 'STDERR'], split(l:out, "\n")) 220endfunc 221 222func Test_SvREFCNT() 223 new t 224 perl <<--perl 225 my ($b, $w); 226 $b = $curbuf for 0 .. 10; 227 $w = $curwin for 0 .. 10; 228 VIM::DoCommand('bw! t'); 229 if (exists &Internals::SvREFCNT) { 230 my $cb = Internals::SvREFCNT($$b); 231 my $cw = Internals::SvREFCNT($$w); 232 VIM::Eval("assert_equal(2, $cb)"); 233 VIM::Eval("assert_equal(2, $cw)"); 234 } 235 VIM::Eval("assert_false($$b)"); 236 VIM::Eval("assert_false($$w)"); 237--perl 238endfunc 239