201 lines
4.7 KiB
Perl
201 lines
4.7 KiB
Perl
#--- generate.t ---------------------------------------------------------------
|
|
# function: Test ToC generation.
|
|
|
|
use strict;
|
|
use Test;
|
|
|
|
BEGIN { plan tests => 13; }
|
|
|
|
use HTML::Toc;
|
|
use HTML::TocGenerator;
|
|
|
|
my ($filename);
|
|
my $toc = HTML::Toc->new;
|
|
my $tocGenerator = HTML::TocGenerator->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';
|
|
<h1>Header</h1>
|
|
EOT
|
|
close(FILE);
|
|
}
|
|
|
|
|
|
END {
|
|
# Remove test file
|
|
unlink($filename) or warn "Can't unlink $filename: $!";
|
|
}
|
|
|
|
|
|
#--- 1. generate --------------------------------------------------------------
|
|
|
|
$tocGenerator->generate($toc, "<h1>Header</h1>");
|
|
ok($toc->format(), "<ul>\n<li>Header\n</ul>");
|
|
|
|
|
|
#--- 2. generateFromFile ------------------------------------------------------
|
|
|
|
$tocGenerator->generateFromFile($toc, $filename);
|
|
ok($toc->format(), "<ul>\n<li>Header\n</ul>");
|
|
|
|
|
|
#--- 3. generateFromFiles -----------------------------------------------------
|
|
|
|
$tocGenerator->generateFromFile($toc, [$filename, $filename]);
|
|
ok($toc->format(), "<ul>\n<li>Header\n<li>Header\n</ul>");
|
|
|
|
|
|
#--- 4. doLinkToToken -----------------------------------------------------
|
|
|
|
$toc->setOptions({'doLinkToToken' => 1});
|
|
$tocGenerator->generateFromFile($toc, $filename, {'globalGroups' => 1});
|
|
ok($toc->format(), "<ul>\n<li><a href=#h-1>Header</a>\n</ul>");
|
|
|
|
|
|
#--- 5. doLinkToFile -------------------------------------------------------
|
|
|
|
$toc->setOptions({'doLinkToFile' => 1});
|
|
$tocGenerator->generateFromFile($toc, $filename);
|
|
ok($toc->format(), "<ul>\n<li><a href=$filename#h-1>Header</a>\n</ul>");
|
|
|
|
|
|
#--- 6. templateAnchorHrefBegin -----------------------------------------------
|
|
|
|
# Set options
|
|
$toc->setOptions({'templateAnchorHrefBegin' => '"test-$file"'});
|
|
# Generate ToC
|
|
$tocGenerator->generateFromFile($toc, $filename);
|
|
# Test ToC
|
|
ok($toc->format(), "<ul>\n<li>test-".$filename."Header</a>\n</ul>");
|
|
# Reset options
|
|
$toc->setOptions({'templateAnchorHrefBegin' => undef});
|
|
|
|
|
|
#--- 7. templateAnchorHrefBegin function --------------------------------------
|
|
|
|
sub AssembleAnchorHrefBegin {
|
|
# Get arguments
|
|
my ($aFile, $aGroupId, $aLevel, $aNode) = @_;
|
|
# Return value
|
|
return $aFile . $aGroupId . $aLevel . $aNode;
|
|
} # AssembleAnchorHrefBegin()
|
|
|
|
|
|
# Set options
|
|
$toc->setOptions({'templateAnchorHrefBegin' => \&AssembleAnchorHrefBegin});
|
|
# Generate ToC
|
|
$tocGenerator->generateFromFile($toc, $filename);
|
|
# Test ToC
|
|
ok($toc->format(), "<ul>\n<li>".$filename."h11Header</a>\n</ul>");
|
|
# Reset options
|
|
$toc->setOptions({'templateAnchorHrefBegin' => undef});
|
|
|
|
|
|
#--- 8. levelToToc no levels available ---------------------------------------
|
|
|
|
$toc->setOptions({'levelToToc' => '2'});
|
|
$tocGenerator->generate($toc, "<h1>Header</h1>");
|
|
ok($toc->format(), "");
|
|
|
|
|
|
#--- 9. levelToToc level 1 ---------------------------------------------------
|
|
|
|
# Set options
|
|
$toc->setOptions({
|
|
'levelToToc' => '1',
|
|
'doLinkToToken' => 0,
|
|
});
|
|
$tocGenerator->generate($toc, "<h1>Header1</h1>\n<h2>Header2</h2>");
|
|
ok($toc->format(), "<ul>\n<li>Header1\n</ul>");
|
|
|
|
|
|
#--- 10. levelToToc level 2 --------------------------------------------------
|
|
|
|
# Set options
|
|
$toc->setOptions({
|
|
'levelToToc' => '2',
|
|
'doLinkToToken' => 0,
|
|
});
|
|
$tocGenerator->generate($toc, "<h1>Header1</h1>\n<h2>Header2</h2>");
|
|
ok($toc->format(), "<ul>\n<li>Header2\n</ul>");
|
|
# Restore options
|
|
$toc->setOptions({
|
|
'levelToToc' => '.*',
|
|
});
|
|
|
|
|
|
#--- 11. tokenToToc empty array ----------------------------------------------
|
|
|
|
# Set options
|
|
$toc->setOptions({'tokenToToc' => []});
|
|
$tocGenerator->generate($toc, "<h1>Header</h1>");
|
|
ok($toc->format(), "");
|
|
|
|
|
|
#--- 12. groups nested --------------------------------------------------------
|
|
|
|
$toc->setOptions({
|
|
'doNestGroup' => 1,
|
|
'tokenToToc' => [
|
|
{
|
|
'level' => 1,
|
|
'tokenBegin' => '<h1 class=-appendix>'
|
|
}, {
|
|
'groupId' => 'appendix',
|
|
'level' => 1,
|
|
'tokenBegin' => '<h1 class=appendix>'
|
|
}
|
|
]
|
|
});
|
|
$tocGenerator->generate(
|
|
$toc, "<h1>Header1</h1>\n<h1 class=appendix>Appendix</h1>"
|
|
);
|
|
ok($toc->format() . "\n", <<'EOT');
|
|
<ul>
|
|
<li>Header1
|
|
<ul>
|
|
<li>Appendix
|
|
</ul>
|
|
</ul>
|
|
EOT
|
|
|
|
|
|
#--- 13. groups not nested ----------------------------------------------------
|
|
|
|
$toc->setOptions({
|
|
'doNestGroup' => 0,
|
|
'tokenToToc' => [
|
|
{
|
|
'level' => 1,
|
|
'tokenBegin' => '<h1 class=-appendix>'
|
|
}, {
|
|
'groupId' => 'appendix',
|
|
'level' => 1,
|
|
'tokenBegin' => '<h1 class=appendix>'
|
|
}
|
|
]
|
|
});
|
|
$tocGenerator->generate(
|
|
$toc, "<h1>Header1</h1>\n<h1 class=appendix>Appendix</h1>"
|
|
);
|
|
ok($toc->format() . "\n", <<'EOT');
|
|
<ul>
|
|
<li>Header1
|
|
</ul>
|
|
<ul>
|
|
<li>Appendix
|
|
</ul>
|
|
EOT
|