1# fcodes S
2BEGIN {
3    if($ENV{PERL_CORE}) {
4        chdir 't';
5        @INC = '../lib';
6    }
7}
8
9use strict;
10use Test;
11BEGIN { plan tests => 80 };
12
13#use Pod::Simple::Debug (6);
14
15ok 1;
16
17use Pod::Simple::XMLOutStream;
18print "# Pod::Simple version $Pod::Simple::VERSION\n";
19my $x = 'Pod::Simple::XMLOutStream';
20sub e ($$) { $x->_duo(@_) }
21
22$Pod::Simple::XMLOutStream::ATTR_PAD   = ' ';
23$Pod::Simple::XMLOutStream::SORT_ATTRS = 1; # for predictably testable output
24
25
26print "# S as such...\n";
27
28ok( $x->_out("=pod\n\nI like S<bric-a-brac>.\n"),
29 =>  '<Document><Para>I like <S>bric-a-brac</S>.</Para></Document>' );
30ok( $x->_out("=pod\n\nI like S<bric-a-brac a gogo >.\n"),
31 =>  '<Document><Para>I like <S>bric-a-brac a gogo </S>.</Para></Document>' );
32ok( $x->_out("=pod\n\nI like S<< bric-a-brac a gogo >>.\n"),
33 =>  '<Document><Para>I like <S>bric-a-brac a gogo</S>.</Para></Document>' );
34
35my $unless_ascii = (chr(65) eq 'A') ? '' :
36 "Skip because not in ASCIIland";
37
38skip( $unless_ascii,
39    $x->_out( sub { $_[0]->nbsp_for_S(1) },
40    "=pod\n\nI like S<bric-a-brac a gogo>.\n"),
41'<Document><Para>I like bric-a-brac&#160;a&#160;gogo.</Para></Document>'
42);
43skip( $unless_ascii,
44    $x->_out( sub { $_[0]->nbsp_for_S(1) },
45    qq{=pod\n\nI like S<L</"bric-a-brac a gogo">>.\n}),
46'<Document><Para>I like <L content-implicit="yes" raw="/&#34;bric-a-brac a gogo&#34;" section="bric-a-brac a gogo" type="pod">&#34;bric-a-brac&#160;a&#160;gogo&#34;</L>.</Para></Document>'
47);
48skip( $unless_ascii,
49    $x->_out( sub { $_[0]->nbsp_for_S(1) },
50    qq{=pod\n\nI like S<L<Stuff like that|/"bric-a-brac a gogo">>.\n}),
51'<Document><Para>I like <L raw="Stuff like that|/&#34;bric-a-brac a gogo&#34;" section="bric-a-brac a gogo" type="pod">Stuff&#160;like&#160;that</L>.</Para></Document>'
52);
53skip( $unless_ascii,
54    $x->_out( sub { $_[0]->nbsp_for_S(1) },
55    qq{=pod\n\nI like S<L<Stuff I<like that>|/"bric-a-brac a gogo">>.\n}),
56'<Document><Para>I like <L raw="Stuff I&#60;like that&#62;|/&#34;bric-a-brac a gogo&#34;" section="bric-a-brac a gogo" type="pod">Stuff&#160;<I>like&#160;that</I></L>.</Para></Document>'
57);
58
59&ok( $x->_duo( sub { $_[0]->nbsp_for_S(1) },
60  "=pod\n\nI like S<bric-a-brac a gogo>.\n",
61  "=pod\n\nI like bric-a-bracE<160>aE<160>gogo.\n",
62));
63&ok(
64  map {my $z = $_; $z =~ s/content-implicit="yes" //g; $z =~ s/raw=".+?" //g; $z }
65  $x->_duo( sub { $_[0]->nbsp_for_S(1) },
66    qq{=pod\n\nI like S<L</"bric-a-brac a gogo">>.\n},
67    qq{=pod\n\nI like L<"bric-a-bracE<160>aE<160>gogo"|/"bric-a-brac a gogo">.\n},
68));
69&ok(
70  map {my $z = $_; $z =~ s/raw=".+?" //g; $z }
71  $x->_duo( sub { $_[0]->nbsp_for_S(1) },
72    qq{=pod\n\nI like S<L<Stuff like that|"bric-a-brac a gogo">>.\n},
73    qq{=pod\n\nI like L<StuffE<160>likeE<160>that|"bric-a-brac a gogo">.\n},
74));
75&ok(
76  map {my $z = $_; $z =~ s/content-implicit="yes" //g; $z =~ s/raw=".+?" //g; $z }
77  $x->_duo( sub { $_[0]->nbsp_for_S(1) },
78    qq{=pod\n\nI like S<L<Stuff I<like that>|"bric-a-brac a gogo">>.\n},
79    qq{=pod\n\nI like L<StuffE<160>I<likeE<160>that>|"bric-a-brac a gogo">.\n},
80));
81
82use Pod::Simple::Text;
83$x = Pod::Simple::Text->new;
84$x->preserve_whitespace(1);
85# RT#25679
86ok(
87  $x->_out(<<END
88=head1 The Tk::mega manpage showed me how C<< SE<lt> > foo >> is being rendered
89
90Both pod2text and pod2man S<    > lose the rest of the line
91
92=head1 Do they always S<    > lose the rest of the line?
93
94=cut
95END
96  ),
97  <<END
98The Tk::mega manpage showed me how S< > foo is being rendered
99
100    Both pod2text and pod2man      lose the rest of the line
101
102Do they always      lose the rest of the line?
103
104END
105);
106
107$x = 'Pod::Simple::Text';
108# Test text output of links.
109ok(
110    $x->_out(qq{=pod\n\nL<Net::Ping>\n}),
111    "    Net::Ping\n\n"
112);
113
114ok(
115    $x->_out(qq{=pod\n\nBe sure to read the L<Net::Ping> docs\n}),
116    "    Be sure to read the Net::Ping docs\n\n"
117);
118
119ok(
120    $x->_out(qq{=pod\n\nL<http://www.perl.com>\n}),
121    "    http://www.perl.com\n\n"
122);
123
124ok(
125    $x->_out(qq{=pod\n\nL<crontab(5)>\n}),
126    "    crontab(5)\n\n"
127);
128
129ok(
130    $x->_out(qq{=pod\n\nL<Net::Ping/Ping-pong>\n}),
131    qq{    "Ping-pong" in Net::Ping\n\n}
132);
133
134ok(
135    $x->_out(qq{=pod\n\nL</"Object Methods">\n}),
136    qq{    "Object Methods"\n\n}
137);
138
139ok(
140    $x->_out(qq{=pod\n\nL</Object Methods>\n}),
141    qq{    "Object Methods"\n\n}
142);
143
144ok(
145    $x->_out(qq{=pod\n\nL<"Object Methods">\n}),
146    qq{    "Object Methods"\n\n}
147);
148
149ok(
150    $x->_out(qq{=pod\n\nL<Net::Ping/Ping-E<112>ong>\n}),
151    qq{    "Ping-pong" in Net::Ping\n\n}
152);
153
154ok(
155    $x->_out(qq{=pod\n\nL<news:comp.lang.perl.misc>\n}),
156    "    news:comp.lang.perl.misc\n\n"
157);
158
159ok(
160    $x->_out(qq{=pod\n\nL<http://www.perl.org>\n}),
161    "    http://www.perl.org\n\n"
162);
163
164ok(
165    $x->_out(qq{=pod\n\nSee L<http://www.perl.org>\n}),
166    "    See http://www.perl.org\n\n"
167);
168
169ok(
170    $x->_out(qq{=pod\n\nL<http://www.perl.org/CPAN/authors/id/S/SB/SBURKE/>\n}),
171    "    http://www.perl.org/CPAN/authors/id/S/SB/SBURKE/\n\n"
172);
173
174ok(
175    $x->_out(qq{=pod\n\nL<news:compE<46>lang.perl.misc>\n}),
176    "    news:comp.lang.perl.misc\n\n"
177);
178
179ok(
180    $x->_out(qq{=pod\n\nL<http://wwwE<46>perl.org>\n}),
181    "    http://www.perl.org\n\n"
182);
183
184ok(
185    $x->_out(qq{=pod\n\nL<things|crontab(5)>\n}),
186    "    things\n\n"
187);
188
189ok(
190    $x->_out(qq{=pod\n\nL<things|crontab(5)/ENVIRONMENT>\n}),
191    "    things\n\n"
192);
193
194ok(
195    $x->_out(qq{=pod\n\nL<Perl Error Messages|perldiag>\n}),
196    "    Perl Error Messages\n\n"
197);
198
199ok(
200    $x->_out(qq{=pod\n\nL<Perl\nError\nMessages|perldiag>\n}),
201    "    Perl Error Messages\n\n"
202);
203
204ok(
205    $x->_out(qq{=pod\n\nL<Perl\nError\t  Messages|perldiag>\n}),
206    "    Perl Error Messages\n\n"
207);
208
209ok(
210    $x->_out(qq{=pod\n\nL<perl.org|http://www.perl.org>\n}),
211    "    perl.org <http://www.perl.org>\n\n"
212);
213
214ok(
215    $x->_out(qq{=pod\n\nSee L<perl.org|http://www.perl.org>\n}),
216    "    See perl.org <http://www.perl.org>\n\n"
217);
218
219
220# Test HTML output of links.
221use Pod::Simple::HTML;
222my $PERLDOC = "https://metacpan.org/pod";
223my $MANURL = "http://man.he.net/man";
224sub x ($) {
225    Pod::Simple::HTML->_out(
226        sub {  $_[0]->bare_output(1)  },
227        "=pod\n\n$_[0]",
228    )
229}
230
231ok(
232    x(qq{L<Net::Ping>\n}),
233    qq{\n<p><a href="$PERLDOC/Net%3A%3APing" class="podlinkpod"\n>Net::Ping</a></p>\n}
234);
235
236ok(
237    x(qq{Be sure to read the L<Net::Ping> docs\n}),
238    qq{\n<p>Be sure to read the <a href="$PERLDOC/Net%3A%3APing" class="podlinkpod"\n>Net::Ping</a> docs</p>\n}
239);
240
241ok(
242    x(qq{L<http://www.perl.com>\n}),
243    qq{\n<p><a href="http://www.perl.com" class="podlinkurl"\n>http://www.perl.com</a></p>\n}
244);
245
246ok(
247    x(qq{L<crontab(5)>\n}),
248    qq{\n<p><a href="${MANURL}5/crontab" class="podlinkman"\n>crontab(5)</a></p>\n}
249);
250
251ok(
252    x(qq{L<Net::Ping/Ping-pong>\n}),
253    qq{\n<p><a href="$PERLDOC/Net%3A%3APing#Ping-pong" class="podlinkpod"\n>&#34;Ping-pong&#34; in Net::Ping</a></p>\n}
254);
255
256ok(
257    x(qq{L</"Object Methods">\n}),
258    qq{\n<p><a href="#Object_Methods" class="podlinkpod"\n>&#34;Object Methods&#34;</a></p>\n}
259);
260
261ok(
262    x(qq{L</Object Methods>\n}),
263    qq{\n<p><a href="#Object_Methods" class="podlinkpod"\n>&#34;Object Methods&#34;</a></p>\n}
264);
265
266ok(
267    x(qq{L<"Object Methods">\n}),
268    qq{\n<p><a href="#Object_Methods" class="podlinkpod"\n>&#34;Object Methods&#34;</a></p>\n}
269);
270
271ok(
272    x(qq{L<Net::Ping/Ping-E<112>ong>\n}),
273    qq{\n<p><a href="$PERLDOC/Net%3A%3APing#Ping-pong" class="podlinkpod"\n>&#34;Ping-pong&#34; in Net::Ping</a></p>\n}
274);
275
276ok(
277    x(qq{L<news:comp.lang.perl.misc>\n}),
278    qq{\n<p><a href="news:comp.lang.perl.misc" class="podlinkurl"\n>news:comp.lang.perl.misc</a></p>\n}
279);
280
281ok(
282    x(qq{L<http://www.perl.org>\n}),
283    qq{\n<p><a href="http://www.perl.org" class="podlinkurl"\n>http://www.perl.org</a></p>\n}
284);
285
286ok(
287    x(qq{See L<http://www.perl.org>\n}),
288    qq{\n<p>See <a href="http://www.perl.org" class="podlinkurl"\n>http://www.perl.org</a></p>\n}
289);
290
291ok(
292    x(qq{L<http://www.perl.org/CPAN/authors/id/S/SB/SBURKE/>\n}),
293    qq{\n<p><a href="http://www.perl.org/CPAN/authors/id/S/SB/SBURKE/" class="podlinkurl"\n>http://www.perl.org/CPAN/authors/id/S/SB/SBURKE/</a></p>\n}
294);
295
296ok(
297    x(qq{L<news:compE<46>lang.perl.misc>\n}),
298    qq{\n<p><a href="news:comp.lang.perl.misc" class="podlinkurl"\n>news:comp.lang.perl.misc</a></p>\n}
299);
300
301ok(
302    x(qq{L<http://wwwE<46>perl.org>\n}),
303    qq{\n<p><a href="http://www.perl.org" class="podlinkurl"\n>http://www.perl.org</a></p>\n}
304);
305
306ok(
307    x(qq{L<things|crontab(5)>\n}),
308    qq{\n<p><a href="${MANURL}5/crontab" class="podlinkman"\n>things</a></p>\n}
309);
310
311ok(
312    x(qq{L<things|crontab(5)/ENVIRONMENT>\n}),
313    qq{\n<p><a href="${MANURL}5/crontab" class="podlinkman"\n>things</a></p>\n}
314);
315
316ok(
317    x(qq{L<Perl Error Messages|perldiag>\n}),
318    qq{\n<p><a href="$PERLDOC/perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
319);
320
321ok(
322    x(qq{L<Perl\nError\nMessages|perldiag>\n}),
323    qq{\n<p><a href="$PERLDOC/perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
324);
325
326ok(
327    x(qq{L<Perl\nError\t  Messages|perldiag>\n}),
328    qq{\n<p><a href="$PERLDOC/perldiag" class="podlinkpod"\n>Perl Error Messages</a></p>\n}
329);
330
331ok(
332    x(qq{L<perl.org|http://www.perl.org>\n}),
333    qq{\n<p><a href="http://www.perl.org" class="podlinkurl"\n>perl.org</a></p>\n}
334);
335
336ok(
337    x(qq{See L<perl.org|http://www.perl.org>\n}),
338    qq{\n<p>See <a href="http://www.perl.org" class="podlinkurl"\n>perl.org</a></p>\n}
339);
340
341# Test link output in XHTML.
342use Pod::Simple::XHTML;
343sub o ($) {
344    my $p = Pod::Simple::XHTML->new;
345    $p->html_header("");
346    $p->html_footer("");
347    my $results = '';
348    $p->output_string( \$results ); # Send the resulting output to a string
349    $p->parse_string_document("=pod\n\n$_[0]");
350    return $results;
351}
352
353ok(
354    o(qq{L<Net::Ping>}),
355    qq{<p><a href="$PERLDOC/Net::Ping">Net::Ping</a></p>\n\n}
356);
357
358ok(
359    o(qq{Be sure to read the L<Net::Ping> docs}),
360    qq{<p>Be sure to read the <a href="$PERLDOC/Net::Ping">Net::Ping</a> docs</p>\n\n}
361);
362
363ok(
364    o(qq{L<http://www.perl.com>}),
365    qq{<p><a href="http://www.perl.com">http://www.perl.com</a></p>\n\n}
366);
367
368ok(
369    o(qq{L<crontab(5)>}),
370    qq{<p><a href="${MANURL}5/crontab">crontab(5)</a></p>\n\n}
371);
372
373ok(
374    o(qq{L<Net::Ping/Ping-pong>}),
375    qq{<p><a href="$PERLDOC/Net::Ping#Ping-pong">&quot;Ping-pong&quot; in Net::Ping</a></p>\n\n}
376);
377
378ok(
379    o(qq{L</"Object Methods">}),
380    qq{<p><a href="#Object-Methods">&quot;Object Methods&quot;</a></p>\n\n}
381);
382
383ok(
384    o(qq{L</Object Methods>}),
385    qq{<p><a href="#Object-Methods">&quot;Object Methods&quot;</a></p>\n\n}
386);
387
388ok(
389    o(qq{L<"Object Methods">}),
390    qq{<p><a href="#Object-Methods">&quot;Object Methods&quot;</a></p>\n\n}
391);
392
393ok(
394    o(qq{L<Net::Ping/Ping-E<112>ong>}),
395    qq{<p><a href="$PERLDOC/Net::Ping#Ping-pong">&quot;Ping-pong&quot; in Net::Ping</a></p>\n\n}
396);
397
398ok(
399    o(qq{L<news:comp.lang.perl.misc>}),
400    qq{<p><a href="news:comp.lang.perl.misc">news:comp.lang.perl.misc</a></p>\n\n}
401);
402
403ok(
404    o(qq{L<http://www.perl.org>}),
405    qq{<p><a href="http://www.perl.org">http://www.perl.org</a></p>\n\n}
406);
407
408ok(
409    o(qq{See L<http://www.perl.org>}),
410    qq{<p>See <a href="http://www.perl.org">http://www.perl.org</a></p>\n\n}
411);
412
413ok(
414    o(qq{L<http://www.perl.org/CPAN/authors/id/S/SB/SBURKE/>}),
415    qq{<p><a href="http://www.perl.org/CPAN/authors/id/S/SB/SBURKE/">http://www.perl.org/CPAN/authors/id/S/SB/SBURKE/</a></p>\n\n}
416);
417
418ok(
419    o(qq{L<news:compE<46>lang.perl.misc>}),
420    qq{<p><a href="news:comp.lang.perl.misc">news:comp.lang.perl.misc</a></p>\n\n}
421);
422
423ok(
424    o(qq{L<http://wwwE<46>perl.org>}),
425    qq{<p><a href="http://www.perl.org">http://www.perl.org</a></p>\n\n}
426);
427
428ok(
429    o(qq{L<things|crontab(5)>}),
430    qq{<p><a href="${MANURL}5/crontab">things</a></p>\n\n}
431);
432
433ok(
434    o(qq{L<things|crontab(5)/ENVIRONMENT>}),
435    qq{<p><a href="${MANURL}5/crontab">things</a></p>\n\n}
436);
437
438ok(
439    o(qq{L<Perl Error Messages|perldiag>}),
440    qq{<p><a href="$PERLDOC/perldiag">Perl Error Messages</a></p>\n\n}
441);
442
443ok(
444    o(qq{L<Perl\nError\nMessages|perldiag>}),
445    qq{<p><a href="$PERLDOC/perldiag">Perl Error Messages</a></p>\n\n}
446);
447
448ok(
449    o(qq{L<Perl\nError\t  Messages|perldiag>}),
450    qq{<p><a href="$PERLDOC/perldiag">Perl Error Messages</a></p>\n\n}
451);
452
453ok(
454    o(qq{L<perl.org|http://www.perl.org>}),
455    qq{<p><a href="http://www.perl.org">perl.org</a></p>\n\n}
456);
457
458ok(
459    o(qq{See L<perl.org|http://www.perl.org>}),
460    qq{<p>See <a href="http://www.perl.org">perl.org</a></p>\n\n}
461);
462
463print "# Wrapping up... one for the road...\n";
464ok 1;
465print "# --- Done with ", __FILE__, " --- \n";
466
467