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