diff options
Diffstat (limited to 'ext/podlators/t/basic.t')
-rw-r--r-- | ext/podlators/t/basic.t | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/ext/podlators/t/basic.t b/ext/podlators/t/basic.t new file mode 100644 index 0000000000..603d108574 --- /dev/null +++ b/ext/podlators/t/basic.t @@ -0,0 +1,127 @@ +#!/usr/bin/perl -w +# +# basic.t -- Basic tests for podlators. +# +# Copyright 2001, 2002, 2004, 2006 by Russ Allbery <rra@stanford.edu> +# +# This program is free software; you may redistribute it and/or modify it +# under the same terms as Perl itself. + +BEGIN { + chdir 't' if -d 't'; + if ($ENV{PERL_CORE}) { + @INC = '../lib'; + } else { + unshift (@INC, '../blib/lib'); + } + unshift (@INC, '../blib/lib'); + $| = 1; + print "1..11\n"; +} + +END { + print "not ok 1\n" unless $loaded; +} + +use Pod::Man; +use Pod::Text; +use Pod::Text::Overstrike; +use Pod::Text::Termcap; + +# Find the path to the test source files. This requires some fiddling when +# these tests are run as part of Perl core. +sub source_path { + my $file = shift; + if ($ENV{PERL_CORE}) { + require File::Spec; + my $updir = File::Spec->updir; + my $dir = File::Spec->catdir ($updir, 'lib', 'Pod', 't'); + return File::Spec->catfile ($dir, $file); + } else { + return $file; + } +} + +$loaded = 1; +print "ok 1\n"; + +# Hard-code a few values to try to get reproducible results. +$ENV{COLUMNS} = 80; +$ENV{TERM} = 'xterm'; +$ENV{TERMCAP} = 'xterm:co=80:do=^J:md=\E[1m:us=\E[4m:me=\E[m'; + +# Map of translators to file extensions to find the formatted output to +# compare against. +my %translators = ('Pod::Man' => 'man', + 'Pod::Text' => 'txt', + 'Pod::Text::Color' => 'clr', + 'Pod::Text::Overstrike' => 'ovr', + 'Pod::Text::Termcap' => 'cap'); + +# Set default options to match those of pod2man and pod2text. +%options = (sentence => 0); + +my $n = 2; +for (sort keys %translators) { + if ($_ eq 'Pod::Text::Color') { + eval { require Term::ANSIColor }; + if ($@) { + print "ok $n # skip\n"; + $n++; + print "ok $n # skip\n"; + $n++; + next; + } + require Pod::Text::Color; + } + my $parser = $_->new (%options); + print (($parser && ref ($parser) eq $_) ? "ok $n\n" : "not ok $n\n"); + $n++; + + # For Pod::Man, strip out the autogenerated header up to the .TH title + # line. That means that we don't check those things; oh well. The header + # changes with each version change or touch of the input file. + open (OUT, '> out.tmp') or die "Cannot create out.tmp: $!\n"; + $parser->parse_from_file (source_path ('basic.pod'), \*OUT); + close OUT; + if ($_ eq 'Pod::Man') { + open (TMP, 'out.tmp') or die "Cannot open out.tmp: $!\n"; + open (OUTPUT, "> out.$translators{$_}") + or die "Cannot create out.$translators{$_}: $!\n"; + local $_; + while (<TMP>) { last if /^\.nh/ } + print OUTPUT while <TMP>; + close OUTPUT; + close TMP; + unlink 'out.tmp'; + } else { + rename ('out.tmp', "out.$translators{$_}") + or die "Cannot rename out.tmp: $!\n"; + } + { + local $/; + open (MASTER, source_path ("basic.$translators{$_}")) + or die "Cannot open basic.$translators{$_}: $!\n"; + open (OUTPUT, "out.$translators{$_}") + or die "Cannot open out.$translators{$_}: $!\n"; + my $master = <MASTER>; + my $output = <OUTPUT>; + close MASTER; + close OUTPUT; + + # OS/390 is EBCDIC, which uses a different character for ESC + # apparently. Try to convert so that the test still works. + if ($^O eq 'os390' && $_ eq 'Pod::Text::Termcap') { + $output =~ tr/\033/\047/; + } + + if ($master eq $output) { + print "ok $n\n"; + unlink "out.$translators{$_}"; + } else { + print "not ok $n\n"; + print "# Non-matching output left in out.$translators{$_}\n"; + } + } + $n++; +} |