1 #--- propagate.t --------------------------------------------------------------
2 # function: Test ToC propagation.
7 BEGIN { plan tests => 10; }
10 use HTML::TocGenerator;
11 use HTML::TocInsertor;
13 my ($output, $content, $filename);
14 my $toc = HTML::Toc->new;
15 my $tocGenerator = HTML::TocGenerator->new;
16 my $tocInsertor = HTML::TocInsertor->new;
21 'insertionPoint' => 'before <h1>',
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);
40 unlink($filename) or warn "Can't unlink $filename: $!";
44 #--- 1. propagate -------------------------------------------------------------
46 $tocInsertor->insert($toc, "<h1>Header</h1>", {'output' => \$output});
47 ok($output, "<ul>\n<li>Header\n</ul><h1>Header</h1>");
50 #--- 2. propagateFile ---------------------------------------------------------
52 $tocInsertor->insertIntoFile($toc, $filename, {'output' => \$output});
53 ok($output, "<ul>\n<li>Header\n</ul><h1>Header</h1>\n");
56 #--- 3. doLinkToToken -----------------------------------------------------
58 $toc->setOptions({'doLinkToToken' => 1});
59 $tocInsertor->insert($toc, "<h1>Header</h1>", {'output' => \$output});
60 ok("$output\n", <<'EOT');
62 <li><a href=#h-1>Header</a>
63 </ul><a name=h-1><h1>Header</h1></a>
67 #--- 4. templateAnchorHrefBegin -----------------------------------------------
70 {'templateAnchorHrefBegin' => '"<$node${file}test${groupId}>"'}
72 $tocInsertor->insertIntoFile($toc, $filename, {'output' => \$output});
73 ok($output, "<ul>\n<li><1${filename}testh>Header</a>\n</ul><a name=h-1><h1>Header</h1></a>\n");
74 $toc->setOptions({'templateAnchorHrefBegin' => undef});
77 #--- 5. templateAnchorNameBegin -----------------------------------------------
80 'templateAnchorName' => '"$node$groupId"',
81 'templateAnchorNameBegin' => '"<$anchorName>"'
83 $tocInsertor->insert($toc, "<h1>Header</h1>", {'output' => \$output});
84 ok($output, "<ul>\n<li><a href=#1h>Header</a>\n</ul><1h><h1>Header</h1></a>");
85 $toc->setOptions({'templateAnchorName' => undef});
88 #--- 6. templateAnchorName function -------------------------------------------
90 sub AssembleAnchorName {
92 my ($aFile, $aGroupId, $aLevel, $aNode) = @_;
94 return $aFile . $aGroupId . $aLevel . $aNode;
95 } # AssembleAnchorName()
98 $toc->setOptions({'templateAnchorNameBegin' => \&AssembleAnchorName});
100 $tocInsertor->insert($toc, "<h1>Header</h1>", {'output' => \$output});
102 ok($output, "<ul>\n<li><a href=#h-1>Header</a>\n</ul>h11<h1>Header</h1></a>");
104 $toc->setOptions({'templateAnchorNameBegin' => undef});
107 #--- 7. doNumberToken --------------------------------------------------------
110 $toc->setOptions({'doNumberToken' => 1});
111 $tocInsertor->insert($toc, "<h1>Header</h1>", {'output' => \$output});
112 ok("$output\n", <<'EOT');
114 <li><a href=#h-1>Header</a>
115 </ul><a name=h-1><h1>1 Header</h1></a>
119 'templateTokenNumber' => undef,
124 #--- 8. templateTokenNumber ---------------------------------------------------
128 'templateTokenNumber' => '"-$node-"',
132 $tocInsertor->insert($toc, "<h1>Header</h1>", {'output' => \$output});
134 ok("$output\n", <<'EOT');
136 <li><a href=#h-1>Header</a>
137 </ul><a name=h-1><h1>-1-Header</h1></a>
141 'doNumberToken' => 0,
142 'templateTokenNumber' => undef
146 #--- 9. numberingStyle --------------------------------------------------------
150 'doNumberToken' => 1,
153 'tokenBegin' => '<h1>',
154 'numberingStyle' => 'lower-alpha'
158 $tocInsertor->insert($toc, "<h1>Header</h1>", {'output' => \$output});
160 ok("$output\n", <<'EOT');
162 <li><a href=#h-a>Header</a>
163 </ul><a name=h-a><h1>a Header</h1></a>
167 'doNumberToken' => 0,
168 'tokenToToc' => undef,
172 #--- 10. declaration pass through ---------------------------------------------
174 $tocInsertor->insert($toc, '<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><h1>Header</h1>', {'output' => \$output});
176 ok($output, '<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><h1>Header</h1>');