1#--- format.t ----------------------------------------------------------------- 2# function: Test ToC formatting. 3 4use strict; 5use Test; 6 7BEGIN { plan tests => 6; } 8 9use HTML::Toc; 10use HTML::TocGenerator; 11use HTML::TocInsertor; 12 13my ($output, $content, $filename); 14my $toc = HTML::Toc->new; 15my $tocGenerator = HTML::TocGenerator->new; 16my $tocInsertor = HTML::TocInsertor->new; 17 18$toc->setOptions({ 19 'doLinkToToken' => 0, 20 'levelIndent' => 0, 21 'insertionPoint' => 'before <h1>', 22 'header' => '', 23 'footer' => '', 24}); 25 26 27BEGIN { 28 # Create test file 29 $filename = "file$$.htm"; 30 die "$filename is already there" if -e $filename; 31 open(FILE, ">$filename") || die "Can't create $filename: $!"; 32 print FILE <<'EOT'; close(FILE); 33<h1>Header</h1> 34EOT 35} 36 37 38END { 39 # Remove test file 40 unlink($filename) or warn "Can't unlink $filename: $!"; 41} 42 43 44#--- 1. templateLevelBegin ---------------------------------------------------- 45 46$toc->setOptions({ 47 'templateLevelBegin' => '"<ul class=toc_$groupId$level>\n"' 48}); 49$tocInsertor->insert($toc, "<h1>Header</h1>", {'output' => \$output}); 50ok($output, "<ul class=toc_h1>\n<li>Header\n</ul><h1>Header</h1>"); 51$toc->setOptions({'templateLevelBegin' => undef}); 52 53 54#--- 2. levelToToc ----------------------------------------------------------- 55 56$tocGenerator->generate($toc, "<h1>Header1</h1>\n<h2>Header2</h2>"); 57$toc->setOptions({'levelToToc' => '1'}); 58ok($toc->format(), "<ul>\n<li>Header1\n</ul>"); 59$toc->setOptions({'levelToToc' => '.*'}); 60 61 62#--- 3. groupToToc ----------------------------------------------------------- 63 64$toc->setOptions({ 65 'tokenToToc' => [{ 66 'level' => 1, 67 'tokenBegin' => '<h1 class=-foo>' 68 }, { 69 'groupId' => 'foo', 70 'level' => 1, 71 'tokenBegin' => '<h1 class=foo>' 72 }] 73}); 74$tocGenerator->generate($toc, "<h1>Header1</h1>\n<h1 class=foo>Foo</h1>"); 75$toc->setOptions({'groupToToc' => 'foo'}); 76ok($toc->format(), "<ul>\n<li>Foo\n</ul>"); 77$toc->setOptions({'groupToToc' => '.*'}); 78 79 80#--- 4. header & footer ------------------------------------------------------- 81 82$toc->setOptions({ 83 'tokenToToc' => [{ 84 'level' => 1, 85 'tokenBegin' => '<h1>' 86 }], 87 'header' => '<!-- TocHeader -->', 88 'footer' => '<!-- TocFooter -->', 89}); 90$tocInsertor->insert($toc, "<h1>Header1</h1>", {'output' => \$output}); 91ok("$output\n", <<EOT); 92<!-- TocHeader --><ul> 93<li>Header1 94</ul><!-- TocFooter --><h1>Header1</h1> 95EOT 96 97 98 # Test 'doSingleStepLevel' => 1 99TestSingleStepLevel1(); 100 # Test 'doSingleStepLevel' => 0 101TestSingleStepLevel0(); 102 103 104#--- 5. TestSingleStepLevel1 -------------------------------------------------- 105 106sub TestSingleStepLevel1 { 107 my $toc = new HTML::Toc; 108 my $tocGenerator = new HTML::TocGenerator; 109 110 # Generate ToC 111 $tocGenerator->generate($toc, <<EOT); 112<h1>Header 1</h1> 113<h3>Header 3</h3> 114EOT 115 # Compare output 116 ok($toc->format(), <<EOT); 117 118<!-- Table of Contents generated by Perl - HTML::Toc --> 119<ul> 120 <li><a href=#h-1>Header 1</a> 121 <ul> 122 <ul> 123 <li><a href=#h-1.0.1>Header 3</a> 124 </ul> 125 </ul> 126</ul> 127<!-- End of generated Table of Contents --> 128EOT 129} # TestSingleStepLevel1() 130 131 132#--- 6. TestSingleStepLevel0 -------------------------------------------------- 133 134sub TestSingleStepLevel0 { 135 my $toc = new HTML::Toc; 136 my $tocGenerator = new HTML::TocGenerator; 137 138 # Set ToC options 139 $toc->setOptions({'doSingleStepLevel' => 0}); 140 # Generate ToC 141 $tocGenerator->generate($toc, <<EOT); 142<h1>Header 1</h1> 143<h3>Header 3</h3> 144EOT 145 # Compare output 146 ok($toc->format(), <<EOT); 147 148<!-- Table of Contents generated by Perl - HTML::Toc --> 149<ul> 150 <li><a href=#h-1>Header 1</a> 151 <ul> 152 <li><a href=#h-1.0.1>Header 3</a> 153 </ul> 154</ul> 155<!-- End of generated Table of Contents --> 156EOT 157} # TestSingleStepLevel0() 158