use Test::More;
require HTML::Parser;
package P; @ISA = qw(HTML::Parser);
my @result;
sub start
{
my($self, $tag, $attr) = @_;
push @result, "START[$tag]";
for (sort keys %$attr) {
push @result, "\t$_: " . $attr->{$_};
}
$start++;
}
sub end
{
my($self, $tag) = @_;
push @result, "END[$tag]";
$end++;
}
sub text
{
my $self = shift;
push @result, "TEXT[$_[0]]";
$text++;
}
sub comment
{
my $self = shift;
push @result, "COMMENT[$_[0]]";
$comment++;
}
sub declaration
{
my $self = shift;
push @result, "DECLARATION[$_[0]]";
$declaration++;
}
package main;
@tests =
(
'' => ['START[a]', "\t\": \""],
'' => ['START[a/]',],
'' => ['START[a]', "\t/: /"],
'' => ['START[a]', "\ta/: a/"],
'' => ['START[a]', "\ta/: /"],
'' => ['START[a]', "\tx: foo\xA0bar"],
'' => ['START[a]', "\tx: foo bar"],
'<å >' => ['TEXT[<å]', 'TEXT[ >]'],
'2 < 5' => ['TEXT[2 ]', 'TEXT[<]', 'TEXT[ 5]'],
'2 <5> 2' => ['TEXT[2 ]', 'TEXT[<5>]', 'TEXT[ 2]'],
'2 ['TEXT[2 ]', 'TEXT[ 2' => ['TEXT[2 ]', 'START[a]', 'TEXT[ 2]'],
'2 ['TEXT[2 ]', 'TEXT[ 2" =>
['TEXT[2 ]', 'START[a]', "\thref: foo bar", 'TEXT[ 2]'],
'2 2' =>
['TEXT[2 ]', 'START[a]', "\tbar: bar", "\thref: foo", 'TEXT[ 2]'],
'2 2' =>
['TEXT[2 ]', 'START[a]', "\thref: foo bar", 'TEXT[ 2]'],
'2 2' =>
['TEXT[2 ]', 'START[a]', "\thref: foo'bar", 'TEXT[ 2]'],
"2 2" =>
['TEXT[2 ]', 'START[a]', "\thref: foo\"bar", 'TEXT[ 2]'],
"2 2" =>
['TEXT[2 ]', 'START[a]', "\thref: foo\"bar", 'TEXT[ 2]'],
'2 2' => ['TEXT[2 ]', 'START[a.b]', 'TEXT[ 2]'],
'2 2' =>
['TEXT[2 ]', 'START[a.b-12]', "\ta: a", "\ta.b: 2", 'TEXT[ 2]'],
'2 2' => ['TEXT[2 ]', 'START[a_b]', 'TEXT[ 2]'],
'' =>
['DECLARATION[ENTITY nbsp CDATA " " -- no-break space --]'],
'' => ['COMMENT[ comment ]'],
'' =>
['COMMENT[ comment ]', 'COMMENT[- comment ]'],
' comment -->' =>
['COMMENT[ comment comment ]'],
'' => ['COMMENT[ ]'],
);
plan tests => @tests / 2;
my $i = 0;
TEST:
while (@tests) {
++$i;
my ($html, $expected) = splice @tests, 0, 2;
@result = ();
$p = new P;
$p->strict_comment(1);
$p->parse($html)->eof;
ok(eq_array($expected, \@result)) or diag("Expected: @$expected\n",
"Got: @result\n");
}