source: trunk/essentials/dev-lang/perl/t/pod/testp2pt.pl

Last change on this file was 3181, checked in by bird, 18 years ago

perl 5.8.8

File size: 5.5 KB
Line 
1package TestPodIncPlainText;
2
3BEGIN {
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;
18use Carp;
19use Exporter;
20#use File::Compare;
21#use Cwd qw(abs_path);
22
23use vars qw($MYPKG @EXPORT @ISA);
24$MYPKG = eval { (caller)[0] };
25@EXPORT = qw(&testpodplaintext);
26BEGIN {
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
36sub catfile(@) { File::Spec->catfile(@_); }
37
38my $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');
45my @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
52sub 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
74sub 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
98sub begin_input {
99 $_[0]->{_INFILE} = VMS::Filespec::unixify($_[0]->{_INFILE}) if $^O eq 'VMS';
100}
101
102sub podinc2plaintext( $ $ ) {
103 my ($infile, $outfile) = @_;
104 local $_;
105 my $text_parser = $MYPKG->new;
106 $text_parser->parse_from_file($infile, $outfile);
107}
108
109sub 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
136sub 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
1881;
Note: See TracBrowser for help on using the repository browser.