This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to podlators-2.1.0
[perl5.git] / lib / Pod / t / man.t
1 #!/usr/bin/perl -w
2 #
3 # man.t -- Additional specialized tests for Pod::Man.
4 #
5 # Copyright 2002, 2003, 2004, 2006, 2007, 2008
6 #     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
11 BEGIN {
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..24\n";
21 }
22
23 END {
24     print "not ok 1\n" unless $loaded;
25 }
26
27 use Pod::Man;
28
29 $loaded = 1;
30 print "ok 1\n";
31
32 # Test whether we can use binmode to set encoding.
33 my $have_encoding = (eval { require PerlIO::encoding; 1 } and not $@);
34
35 my $parser = Pod::Man->new or die "Cannot create parser\n";
36 my $n = 2;
37 while (<DATA>) {
38     next until $_ eq "###\n";
39     open (TMP, '> tmp.pod') or die "Cannot create tmp.pod: $!\n";
40
41     # We have a test in ISO 8859-1 encoding.  Make sure that nothing strange
42     # happens if Perl thinks the world is Unicode.  Wrap this in eval so that
43     # older versions of Perl don't croak.
44     eval { binmode (\*TMP, ':encoding(iso-8859-1)') if $have_encoding };
45
46     while (<DATA>) {
47         last if $_ eq "###\n";
48         print TMP $_;
49     }
50     close TMP;
51     open (OUT, '> out.tmp') or die "Cannot create out.tmp: $!\n";
52     $parser->parse_from_file ('tmp.pod', \*OUT);
53     close OUT;
54     open (OUT, 'out.tmp') or die "Cannot open out.tmp: $!\n";
55     while (<OUT>) { last if /^\.nh/ }
56     my $output;
57     {
58         local $/;
59         $output = <OUT>;
60     }
61     close OUT;
62     unlink ('tmp.pod', 'out.tmp');
63     my $expected = '';
64     while (<DATA>) {
65         last if $_ eq "###\n";
66         $expected .= $_;
67     }
68     if ($output eq $expected) {
69         print "ok $n\n";
70     } else {
71         print "not ok $n\n";
72         print "Expected\n========\n$expected\nOutput\n======\n$output\n";
73     }
74     $n++;
75 }
76
77 # Below the marker are bits of POD and corresponding expected nroff output.
78 # This is used to test specific features or problems with Pod::Man.  The input
79 # and output are separated by lines containing only ###.
80
81 __DATA__
82
83 ###
84 =head1 NAME
85
86 gcc - GNU project C and C++ compiler
87
88 =head1 C++ NOTES
89
90 Other mentions of C++.
91 ###
92 .SH "NAME"
93 gcc \- GNU project C and C++ compiler
94 .SH "\*(C+ NOTES"
95 .IX Header " NOTES"
96 Other mentions of \*(C+.
97 ###
98
99 ###
100 =head1 PERIODS
101
102 This C<.> should be quoted.
103 ###
104 .SH "PERIODS"
105 .IX Header "PERIODS"
106 This \f(CW\*(C`.\*(C'\fR should be quoted.
107 ###
108
109 ###
110 =over 4
111
112 =item *
113
114 A bullet.
115
116 =item    *
117
118 Another bullet.
119
120 =item * Also a bullet.
121
122 =back
123 ###
124 .IP "\(bu" 4
125 A bullet.
126 .IP "\(bu" 4
127 Another bullet.
128 .IP "\(bu" 4
129 Also a bullet.
130 ###
131
132 ###
133 =over 4
134
135 =item foo
136
137 Not a bullet.
138
139 =item *
140
141 Also not a bullet.
142
143 =back
144 ###
145 .IP "foo" 4
146 .IX Item "foo"
147 Not a bullet.
148 .IP "*" 4
149 Also not a bullet.
150 ###
151
152 ###
153 =encoding iso-8859-1
154
155 =head1 ACCENTS
156
157 Beyoncé!  Beyoncé!  Beyoncé!!
158
159     Beyoncé!  Beyoncé!
160       Beyoncé!  Beyoncé!
161         Beyoncé!  Beyoncé!
162
163 Older versions didn't convert Beyoncé in verbatim.
164 ###
165 .SH "ACCENTS"
166 .IX Header "ACCENTS"
167 Beyonce\*'!  Beyonce\*'!  Beyonce\*'!!
168 .PP
169 .Vb 3
170 \&    Beyonce\*'!  Beyonce\*'!
171 \&      Beyonce\*'!  Beyonce\*'!
172 \&        Beyonce\*'!  Beyonce\*'!
173 .Ve
174 .PP
175 Older versions didn't convert Beyonce\*' in verbatim.
176 ###
177
178 ###
179 =over 4
180
181 =item 1. Not a number
182
183 =item 2. Spaced right
184
185 =back
186
187 =over 2
188
189 =item 1 Not a number
190
191 =item 2 Spaced right
192
193 =back
194 ###
195 .IP "1. Not a number" 4
196 .IX Item "1. Not a number"
197 .PD 0
198 .IP "2. Spaced right" 4
199 .IX Item "2. Spaced right"
200 .IP "1 Not a number" 2
201 .IX Item "1 Not a number"
202 .IP "2 Spaced right" 2
203 .IX Item "2 Spaced right"
204 ###
205
206 ###
207 =over 4
208
209 =item Z<>*
210
211 Not bullet.
212
213 =back
214 ###
215 .IP "*" 4
216 Not bullet.
217 ###
218
219 ###
220 =head1 SEQS
221
222 "=over ... Z<>=back"
223
224 "SE<lt>...E<gt>"
225
226 The quotes should be converted in the above to paired quotes.
227 ###
228 .SH "SEQS"
229 .IX Header "SEQS"
230 \&\*(L"=over ... =back\*(R"
231 .PP
232 \&\*(L"S<...>\*(R"
233 .PP
234 The quotes should be converted in the above to paired quotes.
235 ###
236
237 ###
238 =head1 YEN
239
240 It cost me E<165>12345! That should be an X.
241 ###
242 .SH "YEN"
243 .IX Header "YEN"
244 It cost me X12345! That should be an X.
245 ###
246
247 ###
248 =head1 agrave
249
250 Open E<agrave> la shell. Previous versions mapped it wrong.
251 ###
252 .SH "agrave"
253 .IX Header "agrave"
254 Open a\*` la shell. Previous versions mapped it wrong.
255 ###
256
257 ###
258 =over
259
260 =item First level
261
262 Blah blah blah....
263
264 =over
265
266 =item *
267
268 Should be a bullet.
269
270 =back
271
272 =back
273 ###
274 .IP "First level" 4
275 .IX Item "First level"
276 Blah blah blah....
277 .RS 4
278 .IP "\(bu" 4
279 Should be a bullet.
280 .RE
281 .RS 4
282 .RE
283 ###
284
285 ###
286 =over 4
287
288 =item 1. Check fonts in @CARP_NOT test.
289
290 =back
291 ###
292 .ie n .IP "1. Check fonts in @CARP_NOT test." 4
293 .el .IP "1. Check fonts in \f(CW@CARP_NOT\fR test." 4
294 .IX Item "1. Check fonts in @CARP_NOT test."
295 ###
296
297 ###
298 =head1 LINK QUOTING
299
300 There should not be double quotes: L<C<< (?>pattern) >>>.
301 ###
302 .SH "LINK QUOTING"
303 .IX Header "LINK QUOTING"
304 There should not be double quotes: \f(CW\*(C`(?>pattern)\*(C'\fR.
305 ###
306
307 ###
308 =head1 SE<lt>E<gt> MAGIC
309
310 Magic should be applied S<RISC OS> to that.
311 ###
312 .SH "S<> MAGIC"
313 .IX Header "S<> MAGIC"
314 Magic should be applied \s-1RISC\s0\ \s-1OS\s0 to that.
315 ###
316
317 ###
318 =head1 MAGIC MONEY
319
320 These should be identical.
321
322 Bippity boppity boo "The
323 price is $Z<>100."
324
325 Bippity boppity boo "The
326 price is $100."
327 ###
328 .SH "MAGIC MONEY"
329 .IX Header "MAGIC MONEY"
330 These should be identical.
331 .PP
332 Bippity boppity boo \*(L"The
333 price is \f(CW$100\fR.\*(R"
334 .PP
335 Bippity boppity boo \*(L"The
336 price is \f(CW$100\fR.\*(R"
337 ###
338
339 ###
340 =head1 NAME
341
342 "Stuff" (no guesswork)
343
344 =head2 THINGS
345
346 Oboy, is this C++ "fun" yet! (guesswork)
347 ###
348 .SH "NAME"
349 "Stuff" (no guesswork)
350 .Sh "\s-1THINGS\s0"
351 .IX Subsection "THINGS"
352 Oboy, is this \*(C+ \*(L"fun\*(R" yet! (guesswork)
353 ###
354
355 ###
356 =head1 Newline C Quote Weirdness
357
358 Blorp C<'
359 ''>. Yes.
360 ###
361 .SH "Newline C Quote Weirdness"
362 .IX Header "Newline C Quote Weirdness"
363 Blorp \f(CW\*(Aq
364 \&\*(Aq\*(Aq\fR. Yes.
365 ###
366
367 ###
368 =head1 Soft Hypen Testing
369
370 sigE<shy>action
371 manuE<shy>script
372 JarkE<shy>ko HieE<shy>taE<shy>nieE<shy>mi
373
374 And again:
375
376 sigE<173>action
377 manuE<173>script
378 JarkE<173>ko HieE<173>taE<173>nieE<173>mi
379
380 And one more time:
381
382 sigE<0x00AD>action
383 manuE<0x00AD>script
384 JarkE<0x00AD>ko HieE<0x00AD>taE<0x00AD>nieE<0x00AD>mi
385 ###
386 .SH "Soft Hypen Testing"
387 .IX Header "Soft Hypen Testing"
388 sig\%action
389 manu\%script
390 Jark\%ko Hie\%ta\%nie\%mi
391 .PP
392 And again:
393 .PP
394 sig\%action
395 manu\%script
396 Jark\%ko Hie\%ta\%nie\%mi
397 .PP
398 And one more time:
399 .PP
400 sig\%action
401 manu\%script
402 Jark\%ko Hie\%ta\%nie\%mi
403 ###
404
405 ###
406 =head1 XE<lt>E<gt> Whitespace
407
408 Blorpy L<B<prok>|blap> X<bivav> wugga chachacha.
409 ###
410 .SH "X<> Whitespace"
411 .IX Header "X<> Whitespace"
412 Blorpy \fBprok\fR  wugga chachacha.
413 .IX Xref "bivav"
414 ###
415
416 ###
417 =head1 Hyphen in SE<lt>E<gt>
418
419 Don't S<transform even-this hyphen>.  This "one's-fine!", as well.  However,
420 $-0.13 should have a real hyphen.
421 ###
422 .SH "Hyphen in S<>"
423 .IX Header "Hyphen in S<>"
424 Don't transform\ even-this\ hyphen.  This \*(L"one's-fine!\*(R", as well.  However,
425 $\-0.13 should have a real hyphen.
426 ###
427
428 ###
429 =head1 Quote escaping
430
431 Don't escape `this' but do escape C<`this'> (and don't surround it in quotes).
432 ###
433 .SH "Quote escaping"
434 .IX Header "Quote escaping"
435 Don't escape `this' but do escape \f(CW\`this\*(Aq\fR (and don't surround it in quotes).
436 ###
437
438 ###
439 =pod
440
441 E<eth>
442 ###
443 .PP
444 \&\*(d-
445 ###
446
447 ###
448 =head1 C<one> and C<two>
449 ###
450 .ie n .SH """one"" and ""two"""
451 .el .SH "\f(CWone\fP and \f(CWtwo\fP"
452 .IX Header "one and two"
453 ###