podcheck.t: tell the author where the problems db is located
[perl.git] / cpan / podlators / t / text-options.t
1 #!/usr/bin/perl -w
2 #
3 # Additional tests for Pod::Text options.
4 #
5 # Copyright 2002, 2004, 2006, 2008, 2009, 2012, 2013
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     }
16     unshift (@INC, '../blib/lib');
17     $| = 1;
18 }
19
20 use strict;
21
22 use Test::More tests => 34;
23 BEGIN { use_ok ('Pod::Text') }
24
25 # Redirect stderr to a file.
26 sub stderr_save {
27     open (OLDERR, '>&STDERR') or die "Can't dup STDERR: $!\n";
28     open (STDERR, "> out$$.err") or die "Can't redirect STDERR: $!\n";
29 }
30
31 # Restore stderr.
32 sub stderr_restore {
33     close STDERR;
34     open (STDERR, '>&OLDERR') or die "Can't dup STDERR: $!\n";
35     close OLDERR;
36 }
37
38 my $n = 1;
39 while (<DATA>) {
40     my %options;
41     next until $_ eq "###\n";
42     while (<DATA>) {
43         last if $_ eq "###\n";
44         my ($option, $value) = split;
45         $options{$option} = $value;
46     }
47     open (TMP, "> tmp$$.pod") or die "Cannot create tmp$$.pod: $!\n";
48     while (<DATA>) {
49         last if $_ eq "###\n";
50         print TMP $_;
51     }
52     close TMP;
53     my $parser = Pod::Text->new (%options);
54     isa_ok ($parser, 'Pod::Text', 'Parser object');
55     open (OUT, "> out$$.tmp") or die "Cannot create out$$.tmp: $!\n";
56     stderr_save;
57     eval { $parser->parse_from_file ("tmp$$.pod", \*OUT) };
58     my $exception = $@;
59     stderr_restore;
60     close OUT;
61     open (TMP, "out$$.tmp") or die "Cannot open out$$.tmp: $!\n";
62     my $output;
63     {
64         local $/;
65         $output = <TMP>;
66     }
67     close TMP;
68     1 while unlink ("tmp$$.pod", "out$$.tmp");
69     my $expected = '';
70     while (<DATA>) {
71         last if $_ eq "###\n";
72         $expected .= $_;
73     }
74     is ($output, $expected, "Ouput correct for test $n");
75     open (ERR, "out$$.err") or die "Cannot open out$$.err: $!\n";
76     my $errors;
77     {
78         local $/;
79         $errors = <ERR>;
80     }
81     close ERR;
82     $errors =~ s/\Qtmp$$.pod/tmp.pod/g;
83     1 while unlink ("out$$.err");
84     if ($exception) {
85         $exception =~ s/ at .*//;
86         $errors .= "EXCEPTION: $exception";
87     }
88     $expected = '';
89     while (<DATA>) {
90         last if $_ eq "###\n";
91         $expected .= $_;
92     }
93     is ($errors, $expected, "Errors correct for test $n");
94     $n++;
95 }
96
97 # Below the marker are bits of POD and corresponding expected text output.
98 # This is used to test specific features or problems with Pod::Text.  The
99 # options, input, output, and errors are separated by lines containing only
100 # ###.
101
102 __DATA__
103
104 ###
105 alt 1
106 ###
107 =head1 SAMPLE
108
109 =over 4
110
111 =item F
112
113 Paragraph.
114
115 =item Bar
116
117 =item B
118
119 Paragraph.
120
121 =item Longer
122
123 Paragraph.
124
125 =back
126
127 ###
128
129 ==== SAMPLE ====
130
131 :   F   Paragraph.
132
133 :   Bar
134 :   B   Paragraph.
135
136 :   Longer
137         Paragraph.
138
139 ###
140 ###
141
142 ###
143 margin 4
144 ###
145 =head1 SAMPLE
146
147 This is some body text that is long enough to be a paragraph that wraps,
148 thereby testing margins with wrapped paragraphs.
149
150  This is some verbatim text.
151
152 =over 6
153
154 =item Test
155
156 This is a test of an indented paragraph.
157
158 This is another indented paragraph.
159
160 =back
161 ###
162     SAMPLE
163         This is some body text that is long enough to be a paragraph that
164         wraps, thereby testing margins with wrapped paragraphs.
165
166          This is some verbatim text.
167
168         Test  This is a test of an indented paragraph.
169
170               This is another indented paragraph.
171
172 ###
173 ###
174
175 ###
176 code 1
177 ###
178 This is some random text.
179 This is more random text.
180
181 This is some random text.
182 This is more random text.
183
184 =head1 SAMPLE
185
186 This is POD.
187
188 =cut
189
190 This is more random text.
191 ###
192 This is some random text.
193 This is more random text.
194
195 This is some random text.
196 This is more random text.
197
198 SAMPLE
199     This is POD.
200
201
202 This is more random text.
203 ###
204 ###
205
206 ###
207 sentence 1
208 ###
209 =head1 EXAMPLE
210
211 Whitespace around C<<  this.  >> must be ignored per perlpodspec.  >>
212 needs to eat all of the space in front of it.
213
214 =cut
215 ###
216 EXAMPLE
217     Whitespace around "this." must be ignored per perlpodspec.  >> needs to
218     eat all of the space in front of it.
219
220 ###
221 ###
222
223 ###
224 ###
225 =over 4
226
227 =item Foo
228
229 Bar.
230
231 =head1 NEXT
232 ###
233     Foo Bar.
234
235 NEXT
236 POD ERRORS
237     Hey! The above document had some coding errors, which are explained
238     below:
239
240     Around line 7:
241         You forgot a '=back' before '=head1'
242
243 ###
244 ###
245
246 ###
247 stderr 1
248 ###
249 =over 4
250
251 =item Foo
252
253 Bar.
254
255 =head1 NEXT
256 ###
257     Foo Bar.
258
259 NEXT
260 ###
261 tmp.pod around line 7: You forgot a '=back' before '=head1'
262 ###
263
264 ###
265 nourls 1
266 ###
267 =head1 URL suppression
268
269 L<anchor|http://www.example.com/>
270 ###
271 URL suppression
272     anchor
273
274 ###
275 ###
276
277 ###
278 errors stderr
279 ###
280 =over 4
281
282 =item Foo
283
284 Bar.
285
286 =head1 NEXT
287 ###
288     Foo Bar.
289
290 NEXT
291 ###
292 tmp.pod around line 7: You forgot a '=back' before '=head1'
293 ###
294
295 ###
296 errors die
297 ###
298 =over 4
299
300 =item Foo
301
302 Bar.
303
304 =head1 NEXT
305 ###
306     Foo Bar.
307
308 NEXT
309 ###
310 tmp.pod around line 7: You forgot a '=back' before '=head1'
311 EXCEPTION: POD document had syntax errors
312 ###
313
314 ###
315 errors pod
316 ###
317 =over 4
318
319 =item Foo
320
321 Bar.
322
323 =head1 NEXT
324 ###
325     Foo Bar.
326
327 NEXT
328 POD ERRORS
329     Hey! The above document had some coding errors, which are explained
330     below:
331
332     Around line 7:
333         You forgot a '=back' before '=head1'
334
335 ###
336 ###
337
338 ###
339 errors none
340 ###
341 =over 4
342
343 =item Foo
344
345 Bar.
346
347 =head1 NEXT
348 ###
349     Foo Bar.
350
351 NEXT
352 ###
353 ###