Update podlators to version 4.03
[perl.git] / cpan / podlators / t / general / filehandle.t
1 #!/usr/bin/perl
2 #
3 # Test the parse_from_filehandle method.
4 #
5 # This backward compatibility interface is not provided by Pod::Simple, so
6 # Pod::Man and Pod::Text had to implement it directly.  Test to be sure it's
7 # working properly.
8 #
9 # Copyright 2006, 2009, 2012, 2014, 2015 Russ Allbery <rra@cpan.org>
10 #
11 # This program is free software; you may redistribute it and/or modify it
12 # under the same terms as Perl itself.
13
14 use 5.006;
15 use strict;
16 use warnings;
17
18 use lib 't/lib';
19
20 use File::Spec;
21 use Test::More tests => 4;
22 use Test::Podlators qw(read_snippet slurp);
23
24 # Ensure the modules load properly.
25 BEGIN {
26     use_ok('Pod::Man');
27     use_ok('Pod::Text');
28 }
29
30 # Create a temporary directory to use for output, but don't fail if it already
31 # exists.  If we failed to create it, we'll fail later on.  We unfortunately
32 # have to create files on disk to easily create file handles for testing.
33 my $tmpdir = File::Spec->catdir('t', 'tmp');
34 if (!-d $tmpdir) {
35     mkdir($tmpdir, 0777);
36 }
37
38 # Load the tests.
39 my $man_data_ref  = read_snippet('man/cpp');
40 my $text_data_ref = read_snippet('text/cpp');
41
42 # Write the POD source to a temporary file for the input file handle.
43 my $infile = File::Spec->catfile('t', 'tmp', "tmp$$.pod");
44 open(my $input, '>', $infile) or BAIL_OUT("cannot create $infile: $!");
45 print {$input} $man_data_ref->{input}
46   or BAIL_OUT("cannot write to $infile: $!");
47 close($input) or BAIL_OUT("cannot write to $infile: $!");
48
49 # Write the Pod::Man output to a file.
50 my $outfile = File::Spec->catfile('t', 'tmp', "tmp$$.man");
51 open($input,     '<', $infile)  or BAIL_OUT("cannot open $infile: $!");
52 open(my $output, '>', $outfile) or BAIL_OUT("cannot open $outfile: $!");
53 my $parser = Pod::Man->new;
54 $parser->parse_from_filehandle($input, $output);
55 close($input)  or BAIL_OUT("cannot read from $infile: $!");
56 close($output) or BAIL_OUT("cannot write to $outfile: $!");
57
58 # Read the output back in and compare it.
59 my $got = slurp($outfile, 'man');
60 is($got, $man_data_ref->{output}, 'Pod::Man output');
61
62 # Clean up the temporary output file.
63 unlink($outfile);
64
65 # Now, do the same drill with Pod::Text.  Parse the input to a temporary file.
66 $outfile = File::Spec->catfile('t', 'tmp', "tmp$$.txt");
67 open($input,  '<', $infile)  or BAIL_OUT("cannot open $infile: $!");
68 open($output, '>', $outfile) or BAIL_OUT("cannot open $outfile: $!");
69 $parser = Pod::Text->new;
70 $parser->parse_from_filehandle($input, $output);
71 close($input)  or BAIL_OUT("cannot read from $infile: $!");
72 close($output) or BAIL_OUT("cannot write to $outfile: $!");
73
74 # Read the output back in and compare it.  Pod::Text adds a trailing blank
75 # line that we need to strip out.
76 $got = slurp($outfile);
77 $got =~ s{ \n \s+ \z }{\n}xms;
78 is($got, $text_data_ref->{output}, 'Pod::Text output');
79
80 # Clean up temporary files.
81 unlink($infile, $outfile);
82 rmdir($tmpdir);