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
 | 
