Debian lenny version packages
[pkg-perl] / deb-src / libhtml-tree-perl / libhtml-tree-perl-3.23 / t / parse.t
1 #!perl -Tw
2
3 use strict;
4 use Test;
5 my $DEBUG = 2;
6 BEGIN { plan tests => 40 }
7
8 use HTML::TreeBuilder;
9
10 print "#Using HTML::TreeBuilder version v$HTML::TreeBuilder::VERSION\n";
11 print "#Using HTML::Element version v$HTML::Element::VERSION\n";
12 print "#Using HTML::Parser version v", $HTML::Parser::VERSION || "?", "\n";
13 print "#Using HTML::Entities version v", $HTML::Entities::VERSION || "?", "\n";
14 print "#Using HTML::Tagset version v", $HTML::Tagset::VERSION || "?", "\n";
15 print "# Running under perl version $] for $^O",
16   (chr(65) eq 'A') ? "\n" : " in a non-ASCII world\n";
17 print "# Win32::BuildNumber ", &Win32::BuildNumber(), "\n"
18   if defined(&Win32::BuildNumber) and defined &Win32::BuildNumber();
19 print "# MacPerl verison $MacPerl::Version\n"
20   if defined $MacPerl::Version;
21 printf 
22   "# Current time local: %s\n# Current time GMT:   %s\n",
23   scalar(localtime($^T)), scalar(gmtime($^T));
24
25
26 ok 1;
27
28 {
29   my $tree = HTML::TreeBuilder->new;
30   $tree->parse('<title>foo</title><p>I like pie');
31   $tree->eof;
32   ok($tree->as_XML,
33    "<html><head><title>foo</title></head><body>"
34    ."<p>I like pie</p></body></html>\n"
35   );
36   $tree->delete;
37 }
38
39 ok !same('x' => 'y', 1);
40 ok !same('<p>' => 'y', 1);
41
42 ok same('' => '');
43 ok same('' => ' ');
44 ok same('' => '  ');
45
46 ok same('' => '<!-- tra la la -->');
47 ok same('' => '<!-- tra la la --><!-- foo -->');
48
49 ok same('' => \'<head></head><body></body>');
50
51 ok same('<head>' => '');
52
53 ok same('<head></head><body>' => \'<head></head><body></body>');
54
55 ok same( '<img alt="456" src="123">'  => '<img src="123" alt="456">' );
56 ok same( '<img alt="456" src="123">'  => '<img src="123"    alt="456">' );
57 ok same( '<img alt="456" src="123">'  => '<img src="123"    alt="456"   >' );
58
59 ok !same( '<img alt="456" >'  => '<img src="123"    alt="456"   >', 1 );
60
61
62 ok same( 'abc&#32;xyz'   => 'abc xyz' );
63 ok same( 'abc&#x20;xyz'  => 'abc xyz' );
64
65 ok same( 'abc&#43;xyz'   => 'abc+xyz' );
66 ok same( 'abc&#x2b;xyz'  => 'abc+xyz' );
67
68 ok same( '&#97;bc+xyz'   => 'abc+xyz' );
69 ok same( '&#x61;bc+xyz'  => 'abc+xyz' );
70
71 print "#\n# Now some list tests.\n#\n";
72
73
74 ok same('<ul><li>x</ul>after'      => '<ul><li>x</li></ul>after');
75 ok same('<ul><li>x<li>y</ul>after' => '<ul><li>x</li><li>y</li></ul>after');
76
77
78 ok same('<ul> <li>x</li> <li>y</li> </ul>after' => '<ul><li>x</li><li>y</li></ul>after');
79
80 ok same('<ul><li>x<li>y</ul>after' => 
81  \'<head></head><body><ul><li>x</li><li>y</li></ul>after</body>');
82
83
84 print "#\n# Now some table tests.\n#\n";
85
86 ok same('<table>x<td>y<td>z'
87         => '<table><tr><td>x</td><td>y</td><td>z</td></table>');
88
89 ok same('<table>x<td>y<tr>z'
90         => '<table><tr><td>x</td><td>y</td></tr><tr><td>z</td></tr></table>');
91
92
93 ok same(    '<table><tr><td>x</td><td>y</td></tr><tr><td>z</td></tr></table>'
94         =>  '<table><tr><td>x</td><td>y</td></tr><tr><td>z</td></tr></table>');
95 ok same(    '<table><tr><td>x</td><td>y</td></tr><tr><td>z</td></tr></table>'
96         =>  \'<head></head><body><table><tr><td>x</td><td>y</td></tr><tr><td>z</td></tr></table>');
97
98 ok same('<table>x'      => '<td>x');
99 ok same('<table>x'      => '<table><td>x');
100 ok same('<table>x'      => '<tr>x');
101 ok same('<table>x'      => '<tr><td>x');
102 ok same('<table>x'      => '<table><tr>x');
103 ok same('<table>x'      => '<table><tr><td>x');
104
105
106
107 print "#\n# Now some p tests.\n#\n";
108
109 ok same('<p>x<p>y<p>z'      => '<p>x</p><p>y</p><p>z');
110 ok same('<p>x<p>y<p>z'      => '<p>x</p><p>y<p>z</p>');
111 ok same('<p>x<p>y<p>z'      => '<p>x</p><p>y</p><p>z</p>');
112 ok same('<p>x<p>y<p>z'      => \'<head></head><body><p>x</p><p>y</p><p>z</p>');
113
114
115 sub same {
116   my($code1, $code2, $flip) = @_;
117   my $t1 = HTML::TreeBuilder->new;
118   my $t2 = HTML::TreeBuilder->new;
119   
120   if(ref $code1) { $t1->implicit_tags(0); $code1 = $$code1 }
121   if(ref $code2) { $t2->implicit_tags(0); $code2 = $$code2 }
122   
123   $t1->parse($code1); $t1->eof;
124   $t2->parse($code2); $t2->eof;
125   
126   my $out1 = $t1->as_XML;
127   my $out2 = $t2->as_XML;
128
129   my $rv = ($out1 eq $out2);
130   
131   #print $rv? "RV TRUE\n" : "RV FALSE\n";
132   #print $flip? "FLIP TRUE\n" : "FLIP FALSE\n";
133
134   if($flip ? (!$rv) : $rv) {
135     if($DEBUG > 2) {
136       print 
137         "In1 $code1\n",
138         "In2 $code2\n",
139         "Out1 $out1\n",
140         "Out2 $out2\n",
141         "\n\n";
142     }
143   } else {
144     local $_;
145     foreach my $line (
146       '',
147       "The following failure is at " . join(' : ' ,caller),
148       "Explanation of failure: " . ($flip ? 'same' : 'different')
149         . " parse trees!",
150       "Input code 1:", $code1,
151       "Input code 2:", $code2,
152       "Output tree (as XML) 1:", $out1,
153       "Output tree (as XML) 2:", $out2,
154     ) {
155       $_ = $line;
156       s/\n/\n# /g;
157       print "# ", $_, "\n";
158     }
159   }
160
161   $t1->delete;
162   $t2->delete;
163
164   return $rv;
165 }
166
167