# Check that the magic signature at the top of struct p_state works and that we
# catch modifications to _hparser_xs_state gracefully
use Test::More tests => 5;
use HTML::Parser;
$p = HTML::Parser->new(api_version => 3);
$p->xml_mode(1);
# We should not be able to simply modify this stuff
eval {
${$p->{_hparser_xs_state}} += 4;
};
like($@, qr/^Modification of a read-only value attempted/);
my $x = delete $p->{_hparser_xs_state};
eval {
$p->xml_mode(1);
};
like($@, qr/^Can't find '_hparser_xs_state'/);
$p->{_hparser_xs_state} = \($$x + 16);
eval {
$p->xml_mode(1);
};
like($@, $] >= 5.008 ? qr/^Lost parser state magic/ : qr/^Bad signature in parser state object/);
$p->{_hparser_xs_state} = 33;
eval {
$p->xml_mode(1);
};
like($@, qr/^_hparser_xs_state element is not a reference/);
$p->{_hparser_xs_state} = $x;
ok($p->xml_mode(0));