Commit | Line | Data |
d44282b9 |
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 for reading:/, |
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 = 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 $prg = qq[pod2usage({ $args })]; |
60 | my @cmd = ( $^X, '-I../lib', '-MPod::Usage', '-e', $prg ); |
61 | |
62 | is( system( @cmd ) >> 8, $exit, 'Exit status of pod2usage()' ); |
63 | } |
64 | |
65 | # Test verbose level 1 |
66 | my $vbl_1 = << 'EOMSG'; |
67 | Usage: |
68 | The SYNOPSIS section is displayed with -verbose >= 0. |
69 | |
70 | Options: |
71 | The OPTIONS section is displayed with -verbose >= 1. |
72 | |
73 | Arguments: |
74 | The ARGUMENTS section is displayed with -verbose >= 1. |
75 | |
76 | EOMSG |
77 | $$fake_out = ''; |
78 | pod2usage( { -verbose => 1, -exit => 'noexit', -output => \*FAKEOUT } ); |
79 | is( $$fake_out, $vbl_1, 'Verbose level 1' ); |
80 | |
81 | # Test verbose level 2 |
82 | $$fake_out = ''; |
83 | require Pod::Text; # Pod::Usage->isa( 'Pod::Text' ) |
84 | |
85 | ( my $p2tp = new Pod::Text )->parse_from_file( $0, \*FAKEOUT ); |
86 | my $pod2text = $$fake_out; |
87 | |
88 | $$fake_out = ''; |
89 | pod2usage( { -verbose => 2, -exit => 'noexit', -output => \*FAKEOUT } ); |
90 | my $pod2usage = $$fake_out; |
91 | |
92 | is( $pod2usage, $pod2text, 'Verbose level >= 2 eq pod2text' ); |
93 | |
94 | |
95 | package CatchOut; |
96 | sub TIEHANDLE { bless \( my $self ), shift } |
97 | sub PRINT { my $self = shift; $$self .= $_[0] } |
98 | |
99 | __END__ |
100 | |
101 | =head1 NAME |
102 | |
103 | Usage.t - Tests for Pod::Usage |
104 | |
105 | =head1 SYNOPSIS |
106 | |
107 | The B<SYNOPSIS> section is displayed with -verbose >= 0. |
108 | |
109 | =head1 DESCRIPTION |
110 | |
111 | Testing Pod::Usage. This section is not displayed with -verbose < 2. |
112 | |
113 | =head1 OPTIONS |
114 | |
115 | The B<OPTIONS> section is displayed with -verbose >= 1. |
116 | |
117 | =head1 ARGUMENTS |
118 | |
119 | The B<ARGUMENTS> section is displayed with -verbose >= 1. |
120 | |
121 | =head1 AUTHOR |
122 | |
123 | 20020105 Abe Timmerman <abe@ztreet.demon.nl> |
124 | |
125 | =cut |