1 package TestPodIncPlainText;
8 my $THISDIR = abs_path(dirname $0);
9 unshift @INC, $THISDIR;
12 my $PARENTDIR = dirname $THISDIR;
13 push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
21 #use Cwd qw(abs_path);
23 use vars qw($MYPKG @EXPORT @ISA);
24 $MYPKG = eval { (caller)[0] };
25 @EXPORT = qw(&testpodplaintext);
27 if ( $] >= 5.005_58 ) {
29 @ISA = qw( Pod::Text );
32 require Pod::PlainText;
33 @ISA = qw( Pod::PlainText );
35 require VMS::Filespec if $^O eq 'VMS';
38 ## Hardcode settings for TERMCAP and COLUMNS so we can try to get
39 ## reproducible results between environments
40 @ENV{qw(TERMCAP COLUMNS)} = ('co=76:do=^J', 76);
42 sub catfile(@) { File::Spec->catfile(@_); }
44 my $INSTDIR = abs_path(dirname $0);
45 if ($^O eq 'VMS') { # clean up directory spec
46 $INSTDIR = VMS::Filespec::unixpath($INSTDIR);
48 $INSTDIR =~ s#/000000/#/#;
50 $INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 'pod');
51 $INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 't');
52 my @PODINCDIRS = ( catfile($INSTDIR, 'lib', 'Pod'),
53 catfile($INSTDIR, 'scripts'),
54 catfile($INSTDIR, 'pod'),
55 catfile($INSTDIR, 't', 'pod')
57 print "PODINCDIRS = ",join(', ',@PODINCDIRS),"\n";
59 ## Find the path to the file to =include
64 ## See if its already found w/out any "searching;
65 return $incname if (-r $incname);
67 ## Need to search for it. Look in the following directories ...
68 ## 1. the directory containing this pod file
69 my $thispoddir = dirname $self->input_file;
70 ## 2. the parent directory of the above
71 my $parentdir = dirname $thispoddir;
72 my @podincdirs = ($thispoddir, $parentdir, @PODINCDIRS);
75 my $incfile = catfile($_, $incname);
76 return $incfile if (-r $incfile);
78 warn("*** Can't find =include file $incname in @podincdirs\n");
84 my ($cmd, $text, $line_num, $pod_para) = @_;
85 $cmd = '' unless (defined $cmd);
86 local $_ = $text || '';
87 my $out_fh = $self->output_handle;
89 ## Defer to the superclass for everything except '=include'
90 return $self->SUPER::command(@_) unless ($cmd eq "include");
92 ## We have an '=include' command
93 my $incdebug = 1; ## debugging
96 warn("*** No filename given for '=include'\n");
99 my $incfile = $self->findinclude(shift @incargs) or return;
100 my $incbase = basename $incfile;
101 print $out_fh "###### begin =include $incbase #####\n" if ($incdebug);
102 $self->parse_from_file( {-cutting => 1}, $incfile );
103 print $out_fh "###### end =include $incbase #####\n" if ($incdebug);
107 $_[0]->{_INFILE} = VMS::Filespec::unixify($_[0]->{_INFILE}) if $^O eq 'VMS';
110 sub podinc2plaintext( $ $ ) {
111 my ($infile, $outfile) = @_;
113 my $text_parser = $MYPKG->new(quotes => "`'");
114 $text_parser->parse_from_file($infile, $outfile);
117 sub testpodinc2plaintext( @ ) {
119 my $infile = $args{'-In'} || croak "No input file given!";
120 my $outfile = $args{'-Out'} || croak "No output file given!";
121 my $cmpfile = $args{'-Cmp'} || croak "No compare-result file given!";
124 my $testname = basename $cmpfile, '.t', '.xr';
126 unless (-e $cmpfile) {
127 my $msg = "*** Can't find comparison file $cmpfile for testing $infile";
132 print "# Running testpodinc2plaintext for '$testname'...\n";
133 ## Compare the output against the expected result
134 podinc2plaintext($infile, $outfile);
135 if ( testcmp($outfile, $cmpfile) ) {
136 $different = "$outfile is different from $cmpfile";
144 sub testpodplaintext( @ ) {
145 my %opts = (ref $_[0] eq 'HASH') ? %{shift()} : ();
147 my ($testname, $testdir) = ("", "");
148 my ($podfile, $cmpfile) = ("", "");
149 my ($outfile, $errfile) = ("", "");
154 print "1..", scalar @testpods, "\n" unless ($opts{'-xrgen'});
156 for $podfile (@testpods) {
157 ($testname, $_) = fileparse($podfile);
159 $testname =~ s/\..*$//;
160 $cmpfile = $testdir . $testname . '.xr';
161 $outfile = $testdir . $testname . '.OUT';
163 if ($opts{'-xrgen'}) {
164 if ($opts{'-force'} or ! -e $cmpfile) {
165 ## Create the comparison file
166 print "# Creating expected result for \"$testname\"" .
167 " pod2plaintext test ...\n";
168 podinc2plaintext($podfile, $cmpfile);
171 print "# File $cmpfile already exists" .
172 " (use '-force' to regenerate it).\n";
177 my $failmsg = testpodinc2plaintext
183 print "#\tFAILED. ($failmsg)\n";
184 print "not ok ", $failed+$passes, "\n";
189 print "#\tPASSED.\n";
190 print "ok ", $failed+$passes, "\n";