The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! /usr/bin/perl
#---------------------------------------------------------------------
# Test the self_closed_tags attribute

use strict;
use warnings;

use Test::More 0.88;            # done_testing
use t::Util;

use HTML::TreeBuilder;

plan tests => 36;

#---------------------------------------------------------------------

my $xhtml = HTML::TreeBuilder->new_from_file('t/sample.xhtml',
                                             self_closed_tags => 1);

isa_ok($xhtml, 'HTML::Element');

is(scalar $xhtml->look_down('/' => qr/.?/), undef, 'no / attributes');

ok($xhtml->look_down(id=>$_)->is_empty, "$_ is empty")
    for qw(a1 a1-1 a1-2 a2 a4);

ok( ! $xhtml->look_down(id=>$_)->is_empty, "$_ is not empty")
    for qw(p1 p2 p3 a3 p4);

isa_ok(my $p1 = $xhtml->look_down(id=>'p1'), 'HTML::Element');

is($p1->as_trimmed_text, 'This is paragraph 1.', 'p1 text matches');

is(xml($p1),
   '<p id="p1"><a id="a1"></a>This <a id="a1-1"></a>' .
   'is paragraph <a id="a1-2"></a>1.</p>',
   'p1 content');

is($xhtml->look_down(id=>'p2')->as_trimmed_text,
   'This is paragraph 2.',
   'p2 text matches');

is($xhtml->look_down(id=>$_)->as_trimmed_text,
   'This is paragraph 3.',
   "$_ text matches") for qw(p3 a3);

isa_ok(my $p4 = $xhtml->look_down(id=>'p4'), 'HTML::Element');

is($p4->as_trimmed_text,
   'This is paragraph 4 on two lines.',
   'p4 text matches');

is(xml($p4),
   '<p id="p4"><a id="a4"></a>This is paragraph 4<br /> on two lines.</p>',
   'p4 content');

undef $xhtml;

#---------------------------------------------------------------------
# Some tests without self_closed_tags:

my $html = HTML::TreeBuilder->new_from_file('t/sample.xhtml');

isa_ok($html, 'HTML::Element');

isnt(scalar $html->look_down('/' => qr/.?/), undef, 'HTML has / attributes');

ok( ! $html->look_down(id=>$_)->is_empty, "HTML $_ is not empty")
    for qw(a1 a1-1 a1-2 a2 a3 a4 p1 p2 p3 p4);

is($html->look_down(id=>'a1-1')->as_trimmed_text,
   'is paragraph 1.',
   'HTML a1-1 text matches');

is(xml(scalar $html->look_down(id=>'p1')),
   '<p id="p1"><a id="a1">This <a id="a1-1">' .
   'is paragraph <a id="a1-2">1.</a></a></a></p>',
   'HTML p1 content');

is(xml(scalar $html->look_down(id=>'p4')),
   '<p id="p4"><a id="a4">This is paragraph 4<br /> on two lines.</a></p>',
   'HTML p4 content');

#---------------------------------------------------------------------
done_testing;