Blame t/refloop.t

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
}