1#!/usr/bin/perl -w 2# $Id: basic.t,v 1.4 2002/01/28 02:56:19 eagle Exp $ 3# 4# basic.t -- Basic tests for podlators. 5# 6# Copyright 2001 by Russ Allbery <rra@stanford.edu> 7# 8# This program is free software; you may redistribute it and/or modify it 9# under the same terms as Perl itself. 10 11BEGIN { 12 chdir 't' if -d 't'; 13 if ($ENV{PERL_CORE}) { 14 @INC = '../lib'; 15 } else { 16 unshift (@INC, '../blib/lib'); 17 } 18 unshift (@INC, '../blib/lib'); 19 $| = 1; 20 print "1..11\n"; 21} 22 23END { 24 print "not ok 1\n" unless $loaded; 25} 26 27use Pod::Man; 28use Pod::Text; 29use Pod::Text::Color; 30use Pod::Text::Overstrike; 31use Pod::Text::Termcap; 32 33# Find the path to the test source files. This requires some fiddling when 34# these tests are run as part of Perl core. 35sub source_path { 36 my $file = shift; 37 if ($ENV{PERL_CORE}) { 38 require File::Spec; 39 my $updir = File::Spec->updir; 40 my $dir = File::Spec->catdir ($updir, 'lib', 'Pod', 't'); 41 return File::Spec->catfile ($dir, $file); 42 } else { 43 return $file; 44 } 45} 46 47$loaded = 1; 48print "ok 1\n"; 49 50# Hard-code a few values to try to get reproducible results. 51$ENV{COLUMNS} = 80; 52$ENV{TERM} = 'xterm'; 53$ENV{TERMCAP} = 'xterm:co=80:do=^J:md=\E[1m:us=\E[4m:me=\E[m'; 54 55# Map of translators to file extensions to find the formatted output to 56# compare against. 57my %translators = ('Pod::Man' => 'man', 58 'Pod::Text' => 'txt', 59 'Pod::Text::Color' => 'clr', 60 'Pod::Text::Overstrike' => 'ovr', 61 'Pod::Text::Termcap' => 'cap'); 62 63# Set default options to match those of pod2man and pod2text. 64%options = (sentence => 0); 65 66my $n = 2; 67for (sort keys %translators) { 68 my $parser = $_->new (%options); 69 print (($parser && ref ($parser) eq $_) ? "ok $n\n" : "not ok $n\n"); 70 $n++; 71 72 # For Pod::Man, strip out the autogenerated header up to the .TH title 73 # line. That means that we don't check those things; oh well. The header 74 # changes with each version change or touch of the input file. 75 if ($_ eq 'Pod::Man') { 76 $parser->parse_from_file (source_path ('basic.pod'), 'out.tmp'); 77 open (TMP, 'out.tmp') or die "Cannot open out.tmp: $!\n"; 78 open (OUTPUT, "> out.$translators{$_}") 79 or die "Cannot create out.$translators{$_}: $!\n"; 80 local $_; 81 while (<TMP>) { last if /^\.TH/ } 82 print OUTPUT while <TMP>; 83 close OUTPUT; 84 close TMP; 85 unlink 'out.tmp'; 86 } else { 87 my $basic = source_path ('basic.pod'); 88 $parser->parse_from_file ($basic, "out.$translators{$_}"); 89 } 90 { 91 local $/; 92 open (MASTER, source_path ("basic.$translators{$_}")) 93 or die "Cannot open basic.$translators{$_}: $!\n"; 94 open (OUTPUT, "out.$translators{$_}") 95 or die "Cannot open out.$translators{$_}: $!\n"; 96 my $master = <MASTER>; 97 my $output = <OUTPUT>; 98 close MASTER; 99 close OUTPUT; 100 101 # OS/390 is EBCDIC, which uses a different character for ESC 102 # apparently. Try to convert so that the test still works. 103 if ($^O eq 'os390' && $_ eq 'Pod::Text::Termcap') { 104 $output =~ tr/\033/\047/; 105 } 106 107 if ($master eq $output) { 108 print "ok $n\n"; 109 unlink "out.$translators{$_}"; 110 } else { 111 print "not ok $n\n"; 112 print "# Non-matching output left in out.$translators{$_}\n"; 113 } 114 } 115 $n++; 116} 117