337 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			337 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| #--- 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();
 | 
