49 lines
915 B
Perl
49 lines
915 B
Perl
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" />
|