1#!/usr/bin/perl -w 2 3# t/xhtml01.t - check basic output from Pod::Simple::XHTML 4 5BEGIN { 6 chdir 't' if -d 't'; 7} 8 9use strict; 10use lib '../lib'; 11use Test::More tests => 60; 12#use Test::More 'no_plan'; 13 14use_ok('Pod::Simple::XHTML') or exit; 15 16isa_ok my $parser = Pod::Simple::XHTML->new, 'Pod::Simple::XHTML'; 17my $header = $parser->html_header; 18my $footer = $parser->html_footer; 19 20for my $spec ( 21 [ 'foo' => 'foo', 'foo' ], 22 [ '12foo' => 'foo1', 'foo' ], 23 [ 'fo$bar' => 'fo-bar', 'fo-bar' ], 24 [ 'f12' => 'f12', 'f12' ], 25 [ '13' => 'pod13', 'pod13' ], 26 [ '**.:' => 'pod', 'pod' ], 27) { 28 is $parser->idify( $spec->[0] ), $spec->[1], 29 qq{ID for "$spec->[0]" should be "$spec->[1]"}; 30 is $parser->idify( $spec->[0], 1 ), $spec->[2], 31 qq{Non-unique ID for "$spec->[0]" should be "$spec->[2]"}; 32} 33 34my $results; 35 36initialize($parser, $results); 37$parser->html_header($header); 38$parser->html_footer($footer); 39ok $parser->parse_string_document( '=head1 Foo' ), 'Parse one header'; 40is $results, <<'EOF', 'Should have the index'; 41 42<html> 43<head> 44<title></title> 45<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 46</head> 47<body> 48 49 50<ul id="index"> 51 <li><a href="#Foo">Foo</a></li> 52</ul> 53 54<h1 id="Foo">Foo</h1> 55 56</body> 57</html> 58 59EOF 60 61initialize($parser, $results); 62ok $parser->parse_string_document( '=head1 Foo Bar' ), 'Parse multiword header'; 63is $results, <<'EOF', 'Should have the index'; 64<ul id="index"> 65 <li><a href="#Foo-Bar">Foo Bar</a></li> 66</ul> 67 68<h1 id="Foo-Bar">Foo Bar</h1> 69 70EOF 71 72initialize($parser, $results); 73ok $parser->parse_string_document( "=head1 Foo B<Bar>\n\n=head1 Foo B<Baz>" ), 74 'Parse two multiword headers'; 75is $results, <<'EOF', 'Should have the index'; 76<ul id="index"> 77 <li><a href="#Foo-Bar">Foo Bar</a></li> 78 <li><a href="#Foo-Baz">Foo Baz</a></li> 79</ul> 80 81<h1 id="Foo-Bar">Foo <b>Bar</b></h1> 82 83<h1 id="Foo-Baz">Foo <b>Baz</b></h1> 84 85EOF 86 87initialize($parser, $results); 88ok $parser->parse_string_document( "=head1 Foo\n\n=head1 Bar" ), 'Parse two headers'; 89is $results, <<'EOF', 'Should have both and the index'; 90<ul id="index"> 91 <li><a href="#Foo">Foo</a></li> 92 <li><a href="#Bar">Bar</a></li> 93</ul> 94 95<h1 id="Foo">Foo</h1> 96 97<h1 id="Bar">Bar</h1> 98 99EOF 100 101initialize($parser, $results); 102ok $parser->parse_string_document( "=head1 Foo C<Bar>\n\n=head1 C<Baz>" ), 103 'Parse two headers with C<> formatting'; 104is $results, <<'EOF', 'Should have the index'; 105<ul id="index"> 106 <li><a href="#Foo-Bar">Foo Bar</a></li> 107 <li><a href="#Baz">Baz</a></li> 108</ul> 109 110<h1 id="Foo-Bar">Foo <code>Bar</code></h1> 111 112<h1 id="Baz"><code>Baz</code></h1> 113 114EOF 115 116initialize($parser, $results); 117ok $parser->parse_string_document( "=head1 Foo\n\n=head1 Bar\n\n=head1 Baz" ), 118 'Parse three headers'; 119is $results, <<'EOF', 'Should have all three and the index'; 120<ul id="index"> 121 <li><a href="#Foo">Foo</a></li> 122 <li><a href="#Bar">Bar</a></li> 123 <li><a href="#Baz">Baz</a></li> 124</ul> 125 126<h1 id="Foo">Foo</h1> 127 128<h1 id="Bar">Bar</h1> 129 130<h1 id="Baz">Baz</h1> 131 132EOF 133 134initialize($parser, $results); 135ok $parser->parse_string_document( "=head1 Foo\n\n=head2 Bar" ), 'Parse two levels'; 136is $results, <<'EOF', 'Should have the dual-level index'; 137<ul id="index"> 138 <li><a href="#Foo">Foo</a> 139 <ul> 140 <li><a href="#Bar">Bar</a></li> 141 </ul> 142 </li> 143</ul> 144 145<h1 id="Foo">Foo</h1> 146 147<h2 id="Bar">Bar</h2> 148 149EOF 150 151initialize($parser, $results); 152ok $parser->parse_string_document( "=head1 Foo\n\n=head2 Bar\n\n=head3 Baz" ), 153 'Parse three levels'; 154is $results, <<'EOF', 'Should have the three-level index'; 155<ul id="index"> 156 <li><a href="#Foo">Foo</a> 157 <ul> 158 <li><a href="#Bar">Bar</a> 159 <ul> 160 <li><a href="#Baz">Baz</a></li> 161 </ul> 162 </li> 163 </ul> 164 </li> 165</ul> 166 167<h1 id="Foo">Foo</h1> 168 169<h2 id="Bar">Bar</h2> 170 171<h3 id="Baz">Baz</h3> 172 173EOF 174 175initialize($parser, $results); 176ok $parser->parse_string_document( "=head1 Foo\n\n=head2 Bar\n\n=head3 Baz\n\n=head4 Howdy" ), 177 'Parse four levels'; 178is $results, <<'EOF', 'Should have the four-level index'; 179<ul id="index"> 180 <li><a href="#Foo">Foo</a> 181 <ul> 182 <li><a href="#Bar">Bar</a> 183 <ul> 184 <li><a href="#Baz">Baz</a> 185 <ul> 186 <li><a href="#Howdy">Howdy</a></li> 187 </ul> 188 </li> 189 </ul> 190 </li> 191 </ul> 192 </li> 193</ul> 194 195<h1 id="Foo">Foo</h1> 196 197<h2 id="Bar">Bar</h2> 198 199<h3 id="Baz">Baz</h3> 200 201<h4 id="Howdy">Howdy</h4> 202 203EOF 204 205initialize($parser, $results); 206ok $parser->parse_string_document( "=head1 Foo\n\n=head2 Bar\n\n=head2 Baz" ), 207 'Parse 1/2'; 208is $results, <<'EOF', 'Should have the 1/s index'; 209<ul id="index"> 210 <li><a href="#Foo">Foo</a> 211 <ul> 212 <li><a href="#Bar">Bar</a></li> 213 <li><a href="#Baz">Baz</a></li> 214 </ul> 215 </li> 216</ul> 217 218<h1 id="Foo">Foo</h1> 219 220<h2 id="Bar">Bar</h2> 221 222<h2 id="Baz">Baz</h2> 223 224EOF 225 226initialize($parser, $results); 227ok $parser->parse_string_document( "=head1 Foo\n\n=head3 Bar" ), 'Parse jump from one to three'; 228is $results, <<'EOF', 'Should have the 1-3 index'; 229<ul id="index"> 230 <li><a href="#Foo">Foo</a> 231 <ul> 232 <li> 233 <ul> 234 <li><a href="#Bar">Bar</a></li> 235 </ul> 236 </li> 237 </ul> 238 </li> 239</ul> 240 241<h1 id="Foo">Foo</h1> 242 243<h3 id="Bar">Bar</h3> 244 245EOF 246 247initialize($parser, $results); 248ok $parser->parse_string_document( "=head1 Foo\n\n=head4 Bar" ), 'Parse jump from one to four'; 249is $results, <<'EOF', 'Should have the 1-4 index'; 250<ul id="index"> 251 <li><a href="#Foo">Foo</a> 252 <ul> 253 <li> 254 <ul> 255 <li> 256 <ul> 257 <li><a href="#Bar">Bar</a></li> 258 </ul> 259 </li> 260 </ul> 261 </li> 262 </ul> 263 </li> 264</ul> 265 266<h1 id="Foo">Foo</h1> 267 268<h4 id="Bar">Bar</h4> 269 270EOF 271 272initialize($parser, $results); 273ok $parser->parse_string_document( "=head2 Foo\n\n=head1 Bar" ), 274 'Parse two down to 1'; 275is $results, <<'EOF', 'Should have the 2-1 index'; 276<ul id="index"> 277 <li> 278 <ul> 279 <li><a href="#Foo">Foo</a></li> 280 </ul> 281 </li> 282 <li><a href="#Bar">Bar</a></li> 283</ul> 284 285<h2 id="Foo">Foo</h2> 286 287<h1 id="Bar">Bar</h1> 288 289EOF 290 291initialize($parser, $results); 292ok $parser->parse_string_document( "=head2 Foo\n\n=head1 Bar\n\n=head4 Four\n\n=head4 Four2" ), 293 'Parse two down to 1'; 294is $results, <<'EOF', 'Should have the 2-1 index'; 295<ul id="index"> 296 <li> 297 <ul> 298 <li><a href="#Foo">Foo</a></li> 299 </ul> 300 </li> 301 <li><a href="#Bar">Bar</a> 302 <ul> 303 <li> 304 <ul> 305 <li> 306 <ul> 307 <li><a href="#Four">Four</a></li> 308 <li><a href="#Four2">Four2</a></li> 309 </ul> 310 </li> 311 </ul> 312 </li> 313 </ul> 314 </li> 315</ul> 316 317<h2 id="Foo">Foo</h2> 318 319<h1 id="Bar">Bar</h1> 320 321<h4 id="Four">Four</h4> 322 323<h4 id="Four2">Four2</h4> 324 325EOF 326 327initialize($parser, $results); 328ok $parser->parse_string_document( "=head4 Foo" ), 329 'Parse just a four'; 330is $results, <<'EOF', 'Should have the 2-1 index'; 331<ul id="index"> 332 <li> 333 <ul> 334 <li> 335 <ul> 336 <li> 337 <ul> 338 <li><a href="#Foo">Foo</a></li> 339 </ul> 340 </li> 341 </ul> 342 </li> 343 </ul> 344 </li> 345</ul> 346 347<h4 id="Foo">Foo</h4> 348 349EOF 350 351initialize($parser, $results); 352ok $parser->parse_string_document( <<'EOF' ), 'Parse a mixture'; 353=head2 Foo 354 355=head3 Bar 356 357=head1 Baz 358 359=head4 Drink 360 361=head3 Sip 362 363=head4 Ouch 364 365=head1 Drip 366EOF 367 368is $results, <<'EOF', 'And it should work!'; 369<ul id="index"> 370 <li> 371 <ul> 372 <li><a href="#Foo">Foo</a> 373 <ul> 374 <li><a href="#Bar">Bar</a></li> 375 </ul> 376 </li> 377 </ul> 378 </li> 379 <li><a href="#Baz">Baz</a> 380 <ul> 381 <li> 382 <ul> 383 <li> 384 <ul> 385 <li><a href="#Drink">Drink</a></li> 386 </ul> 387 </li> 388 <li><a href="#Sip">Sip</a> 389 <ul> 390 <li><a href="#Ouch">Ouch</a></li> 391 </ul> 392 </li> 393 </ul> 394 </li> 395 </ul> 396 </li> 397 <li><a href="#Drip">Drip</a></li> 398</ul> 399 400<h2 id="Foo">Foo</h2> 401 402<h3 id="Bar">Bar</h3> 403 404<h1 id="Baz">Baz</h1> 405 406<h4 id="Drink">Drink</h4> 407 408<h3 id="Sip">Sip</h3> 409 410<h4 id="Ouch">Ouch</h4> 411 412<h1 id="Drip">Drip</h1> 413 414EOF 415 416initialize($parser, $results); 417$parser->html_header($header); 418$parser->html_footer($footer); 419$parser->backlink(1); 420ok $parser->parse_string_document( '=head1 Foo' ), 'Parse a header'; 421is $results, <<'EOF', 'Should have the index and a backlink'; 422 423<html> 424<head> 425<title></title> 426<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 427</head> 428<body id="_podtop_"> 429 430 431<ul id="index"> 432 <li><a href="#Foo">Foo</a></li> 433</ul> 434 435<a href="#_podtop_"><h1 id="Foo">Foo</h1></a> 436 437</body> 438</html> 439 440EOF 441 442initialize($parser, $results); 443$parser->html_header($header); 444$parser->html_footer($footer); 445$parser->backlink(1); 446ok $parser->parse_string_document( "=head1 Foo \n\n=head2 Bar \n\n=head1 Baz" ), 'Parse headers'; 447is $results, <<'EOF', 'Should have the index and backlinks'; 448 449<html> 450<head> 451<title></title> 452<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 453</head> 454<body id="_podtop_"> 455 456 457<ul id="index"> 458 <li><a href="#Foo">Foo</a> 459 <ul> 460 <li><a href="#Bar">Bar</a></li> 461 </ul> 462 </li> 463 <li><a href="#Baz">Baz</a></li> 464</ul> 465 466<a href="#_podtop_"><h1 id="Foo">Foo</h1></a> 467 468<h2 id="Bar">Bar</h2> 469 470<a href="#_podtop_"><h1 id="Baz">Baz</h1></a> 471 472</body> 473</html> 474 475EOF 476 477initialize($parser, $results); 478$parser->html_header($header); 479$parser->html_footer($footer); 480$parser->index(0); 481$parser->backlink(1); 482ok $parser->parse_string_document( "=head1 Foo \n\n=head1 Bar" ), 'Parse headers'; 483is $results, <<'EOF', 'Should have backlinks but no index'; 484 485<html> 486<head> 487<title></title> 488<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 489</head> 490<body id="_podtop_"> 491 492 493<a href="#_podtop_"><h1 id="Foo">Foo</h1></a> 494 495<a href="#_podtop_"><h1 id="Bar">Bar</h1></a> 496 497</body> 498</html> 499 500EOF 501 502initialize($parser, $results); 503$parser->html_header($header); 504$parser->html_footer($footer); 505$parser->backlink(1); 506$parser->html_h_level(2); 507ok $parser->parse_string_document( "=head1 Foo \n\n=head1 Bar" ), 'Parse headers'; 508is $results, <<'EOF', 'Should have index and backlinks around h2 elements'; 509 510<html> 511<head> 512<title></title> 513<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 514</head> 515<body id="_podtop_"> 516 517 518<ul id="index"> 519 <li> 520 <ul> 521 <li><a href="#Foo">Foo</a></li> 522 <li><a href="#Bar">Bar</a></li> 523 </ul> 524 </li> 525</ul> 526 527<a href="#_podtop_"><h2 id="Foo">Foo</h2></a> 528 529<a href="#_podtop_"><h2 id="Bar">Bar</h2></a> 530 531</body> 532</html> 533 534EOF 535 536initialize($parser, $results); 537$parser->anchor_items(1); 538ok $parser->parse_string_document( <<'EOPOD' ), 'Parse POD'; 539=head1 Foo 540 541=over 542 543=item test 544 545=item Test 2 546 547body of item 548 549=back 550 551=over 552 553=item * 554 555not anchored 556 557=back 558 559=over 560 561=item 1 562 563still not anchored 564 565=back 566EOPOD 567 568is $results, <<'EOF', 'Anchor =item directives'; 569<ul id="index"> 570 <li><a href="#Foo">Foo</a></li> 571</ul> 572 573<h1 id="Foo">Foo</h1> 574 575<dl> 576 577<dt id="test">test</dt> 578<dd> 579 580</dd> 581<dt id="Test-2">Test 2</dt> 582<dd> 583 584<p>body of item</p> 585 586</dd> 587</dl> 588 589<ul> 590 591<li><p>not anchored</p> 592 593</li> 594</ul> 595 596<ol> 597 598<li><p>still not anchored</p> 599 600</li> 601</ol> 602 603EOF 604 605initialize($parser, $results); 606$parser->anchor_items(0); 607ok $parser->parse_string_document( <<'EOPOD' ), 'Parse POD'; 608=head1 Foo 609 610=over 611 612=item test 613 614=item Test 2 615 616body of item 617 618=back 619 620=over 621 622=item * 623 624not anchored 625 626=back 627 628=over 629 630=item 1 631 632still not anchored 633 634=back 635EOPOD 636is $results, <<'EOF', 'Do not anchor =item directives'; 637<ul id="index"> 638 <li><a href="#Foo">Foo</a></li> 639</ul> 640 641<h1 id="Foo">Foo</h1> 642 643<dl> 644 645<dt>test</dt> 646<dd> 647 648</dd> 649<dt>Test 2</dt> 650<dd> 651 652<p>body of item</p> 653 654</dd> 655</dl> 656 657<ul> 658 659<li><p>not anchored</p> 660 661</li> 662</ul> 663 664<ol> 665 666<li><p>still not anchored</p> 667 668</li> 669</ol> 670 671EOF 672 673$ENV{FOO}= 1; 674 675initialize($parser, $results); 676ok $parser->parse_string_document( <<'EOPOD' ), 'Parse POD'; 677=head1 Foo 678 679Test links from perlpodspec: L</"About LE<lt>...E<gt> Codes"> 680 681=head1 About LE<lt>...E<gt> Codes 682 683Here it is 684EOPOD 685 686my $id = 'About-L...-Codes'; # what should this be? 687 688is $results, <<EOF, 'anchor and h1 use same section id for complex sections'; 689<ul id="index"> 690 <li><a href="#Foo">Foo</a></li> 691 <li><a href="#$id">About L<...> Codes</a></li> 692</ul> 693 694<h1 id="Foo">Foo</h1> 695 696<p>Test links from perlpodspec: <a href="#$id">"About L<...> Codes"</a></p> 697 698<h1 id="$id">About L<...> Codes</h1> 699 700<p>Here it is</p> 701 702EOF 703 704sub initialize { 705 $_[0] = Pod::Simple::XHTML->new; 706 $_[0]->html_header(''); 707 $_[0]->html_footer(''); 708 $_[0]->index(1); 709 $_[0]->output_string( \$results ); # Send the resulting output to a string 710 $_[1] = ''; 711 return; 712} 713