• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#--- insert.t -----------------------------------------------------------------
2# function: Test ToC insertion.
3
4use strict;
5use Test;
6
7BEGIN { plan tests => 10; }
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	'header'            => "",
22	'footer'            => "",
23});
24
25
26BEGIN {
27		# Create test file
28	$filename = "file$$.htm";
29	die "$filename is already there" if -e $filename;
30	open(FILE, ">$filename") || die "Can't create $filename: $!";
31	print FILE <<'EOT'; close(FILE);
32<h1>Header</h1>
33EOT
34}
35
36
37END {
38		# Remove test file
39	unlink($filename) or warn "Can't unlink $filename: $!";
40}
41
42
43#--- 1. insert before start ---------------------------------------------------
44
45$toc->setOptions({'insertionPoint' => 'before <h1>'});
46	# Generate ToC
47$tocGenerator->generate($toc, "<h1>Header</h1>");
48$tocInsertor->insert($toc, "<h1>Header</h1>", {
49	'output'        => \$output,
50	'doGenerateToc' => 0
51});
52	# Test ToC
53ok($output, "<ul>\n<li>Header\n</ul><h1>Header</h1>");
54
55
56#--- 2. insert after start ----------------------------------------------------
57
58$toc->setOptions({'insertionPoint' => 'after <h1>'});
59	# Generate ToC
60$tocGenerator->generate($toc, "<h1>Header</h1>");
61$tocInsertor->insert($toc, "<h1>Header</h1>", {
62	'output' => \$output,
63	'doGenerateToc' => 0
64});
65	# Test ToC
66ok($output, "<h1><ul>\n<li>Header\n</ul>Header</h1>");
67
68
69#--- 3. insert before end -----------------------------------------------------
70
71$toc->setOptions({'insertionPoint' => 'before </h1>'});
72	# Generate ToC
73$tocGenerator->generate($toc, "<h1>Header</h1>");
74$tocInsertor->insert($toc, "<h1>Header</h1>", {
75	'output' => \$output,
76	'doGenerateToc' => 0
77});
78	# Test ToC
79ok($output, "<h1>Header<ul>\n<li>Header\n</ul></h1>");
80
81
82#--- 4. insert after end ------------------------------------------------------
83
84$toc->setOptions({'insertionPoint' => 'after </h1>'});
85	# Generate ToC
86$tocGenerator->generate($toc, "<h1>Header</h1>");
87$tocInsertor->insert($toc, "<h1>Header</h1>", {
88	'output' => \$output,
89	'doGenerateToc' => 0
90});
91	# Test ToC
92ok($output, "<h1>Header</h1><ul>\n<li>Header\n</ul>");
93
94
95#--- 5. outputFile ------------------------------------------------------------
96
97$toc->setOptions({'insertionPoint' => 'before <h1>'});
98	# Generate ToC
99$tocGenerator->generate($toc, "<h1>Header</h1>");
100	# Insert ToC, output to file
101$tocInsertor->insert($toc, "<h1>Header</h1>", {
102	'outputFile' => $filename,
103	'doGenerateToc' => 0
104});
105	# Read outputfile
106open(FILE, "<$filename") || die "Can't open $filename: $!";
107$content = join('', <FILE>);
108close(FILE);
109	# Test ToC
110ok($output, "<ul>\n<li>Header\n</ul><h1>Header</h1>");
111
112
113#--- 6. empty toc -------------------------------------------------------------
114
115$tocGenerator->generate($toc, "");
116$tocInsertor->insert($toc, "", {
117	'output' => \$output,
118	'doGenerateToc' => 0
119});
120ok($output, "");
121
122
123#--- TestAfterDeclaration() ---------------------------------------------------
124# function: Test putting HTML comment after declaration.
125
126sub TestAfterDeclaration {
127		# Create objects
128	my $toc         = HTML::Toc->new();
129	my $tocInsertor = HTML::TocInsertor->new();
130	my $output;
131
132		# Set ToC options
133   $toc->setOptions({
134		'insertionPoint' => "after <!ToC>",
135   });
136		# Generate ToC
137	$tocInsertor->insert($toc, <<EOT, {'output' => \$output});
138<!ToC><body>
139   <h1>Appendix</h1>
140   <h2>Appendix Paragraph</h2>
141   <h1>Appendix</h1>
142   <h2>Appendix Paragraph</h2>
143</body>
144EOT
145		# Test ToC
146	ok($output, <<EOT);
147<!ToC>
148<!-- Table of Contents generated by Perl - HTML::Toc -->
149<ul>
150   <li><a href=#h-1>Appendix</a>
151   <ul>
152      <li><a href=#h-1.1>Appendix Paragraph</a>
153   </ul>
154   <li><a href=#h-2>Appendix</a>
155   <ul>
156      <li><a href=#h-2.1>Appendix Paragraph</a>
157   </ul>
158</ul>
159<!-- End of generated Table of Contents -->
160<body>
161   <a name=h-1><h1>Appendix</h1></a>
162   <a name=h-1.1><h2>Appendix Paragraph</h2></a>
163   <a name=h-2><h1>Appendix</h1></a>
164   <a name=h-2.1><h2>Appendix Paragraph</h2></a>
165</body>
166EOT
167}  # TestAfterDeclaration()
168
169
170#--- TestNumberingStyle() -----------------------------------------------------
171# function: Test numberingstyle.
172
173sub TestNumberingStyle {
174		# Create objects
175	my $toc         = HTML::Toc->new();
176	my $tocInsertor = HTML::TocInsertor->new();
177	my $output;
178
179		# Set ToC options
180   $toc->setOptions({
181		'numberingStyle'            => 'lower-alpha',
182		'doNumberToken'             => 1,
183      'tokenToToc' => [{
184            'tokenBegin'          => '<h1>',
185			}, {
186            'tokenBegin' 			 => '<h2>',
187            'level'      			 => 2,
188				'numberingStyle'      => 'upper-alpha'
189			}, {
190            'tokenBegin' 			 => '<h3>',
191            'level'      			 => 3,
192				'numberingStyle'      => 'decimal'
193         }]
194   });
195		# Generate ToC
196	$tocInsertor->insert($toc, <<EOT, {'output' => \$output});
197<body>
198   <h1>Chapter</h1>
199   <h2>Paragraph</h2>
200   <h3>Paragraph</h3>
201   <h3>Paragraph</h3>
202   <h3>Paragraph</h3>
203</body>
204EOT
205		# Test ToC
206	ok($output, <<EOT);
207<body>
208<!-- Table of Contents generated by Perl - HTML::Toc -->
209<ul>
210   <li><a href=#h-a>Chapter</a>
211   <ul>
212      <li><a href=#h-a.A>Paragraph</a>
213      <ul>
214         <li><a href=#h-a.A.1>Paragraph</a>
215         <li><a href=#h-a.A.2>Paragraph</a>
216         <li><a href=#h-a.A.3>Paragraph</a>
217      </ul>
218   </ul>
219</ul>
220<!-- End of generated Table of Contents -->
221
222   <a name=h-a><h1>a &nbsp;Chapter</h1></a>
223   <a name=h-a.A><h2>a.A &nbsp;Paragraph</h2></a>
224   <a name=h-a.A.1><h3>a.A.1 &nbsp;Paragraph</h3></a>
225   <a name=h-a.A.2><h3>a.A.2 &nbsp;Paragraph</h3></a>
226   <a name=h-a.A.3><h3>a.A.3 &nbsp;Paragraph</h3></a>
227</body>
228EOT
229}  # TestNumberingStyle()
230
231
232#--- TestReplaceComment() -----------------------------------------------------
233# function: Test replacing HTML comment with ToC.
234
235sub TestReplaceComment {
236		# Create objects
237	my $toc         = HTML::Toc->new();
238	my $tocInsertor = HTML::TocInsertor->new();
239	my $output;
240
241		# Set ToC options
242   $toc->setOptions({
243		'insertionPoint' => "replace <!-- ToC -->"
244   });
245		# Generate ToC
246	$tocInsertor->insert($toc, <<EOT, {'output' => \$output});
247<!-- ToC -->
248<body>
249   <h1>Appendix</h1>
250   <h2>Appendix Paragraph</h2>
251   <h1>Appendix</h1>
252   <h2>Appendix Paragraph</h2>
253</body>
254EOT
255		# Test ToC
256	ok($output, <<EOT);
257
258<!-- Table of Contents generated by Perl - HTML::Toc -->
259<ul>
260   <li><a href=#h-1>Appendix</a>
261   <ul>
262      <li><a href=#h-1.1>Appendix Paragraph</a>
263   </ul>
264   <li><a href=#h-2>Appendix</a>
265   <ul>
266      <li><a href=#h-2.1>Appendix Paragraph</a>
267   </ul>
268</ul>
269<!-- End of generated Table of Contents -->
270
271<body>
272   <a name=h-1><h1>Appendix</h1></a>
273   <a name=h-1.1><h2>Appendix Paragraph</h2></a>
274   <a name=h-2><h1>Appendix</h1></a>
275   <a name=h-2.1><h2>Appendix Paragraph</h2></a>
276</body>
277EOT
278}  # TestReplaceComment()
279
280
281#--- TestReplaceText() -----------------------------------------------------
282# function: Test replacing HTML comment with ToC.
283
284sub TestReplaceText {
285		# Create objects
286	my $toc         = HTML::Toc->new();
287	my $tocInsertor = HTML::TocInsertor->new();
288	my $output;
289
290		# Set ToC options
291   $toc->setOptions({
292		'insertionPoint' => "replace ToC will be placed here[,]"
293   });
294		# Generate ToC
295	$tocInsertor->insert($toc, <<EOT, {'output' => \$output});
296The ToC will be placed here, overnight.
297<body>
298   <h1>Appendix</h1>
299   <h2>Appendix Paragraph</h2>
300   <h1>Appendix</h1>
301   <h2>Appendix Paragraph</h2>
302</body>
303EOT
304		# Test ToC
305	ok($output, <<EOT);
306
307<!-- Table of Contents generated by Perl - HTML::Toc -->
308<ul>
309   <li><a href=#h-1>Appendix</a>
310   <ul>
311      <li><a href=#h-1.1>Appendix Paragraph</a>
312   </ul>
313   <li><a href=#h-2>Appendix</a>
314   <ul>
315      <li><a href=#h-2.1>Appendix Paragraph</a>
316   </ul>
317</ul>
318<!-- End of generated Table of Contents -->
319<body>
320   <a name=h-1><h1>Appendix</h1></a>
321   <a name=h-1.1><h2>Appendix Paragraph</h2></a>
322   <a name=h-2><h1>Appendix</h1></a>
323   <a name=h-2.1><h2>Appendix Paragraph</h2></a>
324</body>
325EOT
326}  # TestReplaceText()
327
328
329	# 7.  Test 'numberingStyle'
330TestNumberingStyle();
331	# 8.  Test replace comment
332TestReplaceComment();
333	# 9.  Test after declaration
334TestAfterDeclaration();
335	# 10.  Test replace text
336TestReplaceText();
337