#!/usr/bin/perl -w
use strict;
use Test::More tests => 22;
use Test::Exception;
use Data::Dumper;
use File::Basename;
use File::Spec::Functions;
use lib "../lib";
use_ok("Devel::PerlySense");
use_ok("Devel::PerlySense::Document");
use_ok("Devel::PerlySense::Document::Meta");
BEGIN { -d "t" and chdir("t"); }
ok(my $oDocument = Devel::PerlySense::Document->new(oPerlySense => Devel::PerlySense->new()), "new ok");
my $dirData = "data/simple-lib";
my $fileOrigin = "$dirData/lib/Win32/Word/Writer.pm";
ok($oDocument->parse(file => $fileOrigin), "Parsed file ok");
my $oMeta = $oDocument->oMeta;
is(scalar(@{$oMeta->raLocationSub}), 33, " Correct number of pod chunks found");
my $oLocation;
ok($oLocation = $oMeta->raLocationSub->[3], "Got a POD chunk (head1 inside pod)");
is($oLocation->row, 314, " row");
is($oLocation->col, 1, " col");
is($oLocation->rhProperty->{nameSub}, "SaveAs", " nameSub");
is($oLocation->rhProperty->{namePackage}, "Win32::Word::Writer", " namePackage");
is($oLocation->rhProperty->{source}, q'sub SaveAs {
my $self = shift;
my ($file, %hOpt) = @_;
my $format = $hOpt{format} || "Document";
defined(my $formatConst = $self->rhConst->{"wdFormat$format"}) or croak("Invalid format ($format), use Document, DOSText, DOSTextLineBreaks, EncodedText, HTML, RTF, Template, Text, TextLineBreaks, UnicodeText");
$file = File::Spec->rel2abs($file);
eval { $self->oDocument->SaveAs({ FileName => $file, FileFormat => $formatConst }) };
if($@) {
my $err = $@;
if($err =~ /OLE exception from "Microsoft Word":\n\n(.+?)\nWin32::OLE/si) {
die("Could not save file ($file): $1\n");
}
die($err);
}
return(1);
}', " sourceSub");
is($oLocation->rhProperty->{oLocationEnd}->row, 333, " end row");
is($oLocation->rhProperty->{oLocationEnd}->col, 2, " end col");
ok($oLocation = $oMeta->raLocationSub->[32], "Got a POD chunk (head1 inside pod)");
is($oLocation->row, 1031, " row");
is($oLocation->col, 1, " col");
is($oLocation->rhProperty->{nameSub}, "DESTROY", " nameSub");
is($oLocation->rhProperty->{namePackage}, "Win32::Word::Writer", " namePackage");
is($oLocation->rhProperty->{source}, q/sub DESTROY {
my $self = shift;
$self->oTable(undef);
$self->oWord->{DisplayAlerts} = $rhConst->{wdAlertsNone};
$self->MarkDocumentAsSaved(); ##workaround: wdAlertsNone doesn't work in Word2000 so we insist that the document is already saved to avoid the dialog box
$self->oWord->Quit();
$self->oWord(undef); #This destroys the OLE object
#Save after quitting to keep Word from locking the file
if($self->fileTemp and -e $self->fileTemp) {
unlink($self->fileTemp) or ($^W and warn("Could not delete temp file (" . $self->fileTemp . "): $!\n"));
}
}/, " sourceSub");
is($oLocation->rhProperty->{oLocationEnd}->row, 1045, " end row");
is($oLocation->rhProperty->{oLocationEnd}->col, 2, " end col");
#print Dumper($oMeta);
__END__