| #--- insert.t ----------------------------------------------------------------- |
| # function: Test ToC insertion. |
| |
| use strict; |
| use Test; |
| |
| BEGIN { plan tests => 10; } |
| |
| use HTML::Toc; |
| use HTML::TocGenerator; |
| use HTML::TocInsertor; |
| |
| my ($output, $content, $filename); |
| my $toc = HTML::Toc->new; |
| my $tocGenerator = HTML::TocGenerator->new; |
| my $tocInsertor = HTML::TocInsertor->new; |
| |
| $toc->setOptions({ |
| 'doLinkToToken' => 0, |
| 'levelIndent' => 0, |
| 'header' => "", |
| 'footer' => "", |
| }); |
| |
| |
| BEGIN { |
| # Create test file |
| $filename = "file$$.htm"; |
| die "$filename is already there" if -e $filename; |
| open(FILE, ">$filename") || die "Can't create $filename: $!"; |
| print FILE <<'EOT'; close(FILE); |
| <h1>Header</h1> |
| EOT |
| } |
| |
| |
| END { |
| # Remove test file |
| unlink($filename) or warn "Can't unlink $filename: $!"; |
| } |
| |
| |
| #--- 1. insert before start --------------------------------------------------- |
| |
| $toc->setOptions({'insertionPoint' => 'before <h1>'}); |
| # Generate ToC |
| $tocGenerator->generate($toc, "<h1>Header</h1>"); |
| $tocInsertor->insert($toc, "<h1>Header</h1>", { |
| 'output' => \$output, |
| 'doGenerateToc' => 0 |
| }); |
| # Test ToC |
| ok($output, "<ul>\n<li>Header\n</ul><h1>Header</h1>"); |
| |
| |
| #--- 2. insert after start ---------------------------------------------------- |
| |
| $toc->setOptions({'insertionPoint' => 'after <h1>'}); |
| # Generate ToC |
| $tocGenerator->generate($toc, "<h1>Header</h1>"); |
| $tocInsertor->insert($toc, "<h1>Header</h1>", { |
| 'output' => \$output, |
| 'doGenerateToc' => 0 |
| }); |
| # Test ToC |
| ok($output, "<h1><ul>\n<li>Header\n</ul>Header</h1>"); |
| |
| |
| #--- 3. insert before end ----------------------------------------------------- |
| |
| $toc->setOptions({'insertionPoint' => 'before </h1>'}); |
| # Generate ToC |
| $tocGenerator->generate($toc, "<h1>Header</h1>"); |
| $tocInsertor->insert($toc, "<h1>Header</h1>", { |
| 'output' => \$output, |
| 'doGenerateToc' => 0 |
| }); |
| # Test ToC |
| ok($output, "<h1>Header<ul>\n<li>Header\n</ul></h1>"); |
| |
| |
| #--- 4. insert after end ------------------------------------------------------ |
| |
| $toc->setOptions({'insertionPoint' => 'after </h1>'}); |
| # Generate ToC |
| $tocGenerator->generate($toc, "<h1>Header</h1>"); |
| $tocInsertor->insert($toc, "<h1>Header</h1>", { |
| 'output' => \$output, |
| 'doGenerateToc' => 0 |
| }); |
| # Test ToC |
| ok($output, "<h1>Header</h1><ul>\n<li>Header\n</ul>"); |
| |
| |
| #--- 5. outputFile ------------------------------------------------------------ |
| |
| $toc->setOptions({'insertionPoint' => 'before <h1>'}); |
| # Generate ToC |
| $tocGenerator->generate($toc, "<h1>Header</h1>"); |
| # Insert ToC, output to file |
| $tocInsertor->insert($toc, "<h1>Header</h1>", { |
| 'outputFile' => $filename, |
| 'doGenerateToc' => 0 |
| }); |
| # Read outputfile |
| open(FILE, "<$filename") || die "Can't open $filename: $!"; |
| $content = join('', <FILE>); |
| close(FILE); |
| # Test ToC |
| ok($output, "<ul>\n<li>Header\n</ul><h1>Header</h1>"); |
| |
| |
| #--- 6. empty toc ------------------------------------------------------------- |
| |
| $tocGenerator->generate($toc, ""); |
| $tocInsertor->insert($toc, "", { |
| 'output' => \$output, |
| 'doGenerateToc' => 0 |
| }); |
| ok($output, ""); |
| |
| |
| #--- TestAfterDeclaration() --------------------------------------------------- |
| # function: Test putting HTML comment after declaration. |
| |
| sub TestAfterDeclaration { |
| # Create objects |
| my $toc = HTML::Toc->new(); |
| my $tocInsertor = HTML::TocInsertor->new(); |
| my $output; |
| |
| # Set ToC options |
| $toc->setOptions({ |
| 'insertionPoint' => "after <!ToC>", |
| }); |
| # Generate ToC |
| $tocInsertor->insert($toc, <<EOT, {'output' => \$output}); |
| <!ToC><body> |
| <h1>Appendix</h1> |
| <h2>Appendix Paragraph</h2> |
| <h1>Appendix</h1> |
| <h2>Appendix Paragraph</h2> |
| </body> |
| EOT |
| # Test ToC |
| ok($output, <<EOT); |
| <!ToC> |
| <!-- Table of Contents generated by Perl - HTML::Toc --> |
| <ul> |
| <li><a href=#h-1>Appendix</a> |
| <ul> |
| <li><a href=#h-1.1>Appendix Paragraph</a> |
| </ul> |
| <li><a href=#h-2>Appendix</a> |
| <ul> |
| <li><a href=#h-2.1>Appendix Paragraph</a> |
| </ul> |
| </ul> |
| <!-- End of generated Table of Contents --> |
| <body> |
| <a name=h-1><h1>Appendix</h1></a> |
| <a name=h-1.1><h2>Appendix Paragraph</h2></a> |
| <a name=h-2><h1>Appendix</h1></a> |
| <a name=h-2.1><h2>Appendix Paragraph</h2></a> |
| </body> |
| EOT |
| } # TestAfterDeclaration() |
| |
| |
| #--- TestNumberingStyle() ----------------------------------------------------- |
| # function: Test numberingstyle. |
| |
| sub TestNumberingStyle { |
| # Create objects |
| my $toc = HTML::Toc->new(); |
| my $tocInsertor = HTML::TocInsertor->new(); |
| my $output; |
| |
| # Set ToC options |
| $toc->setOptions({ |
| 'numberingStyle' => 'lower-alpha', |
| 'doNumberToken' => 1, |
| 'tokenToToc' => [{ |
| 'tokenBegin' => '<h1>', |
| }, { |
| 'tokenBegin' => '<h2>', |
| 'level' => 2, |
| 'numberingStyle' => 'upper-alpha' |
| }, { |
| 'tokenBegin' => '<h3>', |
| 'level' => 3, |
| 'numberingStyle' => 'decimal' |
| }] |
| }); |
| # Generate ToC |
| $tocInsertor->insert($toc, <<EOT, {'output' => \$output}); |
| <body> |
| <h1>Chapter</h1> |
| <h2>Paragraph</h2> |
| <h3>Paragraph</h3> |
| <h3>Paragraph</h3> |
| <h3>Paragraph</h3> |
| </body> |
| EOT |
| # Test ToC |
| ok($output, <<EOT); |
| <body> |
| <!-- Table of Contents generated by Perl - HTML::Toc --> |
| <ul> |
| <li><a href=#h-a>Chapter</a> |
| <ul> |
| <li><a href=#h-a.A>Paragraph</a> |
| <ul> |
| <li><a href=#h-a.A.1>Paragraph</a> |
| <li><a href=#h-a.A.2>Paragraph</a> |
| <li><a href=#h-a.A.3>Paragraph</a> |
| </ul> |
| </ul> |
| </ul> |
| <!-- End of generated Table of Contents --> |
| |
| <a name=h-a><h1>a Chapter</h1></a> |
| <a name=h-a.A><h2>a.A Paragraph</h2></a> |
| <a name=h-a.A.1><h3>a.A.1 Paragraph</h3></a> |
| <a name=h-a.A.2><h3>a.A.2 Paragraph</h3></a> |
| <a name=h-a.A.3><h3>a.A.3 Paragraph</h3></a> |
| </body> |
| EOT |
| } # TestNumberingStyle() |
| |
| |
| #--- TestReplaceComment() ----------------------------------------------------- |
| # function: Test replacing HTML comment with ToC. |
| |
| sub TestReplaceComment { |
| # Create objects |
| my $toc = HTML::Toc->new(); |
| my $tocInsertor = HTML::TocInsertor->new(); |
| my $output; |
| |
| # Set ToC options |
| $toc->setOptions({ |
| 'insertionPoint' => "replace <!-- ToC -->" |
| }); |
| # Generate ToC |
| $tocInsertor->insert($toc, <<EOT, {'output' => \$output}); |
| <!-- ToC --> |
| <body> |
| <h1>Appendix</h1> |
| <h2>Appendix Paragraph</h2> |
| <h1>Appendix</h1> |
| <h2>Appendix Paragraph</h2> |
| </body> |
| EOT |
| # Test ToC |
| ok($output, <<EOT); |
| |
| <!-- Table of Contents generated by Perl - HTML::Toc --> |
| <ul> |
| <li><a href=#h-1>Appendix</a> |
| <ul> |
| <li><a href=#h-1.1>Appendix Paragraph</a> |
| </ul> |
| <li><a href=#h-2>Appendix</a> |
| <ul> |
| <li><a href=#h-2.1>Appendix Paragraph</a> |
| </ul> |
| </ul> |
| <!-- End of generated Table of Contents --> |
| |
| <body> |
| <a name=h-1><h1>Appendix</h1></a> |
| <a name=h-1.1><h2>Appendix Paragraph</h2></a> |
| <a name=h-2><h1>Appendix</h1></a> |
| <a name=h-2.1><h2>Appendix Paragraph</h2></a> |
| </body> |
| EOT |
| } # TestReplaceComment() |
| |
| |
| #--- TestReplaceText() ----------------------------------------------------- |
| # function: Test replacing HTML comment with ToC. |
| |
| sub TestReplaceText { |
| # Create objects |
| my $toc = HTML::Toc->new(); |
| my $tocInsertor = HTML::TocInsertor->new(); |
| my $output; |
| |
| # Set ToC options |
| $toc->setOptions({ |
| 'insertionPoint' => "replace ToC will be placed here[,]" |
| }); |
| # Generate ToC |
| $tocInsertor->insert($toc, <<EOT, {'output' => \$output}); |
| The ToC will be placed here, overnight. |
| <body> |
| <h1>Appendix</h1> |
| <h2>Appendix Paragraph</h2> |
| <h1>Appendix</h1> |
| <h2>Appendix Paragraph</h2> |
| </body> |
| EOT |
| # Test ToC |
| ok($output, <<EOT); |
| |
| <!-- Table of Contents generated by Perl - HTML::Toc --> |
| <ul> |
| <li><a href=#h-1>Appendix</a> |
| <ul> |
| <li><a href=#h-1.1>Appendix Paragraph</a> |
| </ul> |
| <li><a href=#h-2>Appendix</a> |
| <ul> |
| <li><a href=#h-2.1>Appendix Paragraph</a> |
| </ul> |
| </ul> |
| <!-- End of generated Table of Contents --> |
| <body> |
| <a name=h-1><h1>Appendix</h1></a> |
| <a name=h-1.1><h2>Appendix Paragraph</h2></a> |
| <a name=h-2><h1>Appendix</h1></a> |
| <a name=h-2.1><h2>Appendix Paragraph</h2></a> |
| </body> |
| EOT |
| } # TestReplaceText() |
| |
| |
| # 7. Test 'numberingStyle' |
| TestNumberingStyle(); |
| # 8. Test replace comment |
| TestReplaceComment(); |
| # 9. Test after declaration |
| TestAfterDeclaration(); |
| # 10. Test replace text |
| TestReplaceText(); |