Update podlators to version 4.03
[perl.git] / cpan / podlators / t / man / basic.t
1 #!/usr/bin/perl -w
2 #
3 # Additional specialized tests for Pod::Man.
4 #
5 # Copyright 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2012, 2013, 2014
6 #     Russ Allbery <rra@cpan.org>
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     }
16     unshift (@INC, '../blib/lib');
17     $| = 1;
18 }
19
20 use strict;
21
22 use Test::More tests => 34;
23 BEGIN { use_ok ('Pod::Man') }
24
25 # Test whether we can use binmode to set encoding.
26 my $have_encoding = (eval { require PerlIO::encoding; 1 } and not $@);
27
28 my $parser = Pod::Man->new;
29 isa_ok ($parser, 'Pod::Man', 'Parser object');
30 my $n = 1;
31 while (<DATA>) {
32     next until $_ eq "###\n";
33     open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
34
35     # We have a test in ISO 8859-1 encoding.  Make sure that nothing strange
36     # happens if Perl thinks the world is Unicode.  Hide this in a string eval
37     # so that older versions of Perl don't croak and minimum-version tests
38     # still pass.
39     eval 'binmode (\*TMP, ":encoding(iso-8859-1)")' if $have_encoding;
40
41     while (<DATA>) {
42         last if $_ eq "###\n";
43         print TMP $_;
44     }
45     close TMP;
46     open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
47     $parser->parse_from_file ("tmp$$.pod", \*OUT);
48     close OUT;
49     open (OUT, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
50     while (<OUT>) { last if /^\.nh/ }
51     my $output;
52     {
53         local $/;
54         $output = <OUT>;
55     }
56     close OUT;
57     1 while unlink ("tmp$$.pod", "out$$.tmp");
58     my $expected = '';
59     while (<DATA>) {
60         last if $_ eq "###\n";
61         $expected .= $_;
62     }
63     is ($output, $expected, "Output correct for test $n");
64     $n++;
65 }
66
67 # Below the marker are bits of POD and corresponding expected nroff output.
68 # This is used to test specific features or problems with Pod::Man.  The input
69 # and output are separated by lines containing only ###.
70
71 __DATA__
72
73 ###
74 =head1 NAME
75
76 gcc - GNU project C<C> and C++ compiler
77
78 =head1 C++ NOTES
79
80 Other mentions of C++.
81 ###
82 .SH "NAME"
83 gcc \- GNU project "C" and C++ compiler
84 .SH "\*(C+ NOTES"
85 .IX Header " NOTES"
86 Other mentions of \*(C+.
87 ###
88
89 ###
90 =head1 PERIODS
91
92 This C<.> should be quoted.
93 ###
94 .SH "PERIODS"
95 .IX Header "PERIODS"
96 This \f(CW\*(C`.\*(C'\fR should be quoted.
97 ###
98
99 ###
100 =over 4
101
102 =item *
103
104 A bullet.
105
106 =item    *
107
108 Another bullet.
109
110 =item * Also a bullet.
111
112 =back
113 ###
114 .IP "\(bu" 4
115 A bullet.
116 .IP "\(bu" 4
117 Another bullet.
118 .IP "\(bu" 4
119 Also a bullet.
120 ###
121
122 ###
123 =encoding iso-8859-1
124
125 =head1 ACCENTS
126
127 Beyonc�!  Beyonc�!  Beyonc�!!
128
129     Beyonc�!  Beyonc�!
130       Beyonc�!  Beyonc�!
131         Beyonc�!  Beyonc�!
132
133 Older versions didn't convert Beyonc� in verbatim.
134 ###
135 .SH "ACCENTS"
136 .IX Header "ACCENTS"
137 Beyonce\*'!  Beyonce\*'!  Beyonce\*'!!
138 .PP
139 .Vb 3
140 \&    Beyonce\*'!  Beyonce\*'!
141 \&      Beyonce\*'!  Beyonce\*'!
142 \&        Beyonce\*'!  Beyonce\*'!
143 .Ve
144 .PP
145 Older versions didn't convert Beyonce\*' in verbatim.
146 ###
147
148 ###
149 =over 4
150
151 =item 1. Not a number
152
153 =item 2. Spaced right
154
155 =back
156
157 =over 2
158
159 =item 1 Not a number
160
161 =item 2 Spaced right
162
163 =back
164 ###
165 .IP "1. Not a number" 4
166 .IX Item "1. Not a number"
167 .PD 0
168 .IP "2. Spaced right" 4
169 .IX Item "2. Spaced right"
170 .IP "1 Not a number" 2
171 .IX Item "1 Not a number"
172 .IP "2 Spaced right" 2
173 .IX Item "2 Spaced right"
174 ###
175
176 ###
177 =over 4
178
179 =item Z<>*
180
181 Not bullet.
182
183 =back
184 ###
185 .IP "*" 4
186 Not bullet.
187 ###
188
189 ###
190 =head1 SEQS
191
192 "=over ... Z<>=back"
193
194 "SE<lt>...E<gt>"
195
196 The quotes should be converted in the above to paired quotes.
197 ###
198 .SH "SEQS"
199 .IX Header "SEQS"
200 \&\*(L"=over ... =back\*(R"
201 .PP
202 \&\*(L"S<...>\*(R"
203 .PP
204 The quotes should be converted in the above to paired quotes.
205 ###
206
207 ###
208 =head1 YEN
209
210 It cost me E<165>12345! That should be an X.
211 ###
212 .SH "YEN"
213 .IX Header "YEN"
214 It cost me X12345! That should be an X.
215 ###
216
217 ###
218 =head1 agrave
219
220 Open E<agrave> la shell. Previous versions mapped it wrong.
221 ###
222 .SH "agrave"
223 .IX Header "agrave"
224 Open a\*` la shell. Previous versions mapped it wrong.
225 ###
226
227 ###
228 =over
229
230 =item First level
231
232 Blah blah blah....
233
234 =over
235
236 =item *
237
238 Should be a bullet.
239
240 =back
241
242 =back
243 ###
244 .IP "First level" 4
245 .IX Item "First level"
246 Blah blah blah....
247 .RS 4
248 .IP "\(bu" 4
249 Should be a bullet.
250 .RE
251 .RS 4
252 .RE
253 ###
254
255 ###
256 =over 4
257
258 =item 1. Check fonts in @CARP_NOT test.
259
260 =back
261 ###
262 .ie n .IP "1. Check fonts in @CARP_NOT test." 4
263 .el .IP "1. Check fonts in \f(CW@CARP_NOT\fR test." 4
264 .IX Item "1. Check fonts in @CARP_NOT test."
265 ###
266
267 ###
268 =head1 LINK QUOTING
269
270 There should not be double quotes: L<C<< (?>pattern) >>>.
271 ###
272 .SH "LINK QUOTING"
273 .IX Header "LINK QUOTING"
274 There should not be double quotes: \f(CW\*(C`(?>pattern)\*(C'\fR.
275 ###
276
277 ###
278 =head1 SE<lt>E<gt> MAGIC
279
280 Magic should be applied S<RISC OS> to that.
281 ###
282 .SH "S<> MAGIC"
283 .IX Header "S<> MAGIC"
284 Magic should be applied \s-1RISC\s0\ \s-1OS\s0 to that.
285 ###
286
287 ###
288 =head1 MAGIC MONEY
289
290 These should be identical.
291
292 Bippity boppity boo "The
293 price is $Z<>100."
294
295 Bippity boppity boo "The
296 price is $100."
297 ###
298 .SH "MAGIC MONEY"
299 .IX Header "MAGIC MONEY"
300 These should be identical.
301 .PP
302 Bippity boppity boo \*(L"The
303 price is \f(CW$100\fR.\*(R"
304 .PP
305 Bippity boppity boo \*(L"The
306 price is \f(CW$100\fR.\*(R"
307 ###
308
309 ###
310 =head1 NAME
311
312 "Stuff" (no guesswork)
313
314 =head2 THINGS
315
316 Oboy, is this C++ "fun" yet! (guesswork)
317 ###
318 .SH "NAME"
319 "Stuff" (no guesswork)
320 .SS "\s-1THINGS\s0"
321 .IX Subsection "THINGS"
322 Oboy, is this \*(C+ \*(L"fun\*(R" yet! (guesswork)
323 ###
324
325 ###
326 =head1 Newline C Quote Weirdness
327
328 Blorp C<'
329 ''>. Yes.
330 ###
331 .SH "Newline C Quote Weirdness"
332 .IX Header "Newline C Quote Weirdness"
333 Blorp \f(CW\*(Aq
334 \&\*(Aq\*(Aq\fR. Yes.
335 ###
336
337 ###
338 =head1 Soft Hypen Testing
339
340 sigE<shy>action
341 manuE<shy>script
342 JarkE<shy>ko HieE<shy>taE<shy>nieE<shy>mi
343
344 And again:
345
346 sigE<173>action
347 manuE<173>script
348 JarkE<173>ko HieE<173>taE<173>nieE<173>mi
349
350 And one more time:
351
352 sigE<0x00AD>action
353 manuE<0x00AD>script
354 JarkE<0x00AD>ko HieE<0x00AD>taE<0x00AD>nieE<0x00AD>mi
355 ###
356 .SH "Soft Hypen Testing"
357 .IX Header "Soft Hypen Testing"
358 sig\%action
359 manu\%script
360 Jark\%ko Hie\%ta\%nie\%mi
361 .PP
362 And again:
363 .PP
364 sig\%action
365 manu\%script
366 Jark\%ko Hie\%ta\%nie\%mi
367 .PP
368 And one more time:
369 .PP
370 sig\%action
371 manu\%script
372 Jark\%ko Hie\%ta\%nie\%mi
373 ###
374
375 ###
376 =head1 XE<lt>E<gt> Whitespace
377
378 Blorpy L<B<prok>|blap> X<bivav> wugga chachacha.
379 ###
380 .SH "X<> Whitespace"
381 .IX Header "X<> Whitespace"
382 Blorpy \fBprok\fR  wugga chachacha.
383 .IX Xref "bivav"
384 ###
385
386 ###
387 =head1 Hyphen in SE<lt>E<gt>
388
389 Don't S<transform even-this hyphen>.  This "one's-fine!", as well.  However,
390 $-0.13 should have a real hyphen.
391 ###
392 .SH "Hyphen in S<>"
393 .IX Header "Hyphen in S<>"
394 Don't transform\ even-this\ hyphen.  This \*(L"one's-fine!\*(R", as well.  However,
395 $\-0.13 should have a real hyphen.
396 ###
397
398 ###
399 =head1 Quote escaping
400
401 Don't escape `this' but do escape C<`this'> (and don't surround it in quotes).
402 ###
403 .SH "Quote escaping"
404 .IX Header "Quote escaping"
405 Don't escape `this' but do escape \f(CW\`this\*(Aq\fR (and don't surround it in quotes).
406 ###
407
408 ###
409 =pod
410
411 E<eth>
412 ###
413 .PP
414 \&\*(d-
415 ###
416
417 ###
418 =head1 C<one> and C<two>
419 ###
420 .ie n .SH """one"" and ""two"""
421 .el .SH "\f(CWone\fP and \f(CWtwo\fP"
422 .IX Header "one and two"
423 ###
424
425 ###
426 =pod
427
428 Some text.
429
430 =for man
431 Some raw nroff.
432
433 =for roff \fBBold text.\fP
434
435 =for html
436 Stuff that's hidden.
437
438 =for MAN \fIItalic text.\fP
439
440 =for ROFF
441 .PP
442 \&A paragraph.
443
444 More text.
445 ###
446 Some text.
447 Some raw nroff.
448 \fBBold text.\fP
449 \fIItalic text.\fP
450 .PP
451 \&A paragraph.
452 .PP
453 More text.
454 ###
455
456 ###
457 =head1 NAME
458
459 test - C<test>
460 ###
461 .SH "NAME"
462 test \- "test"
463 ###
464
465 ###
466 =head1 INDEX
467
468 Index entry matching a whitespace escape.X<\n>
469 ###
470 .SH "INDEX"
471 .IX Header "INDEX"
472 Index entry matching a whitespace escape.
473 .IX Xref "\\n"
474 ###
475
476 ###
477 =head1 LINK TO URL
478
479 This is a L<link|http://www.example.com/> to a URL.
480 ###
481 .SH "LINK TO URL"
482 .IX Header "LINK TO URL"
483 This is a link <http://www.example.com/> to a \s-1URL.\s0
484 ###
485
486 ###
487 =head1 NAME
488
489 test - B<test> I<italics> F<file>
490 ###
491 .SH "NAME"
492 test \- test italics file
493 ###
494
495 ###
496 =head1 TRAILING SPACE
497
498 HelloS< >
499
500 worldS<   >
501
502 .
503 ###
504 .SH "TRAILING SPACE"
505 .IX Header "TRAILING SPACE"
506 Hello\ 
507 .PP
508 world\ \ \ 
509 .PP
510 \&.
511 ###
512
513 ###
514 =head1 URL LINK
515
516 The newest version of this document is also available on the World Wide Web at
517 L<http://pod.tst.eu/http://cvs.schmorp.de/rxvt-unicode/doc/rxvt.7.pod>.
518 ###
519 .SH "URL LINK"
520 .IX Header "URL LINK"
521 The newest version of this document is also available on the World Wide Web at
522 <http://pod.tst.eu/http://cvs.schmorp.de/rxvt\-unicode/doc/rxvt.7.pod>.
523 ###
524
525 ###
526 =head1 RT LINK
527
528 L<[perl #12345]|https://rt.cpan.org/12345>
529 ###
530 .SH "RT LINK"
531 .IX Header "RT LINK"
532 [perl #12345] <https://rt.cpan.org/12345>
533 ###
534
535 ###
536 =head1 Multiline XZ<><>
537
538 Something something X<this   is
539 one index term>
540 ###
541 .SH "Multiline X<>"
542 .IX Header "Multiline X<>"
543 Something something
544 .IX Xref "this is one index term"
545 ###
546
547 ###
548 =head1 Uppercase License
549
550 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
551 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
552 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
553 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
554 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
555 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
556 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
557 ###
558 .SH "Uppercase License"
559 .IX Header "Uppercase License"
560 \&\s-1THE SOFTWARE IS PROVIDED \*(L"AS IS\*(R", WITHOUT WARRANTY OF ANY KIND,
561 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
562 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
563 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
564 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
565 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
566 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\s0
567 ###