|
Packit |
16975c |
#!/usr/bin/perl -T
|
|
Packit |
16975c |
|
|
Packit |
16975c |
use warnings;
|
|
Packit |
16975c |
use strict;
|
|
Packit |
16975c |
|
|
Packit |
16975c |
use Test::More;
|
|
Packit |
16975c |
|
|
Packit |
16975c |
BEGIN {
|
|
Packit |
16975c |
plan skip_all => "Weakref support required"
|
|
Packit |
16975c |
unless eval "use Scalar::Util qw(weaken); 1";
|
|
Packit |
16975c |
|
|
Packit |
16975c |
plan tests => 8;
|
|
Packit |
16975c |
}
|
|
Packit |
16975c |
|
|
Packit |
16975c |
#Test that we do not need to call ->delete to free memory
|
|
Packit |
16975c |
|
|
Packit |
16975c |
BEGIN {
|
|
Packit |
16975c |
our @OBJECTS;
|
|
Packit |
16975c |
|
|
Packit |
16975c |
no strict 'refs';
|
|
Packit |
16975c |
*{'CORE::GLOBAL::bless'} = sub {
|
|
Packit |
16975c |
my $reference = shift;
|
|
Packit |
16975c |
my $class = @_ ? shift : scalar caller;
|
|
Packit |
16975c |
my $object = CORE::bless($reference, $class);
|
|
Packit |
16975c |
our $in_core_bless;
|
|
Packit |
16975c |
if ($object->isa('HTML::Element') && !$in_core_bless) {
|
|
Packit |
16975c |
local $in_core_bless = 1;
|
|
Packit |
16975c |
push @OBJECTS, $object;
|
|
Packit |
16975c |
weaken($OBJECTS[-1]);
|
|
Packit |
16975c |
}
|
|
Packit |
16975c |
return $object;
|
|
Packit |
16975c |
};
|
|
Packit |
16975c |
|
|
Packit |
16975c |
sub object_count { return 0 + grep { defined($_) } @OBJECTS; }
|
|
Packit |
16975c |
sub clear_objects { @OBJECTS = () }
|
|
Packit |
16975c |
|
|
Packit |
16975c |
use_ok("HTML::TreeBuilder", '-weak');
|
|
Packit |
16975c |
}
|
|
Packit |
16975c |
|
|
Packit |
16975c |
{
|
|
Packit |
16975c |
|
|
Packit |
16975c |
# By default HTML::Parser will convert the & to &
|
|
Packit |
16975c |
my $tree = HTML::TreeBuilder->new_from_content('&foo; &bar;');
|
|
Packit |
16975c |
|
|
Packit |
16975c |
ok(object_count() > 0);
|
|
Packit |
16975c |
$tree = undef;
|
|
Packit |
16975c |
is(object_count(), 0);
|
|
Packit |
16975c |
clear_objects();
|
|
Packit |
16975c |
}
|
|
Packit |
16975c |
|
|
Packit |
16975c |
{
|
|
Packit |
16975c |
|
|
Packit |
16975c |
# ignoring entities when parsing source makes it work like you expect XML to
|
|
Packit |
16975c |
my $tree = HTML::TreeBuilder->new(no_expand_entities => 1);
|
|
Packit |
16975c |
$tree->parse("&foo; &bar; ' &l ");
|
|
Packit |
16975c |
|
|
Packit |
16975c |
ok(object_count() > 0);
|
|
Packit |
16975c |
$tree = undef;
|
|
Packit |
16975c |
is(object_count(), 0);
|
|
Packit |
16975c |
clear_objects();
|
|
Packit |
16975c |
}
|
|
Packit |
16975c |
|
|
Packit |
16975c |
{
|
|
Packit |
16975c |
|
|
Packit |
16975c |
my $lol = [
|
|
Packit |
16975c |
'html',
|
|
Packit |
16975c |
['head', ['title', 'I like stuff!'],],
|
|
Packit |
16975c |
[ 'body', {'lang', 'en-JP'},
|
|
Packit |
16975c |
'stuff',
|
|
Packit |
16975c |
['p', 'um, p < 4!', {'class' => 'par123'}],
|
|
Packit |
16975c |
['div', {foo => 'bar'}, ' 1 2 3 '], # at 0.1.2
|
|
Packit |
16975c |
['div', {fu => 'baa'}, " 1 2 \xA0 3 "], # RT #26436 test
|
|
Packit |
16975c |
['hr'],
|
|
Packit |
16975c |
]
|
|
Packit |
16975c |
];
|
|
Packit |
16975c |
|
|
Packit |
16975c |
my $tree = HTML::Element->new_from_lol($lol);
|
|
Packit |
16975c |
|
|
Packit |
16975c |
my $start_count = object_count();
|
|
Packit |
16975c |
ok($start_count > 0);
|
|
Packit |
16975c |
my ($body) = $tree->look_down(_tag => 'body');
|
|
Packit |
16975c |
$tree = undef;
|
|
Packit |
16975c |
ok(object_count() < $start_count);
|
|
Packit |
16975c |
$body = undef;
|
|
Packit |
16975c |
is(object_count(), 0);
|
|
Packit |
16975c |
clear_objects();
|
|
Packit |
16975c |
}
|