Update podlators to version 4.03
[perl.git] / cpan / podlators / t / general / pod-parser.t
1 #!/usr/bin/perl -w
2 #
3 # Tests for backward compatibility with Pod::Parser.
4 #
5 # Copyright 2006, 2008, 2009, 2012, 2015 by Russ Allbery <rra@cpan.org>
6 #
7 # This program is free software; you may redistribute it and/or modify it
8 # under the same terms as Perl itself.
9
10 use 5.006;
11 use strict;
12 use warnings;
13
14 use lib 't/lib';
15
16 use File::Spec;
17 use Test::More tests => 7;
18 use Test::Podlators qw(slurp);
19
20 # Ensure the modules load properly.
21 BEGIN {
22     use_ok('Pod::Man');
23     use_ok('Pod::Text');
24 }
25
26 # Create a temporary directory to use for output, but don't fail if it already
27 # exists.  If we failed to create it, we'll fail later on.  We unfortunately
28 # have to create files on disk to easily create file handles for testing.
29 my $tmpdir = File::Spec->catdir('t', 'tmp');
30 if (!-d $tmpdir) {
31     mkdir($tmpdir, 0777);
32 }
33
34 # Create some test POD to use to test the -cutting option.
35 my $infile = File::Spec->catfile('t', 'tmp', "tmp$$.pod");
36 open(my $input, '>', $infile) or BAIL_OUT("cannot create $infile: $!");
37 print {$input} "Some random B<text>.\n"
38   or BAIL_OUT("cannot write to $infile: $!");
39 close($input) or BAIL_OUT("cannot write to $infile: $!");
40
41 # Test the -cutting option with Pod::Man.
42 my $parser = Pod::Man->new;
43 isa_ok($parser, 'Pod::Man', 'Pod::Man parser object');
44 my $outfile = File::Spec->catfile('t', 'tmp', "tmp$$.man");
45 open(my $output, '>', $outfile) or BAIL_OUT("cannot open $outfile: $!");
46 $parser->parse_from_file({ -cutting => 0 }, $infile, $output);
47 close($output) or BAIL_OUT("cannot write to $outfile: $!");
48 my $got = slurp($outfile, 'man');
49 is($got, "Some random \\fBtext\\fR.\n", 'Pod::Man -cutting output');
50 unlink($outfile);
51
52 # Likewise for Pod::Text.
53 $parser = Pod::Text->new;
54 isa_ok($parser, 'Pod::Text', 'Pod::Text parser object');
55 $outfile = File::Spec->catfile('t', 'tmp', "tmp$$.txt");
56 open($output, '>', $outfile) or BAIL_OUT("cannot open $outfile: $!");
57 $parser->parse_from_file({ -cutting => 0 }, $infile, $output);
58 close($output) or BAIL_OUT("cannot write to $outfile: $!");
59 $got = slurp($outfile);
60 is($got, "    Some random text.\n\n", 'Pod::Text -cutting output');
61 unlink($outfile);
62
63 # Rewrite the input file to be fully valid POD since we won't use -cutting.
64 unlink($infile);
65 open($input, '>', $infile) or BAIL_OUT("cannot create $infile: $!");
66 print {$input} "=pod\n\nSome random B<text>.\n"
67   or BAIL_OUT("cannot write to $infile: $!");
68 close($input) or BAIL_OUT("cannot write to $infile: $!");
69
70 # Now test the pod2text function with a single output.  This will send the
71 # results to standard output, so we need to redirect that to a file.
72 open($output,         '>',  $outfile) or BAIL_OUT("cannot open $outfile: $!");
73 open(my $save_stdout, '>&', STDOUT)   or BAIL_OUT("cannot dup stdout: $!");
74 open(STDOUT, '>&', $output) or BAIL_OUT("cannot redirect stdout: $!");
75 pod2text($infile);
76 close($output) or BAIL_OUT("cannot write to $outfile: $!");
77 open(STDOUT, '>&', $save_stdout) or BAIL_OUT("cannot fix stdout: $!");
78 close($save_stdout) or BAIL_OUT("cannot close saved stdout: $!");
79 $got = slurp($outfile);
80 is($got, "    Some random text.\n\n", 'Pod::Text pod2text function');
81
82 # Clean up.
83 unlink($infile, $outfile);