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 a 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="/"bric-a-brac a gogo"" section="bric-a-brac a gogo" type="pod">"bric-a-brac a gogo"</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|/"bric-a-brac a gogo"" section="bric-a-brac a gogo" type="pod">Stuff like 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<like that>|/"bric-a-brac a gogo"" section="bric-a-brac a gogo" type="pod">Stuff <I>like 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>"Ping-pong" 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>"Object Methods"</a></p>\n} 254); 255 256is( 257 x(qq{L</Object Methods>\n}), 258 qq{\n<p><a href="#Object_Methods" class="podlinkpod"\n>"Object Methods"</a></p>\n} 259); 260 261is( 262 x(qq{L<"Object Methods">\n}), 263 qq{\n<p><a href="#Object_Methods" class="podlinkpod"\n>"Object Methods"</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>"Ping-pong" 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">"Ping-pong" in Net::Ping</a></p>\n\n} 371); 372 373is( 374 o(qq{L</"Object Methods">}), 375 qq{<p><a href="#Object-Methods">"Object Methods"</a></p>\n\n} 376); 377 378is( 379 o(qq{L</Object Methods>}), 380 qq{<p><a href="#Object-Methods">"Object Methods"</a></p>\n\n} 381); 382 383is( 384 o(qq{L<"Object Methods">}), 385 qq{<p><a href="#Object-Methods">"Object Methods"</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">"Ping-pong" 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