xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/lib/Pod/t/basic.t (revision 0:68f95e015346)
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