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"); }