| 1 | package TestPodIncPlainText;
|
|---|
| 2 |
|
|---|
| 3 | BEGIN {
|
|---|
| 4 | use File::Basename;
|
|---|
| 5 | use File::Spec;
|
|---|
| 6 | use Cwd qw(abs_path);
|
|---|
| 7 | push @INC, '..';
|
|---|
| 8 | my $THISDIR = abs_path(dirname $0);
|
|---|
| 9 | unshift @INC, $THISDIR;
|
|---|
| 10 | require "testcmp.pl";
|
|---|
| 11 | import TestCompare;
|
|---|
| 12 | my $PARENTDIR = dirname $THISDIR;
|
|---|
| 13 | push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR);
|
|---|
| 14 | }
|
|---|
| 15 |
|
|---|
| 16 | #use strict;
|
|---|
| 17 | #use diagnostics;
|
|---|
| 18 | use Carp;
|
|---|
| 19 | use Exporter;
|
|---|
| 20 | #use File::Compare;
|
|---|
| 21 | #use Cwd qw(abs_path);
|
|---|
| 22 |
|
|---|
| 23 | use vars qw($MYPKG @EXPORT @ISA);
|
|---|
| 24 | $MYPKG = eval { (caller)[0] };
|
|---|
| 25 | @EXPORT = qw(&testpodplaintext);
|
|---|
| 26 | BEGIN {
|
|---|
| 27 | require Pod::PlainText;
|
|---|
| 28 | @ISA = qw( Pod::PlainText );
|
|---|
| 29 | require VMS::Filespec if $^O eq 'VMS';
|
|---|
| 30 | }
|
|---|
| 31 |
|
|---|
| 32 | ## Hardcode settings for TERMCAP and COLUMNS so we can try to get
|
|---|
| 33 | ## reproducible results between environments
|
|---|
| 34 | @ENV{qw(TERMCAP COLUMNS)} = ('co=76:do=^J', 76);
|
|---|
| 35 |
|
|---|
| 36 | sub catfile(@) { File::Spec->catfile(@_); }
|
|---|
| 37 |
|
|---|
| 38 | my $INSTDIR = abs_path(dirname $0);
|
|---|
| 39 | $INSTDIR = VMS::Filespec::unixpath($INSTDIR) if $^O eq 'VMS';
|
|---|
| 40 | $INSTDIR =~ s#/$## if $^O eq 'VMS';
|
|---|
| 41 | $INSTDIR =~ s#:$## if $^O eq 'MacOS';
|
|---|
| 42 | $INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 'pod');
|
|---|
| 43 | $INSTDIR =~ s#:$## if $^O eq 'MacOS';
|
|---|
| 44 | $INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 't');
|
|---|
| 45 | my @PODINCDIRS = ( catfile($INSTDIR, 'lib', 'Pod'),
|
|---|
| 46 | catfile($INSTDIR, 'scripts'),
|
|---|
| 47 | catfile($INSTDIR, 'pod'),
|
|---|
| 48 | catfile($INSTDIR, 't', 'pod')
|
|---|
| 49 | );
|
|---|
| 50 |
|
|---|
| 51 | ## Find the path to the file to =include
|
|---|
| 52 | sub findinclude {
|
|---|
| 53 | my $self = shift;
|
|---|
| 54 | my $incname = shift;
|
|---|
| 55 |
|
|---|
| 56 | ## See if its already found w/out any "searching;
|
|---|
| 57 | return $incname if (-r $incname);
|
|---|
| 58 |
|
|---|
| 59 | ## Need to search for it. Look in the following directories ...
|
|---|
| 60 | ## 1. the directory containing this pod file
|
|---|
| 61 | my $thispoddir = dirname $self->input_file;
|
|---|
| 62 | ## 2. the parent directory of the above
|
|---|
| 63 | my $parentdir = dirname $thispoddir;
|
|---|
| 64 | my @podincdirs = ($thispoddir, $parentdir, @PODINCDIRS);
|
|---|
| 65 |
|
|---|
| 66 | for (@podincdirs) {
|
|---|
| 67 | my $incfile = catfile($_, $incname);
|
|---|
| 68 | return $incfile if (-r $incfile);
|
|---|
| 69 | }
|
|---|
| 70 | warn("*** Can't find =include file $incname in @podincdirs\n");
|
|---|
| 71 | return "";
|
|---|
| 72 | }
|
|---|
| 73 |
|
|---|
| 74 | sub command {
|
|---|
| 75 | my $self = shift;
|
|---|
| 76 | my ($cmd, $text, $line_num, $pod_para) = @_;
|
|---|
| 77 | $cmd = '' unless (defined $cmd);
|
|---|
| 78 | local $_ = $text || '';
|
|---|
| 79 | my $out_fh = $self->output_handle;
|
|---|
| 80 |
|
|---|
| 81 | ## Defer to the superclass for everything except '=include'
|
|---|
| 82 | return $self->SUPER::command(@_) unless ($cmd eq "include");
|
|---|
| 83 |
|
|---|
| 84 | ## We have an '=include' command
|
|---|
| 85 | my $incdebug = 1; ## debugging
|
|---|
| 86 | my @incargs = split;
|
|---|
| 87 | if (@incargs == 0) {
|
|---|
| 88 | warn("*** No filename given for '=include'\n");
|
|---|
| 89 | return;
|
|---|
| 90 | }
|
|---|
| 91 | my $incfile = $self->findinclude(shift @incargs) or return;
|
|---|
| 92 | my $incbase = basename $incfile;
|
|---|
| 93 | print $out_fh "###### begin =include $incbase #####\n" if ($incdebug);
|
|---|
| 94 | $self->parse_from_file( {-cutting => 1}, $incfile );
|
|---|
| 95 | print $out_fh "###### end =include $incbase #####\n" if ($incdebug);
|
|---|
| 96 | }
|
|---|
| 97 |
|
|---|
| 98 | sub begin_input {
|
|---|
| 99 | $_[0]->{_INFILE} = VMS::Filespec::unixify($_[0]->{_INFILE}) if $^O eq 'VMS';
|
|---|
| 100 | }
|
|---|
| 101 |
|
|---|
| 102 | sub podinc2plaintext( $ $ ) {
|
|---|
| 103 | my ($infile, $outfile) = @_;
|
|---|
| 104 | local $_;
|
|---|
| 105 | my $text_parser = $MYPKG->new;
|
|---|
| 106 | $text_parser->parse_from_file($infile, $outfile);
|
|---|
| 107 | }
|
|---|
| 108 |
|
|---|
| 109 | sub testpodinc2plaintext( @ ) {
|
|---|
| 110 | my %args = @_;
|
|---|
| 111 | my $infile = $args{'-In'} || croak "No input file given!";
|
|---|
| 112 | my $outfile = $args{'-Out'} || croak "No output file given!";
|
|---|
| 113 | my $cmpfile = $args{'-Cmp'} || croak "No compare-result file given!";
|
|---|
| 114 |
|
|---|
| 115 | my $different = '';
|
|---|
| 116 | my $testname = basename $cmpfile, '.t', '.xr';
|
|---|
| 117 |
|
|---|
| 118 | unless (-e $cmpfile) {
|
|---|
| 119 | my $msg = "*** Can't find comparison file $cmpfile for testing $infile";
|
|---|
| 120 | warn "$msg\n";
|
|---|
| 121 | return $msg;
|
|---|
| 122 | }
|
|---|
| 123 |
|
|---|
| 124 | print "# Running testpodinc2plaintext for '$testname'...\n";
|
|---|
| 125 | ## Compare the output against the expected result
|
|---|
| 126 | podinc2plaintext($infile, $outfile);
|
|---|
| 127 | if ( testcmp($outfile, $cmpfile) ) {
|
|---|
| 128 | $different = "$outfile is different from $cmpfile";
|
|---|
| 129 | }
|
|---|
| 130 | else {
|
|---|
| 131 | unlink($outfile);
|
|---|
| 132 | }
|
|---|
| 133 | return $different;
|
|---|
| 134 | }
|
|---|
| 135 |
|
|---|
| 136 | sub testpodplaintext( @ ) {
|
|---|
| 137 | my %opts = (ref $_[0] eq 'HASH') ? %{shift()} : ();
|
|---|
| 138 | my @testpods = @_;
|
|---|
| 139 | my ($testname, $testdir) = ("", "");
|
|---|
| 140 | my ($podfile, $cmpfile) = ("", "");
|
|---|
| 141 | my ($outfile, $errfile) = ("", "");
|
|---|
| 142 | my $passes = 0;
|
|---|
| 143 | my $failed = 0;
|
|---|
| 144 | local $_;
|
|---|
| 145 |
|
|---|
| 146 | print "1..", scalar @testpods, "\n" unless ($opts{'-xrgen'});
|
|---|
| 147 |
|
|---|
| 148 | for $podfile (@testpods) {
|
|---|
| 149 | ($testname, $_) = fileparse($podfile);
|
|---|
| 150 | $testdir ||= $_;
|
|---|
| 151 | $testname =~ s/\.t$//;
|
|---|
| 152 | $cmpfile = $testdir . $testname . '.xr';
|
|---|
| 153 | $outfile = $testdir . $testname . '.OUT';
|
|---|
| 154 |
|
|---|
| 155 | if ($opts{'-xrgen'}) {
|
|---|
| 156 | if ($opts{'-force'} or ! -e $cmpfile) {
|
|---|
| 157 | ## Create the comparison file
|
|---|
| 158 | print "# Creating expected result for \"$testname\"" .
|
|---|
| 159 | " pod2plaintext test ...\n";
|
|---|
| 160 | podinc2plaintext($podfile, $cmpfile);
|
|---|
| 161 | }
|
|---|
| 162 | else {
|
|---|
| 163 | print "# File $cmpfile already exists" .
|
|---|
| 164 | " (use '-force' to regenerate it).\n";
|
|---|
| 165 | }
|
|---|
| 166 | next;
|
|---|
| 167 | }
|
|---|
| 168 |
|
|---|
| 169 | my $failmsg = testpodinc2plaintext
|
|---|
| 170 | -In => $podfile,
|
|---|
| 171 | -Out => $outfile,
|
|---|
| 172 | -Cmp => $cmpfile;
|
|---|
| 173 | if ($failmsg) {
|
|---|
| 174 | ++$failed;
|
|---|
| 175 | print "#\tFAILED. ($failmsg)\n";
|
|---|
| 176 | print "not ok ", $failed+$passes, "\n";
|
|---|
| 177 | }
|
|---|
| 178 | else {
|
|---|
| 179 | ++$passes;
|
|---|
| 180 | unlink($outfile);
|
|---|
| 181 | print "#\tPASSED.\n";
|
|---|
| 182 | print "ok ", $failed+$passes, "\n";
|
|---|
| 183 | }
|
|---|
| 184 | }
|
|---|
| 185 | return $passes;
|
|---|
| 186 | }
|
|---|
| 187 |
|
|---|
| 188 | 1;
|
|---|