This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add OP_ARGELEM, OP_ARGDEFELEM, OP_ARGCHECK ops
[perl5.git] / lib / Pod / t / Usage.t
1 #!perl
2 use strict;
3 BEGIN {
4         chdir 't' if -d 't';
5         @INC = '../lib';
6 }
7
8 use File::Basename;
9 use File::Spec;
10 use Test::More;
11 plan tests => 8;
12
13 use_ok( 'Pod::Usage' );
14
15 # Test verbose level 0
16 my $vbl_0 = << 'EOMSG';
17 Usage:
18     The SYNOPSIS section is displayed with -verbose >= 0.
19
20 EOMSG
21 my $fake_out = tie *FAKEOUT, 'CatchOut';
22 pod2usage({ -verbose => 0, -exit => 'noexit', -output => \*FAKEOUT });
23 is( $$fake_out, $vbl_0, 'Verbose level 0' );
24
25 my $msg = "Prefix message for pod2usage()";
26 $$fake_out = '';
27 pod2usage({ -verbose => 0, -exit => 'noexit', -output => \*FAKEOUT,
28             -message => $msg });
29 is( $$fake_out, "$msg\n$vbl_0", '-message parameter' );
30
31 SKIP: {
32     my( $file, $path ) = fileparse( $0 );
33     skip( 'File in current directory', 2 ) if -e $file; 
34     $$fake_out = '';
35     eval {
36         pod2usage({ -verbose => 0, -exit => 'noexit', 
37                     -output => \*FAKEOUT, -input => $file });
38     };
39     like( $@, qr/^Can't open $file/, 
40           'File not found without -pathlist' );
41
42     eval {
43         pod2usage({ -verbose => 0, -exit => 'noexit',
44                     -output => \*FAKEOUT, -input => $file, 
45                     -pathlist => $path });
46     };
47     is( $$fake_out, $vbl_0, '-pathlist parameter' );
48 }
49
50 { # Test exit status from pod2usage()
51     my $exit = ($^O eq 'VMS' ? 2 : 42);
52     my $dev_null = File::Spec->devnull;
53     my $args = join ", ", (
54         "-verbose => 0", 
55         "-exit    => $exit",
56         "-output  => q{$dev_null}",
57         "-input   => q{$0}",
58     );
59     my $cq = (($^O eq 'MSWin32'
60                || $^O eq 'NetWare'
61                || $^O eq 'VMS') ? '"'
62               : "");
63     my @params = ( "${cq}-I../lib$cq",  "${cq}-MPod::Usage$cq", '-e' );
64     my $prg = qq[${cq}pod2usage({ $args })$cq];
65     my @cmd = ( $^X, @params, $prg );
66
67     print "# cmd = @cmd\n";
68
69     is( system( @cmd ) >> 8, $exit, 'Exit status of pod2usage()' );
70 }
71
72 # Test verbose level 1
73 my $vbl_1 = << 'EOMSG';
74 Usage:
75     The SYNOPSIS section is displayed with -verbose >= 0.
76
77 Options:
78     The OPTIONS section is displayed with -verbose >= 1.
79
80 Arguments:
81     The ARGUMENTS section is displayed with -verbose >= 1.
82
83 EOMSG
84 $$fake_out = '';
85 pod2usage( { -verbose => 1, -exit => 'noexit', -output => \*FAKEOUT } );
86 is( $$fake_out, $vbl_1, 'Verbose level 1' );
87
88 # Test verbose level 2
89 $$fake_out = '';
90 require Pod::Text; # Pod::Usage->isa( 'Pod::Text' )
91
92 ( my $p2tp = new Pod::Text )->parse_from_file( $0, \*FAKEOUT );
93 my $pod2text = $$fake_out;
94
95 $$fake_out = '';
96 pod2usage( { -verbose => 2, -exit => 'noexit', -output => \*FAKEOUT } );
97 my $pod2usage = $$fake_out;
98
99 is( $pod2usage, $pod2text, 'Verbose level >= 2 eq pod2text' );
100
101
102 package CatchOut;
103 sub TIEHANDLE { bless \( my $self ), shift }
104 sub PRINT     { my $self = shift; $$self .= $_[0] }
105
106 __END__
107
108 =head1 NAME
109
110 Usage.t - Tests for Pod::Usage
111
112 =head1 SYNOPSIS
113
114 The B<SYNOPSIS> section is displayed with -verbose >= 0.
115
116 =head1 DESCRIPTION
117
118 Testing Pod::Usage. This section is not displayed with -verbose < 2.
119
120 =head1 OPTIONS
121
122 The B<OPTIONS> section is displayed with -verbose >= 1.
123
124 =head1 ARGUMENTS
125
126 The B<ARGUMENTS> section is displayed with -verbose >= 1.
127
128 =head1 AUTHOR
129
130 20020105 Abe Timmerman <abe@ztreet.demon.nl>
131
132 =cut