libxml-libxml-perl/t/72destruction.t

49 lines
915 B
Perl
Raw Normal View History

2022-09-27 15:00:17 +08:00
use strict;
use warnings;
use Test::More;
use Scalar::Util;
use XML::LibXML;
if (defined (&Scalar::Util::weaken))
{
plan tests => 1;
}
else
{
plan skip_all => 'Need Scalar::Util::weaken';
}
my $is_destroyed;
BEGIN
{
no warnings 'once', 'redefine';
my $old = \&XML::LibXML::Element::DESTROY;
*XML::LibXML::Element::DESTROY = sub
{
$is_destroyed++;
$old->(@_);
};
}
# Create element...
my $root = XML::LibXML->load_xml( IO => \*DATA )->documentElement;
# allow %hash to go out of scope quickly.
{
my %hash = %$root;
# assignment to ensure block is not optimized away
$hash{foo} = 'phooey';
}
# Destroy element...
undef($root);
# Touch the fieldhash...
my %other = %{ XML::LibXML->load_xml( string => '<foo/>' )->documentElement };
# TEST
ok($is_destroyed, "does not leak memory");
__DATA__
<root attr1="foo" xmlns:x="http://localhost/" x:attr2="bar" />