The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
local $^W = 1;
use Test::More 'no_plan';
use HTML::Element::Tiny;

my $tree = HTML::Element::Tiny->new(
  [ html =>
    [ head => 
      [ title => "test" ],
    ],
    [ body =>
      [ p => { id => "intro" }, "Welcome to stuff" ],
      [ p => "here's some more stuff" ],
      [ p => "stuff sure is great" ],
      [ p => "it's make of win" ],
      [ p => { id => "conclusion" }, "so use stuff" ],
    ],
  ],
);

my $elems = $tree->all->not({ -tag => '-text' });
isa_ok($elems, 'HTML::Element::Tiny::Collection');
is($elems->size, 9, "all non-text == 9 elems");

$elems = $tree->find({ -tag => 'p' });
isa_ok($elems, 'HTML::Element::Tiny::Collection');
is($elems->size, 5, "p == 5 elems");

is($elems->filter({ id => "" })->size, 3, "filter");
is($elems->grep({ id => "" })->size, 3, "grep");
is($elems->not({ id => "" })->size, 2, "not");

is_deeply(
  [ $elems->map(sub { $_->attr('id') }) ],
  [ 'intro', undef, undef, undef, 'conclusion' ],
  'map (id)',
);

eval { $elems->one };
like $@, '/not exactly one element/';
eval { $elems->filter({ id => "blort" })->one };
like $@, '/not exactly one element/';
my $one = eval { $elems->filter({ id => "intro" })->one };
is $@, '', "one didn't die";
is $one, $elems->[0];

is_deeply(
  [ $elems->all ],
  [ $tree->find_one({ -tag => 'body' })->children ],
);

$elems->attr({ id => undef });
is($elems->filter({ id => "" })->size, 5, "all p elems have no id now");