use strict;
use Test::Base;
use HTML::Selector::XPath;
eval { require HTML::TreeBuilder::XPath };
plan skip_all => "HTML::TreeBuilder::XPath is not installed." if $@;
filters { selector => 'chomp', expected => [ 'lines', 'array' ] };
plan tests => 1 * blocks;
run {
my $block = shift;
my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse($block->input);
$tree->eof;
my @nodes = $tree->findnodes( HTML::Selector::XPath->new($block->selector)->to_xpath );
is_deeply [ map $_->as_XML, @nodes ], $block->expected;
}
__END__
===
--- input
foo
foo
--- selector
div.foo
--- expected
foo
===
--- input
--- selector
ul li
--- expected
bar
baz
===
--- input
--- selector
ul li:first-child
--- expected
bar
===
--- input
--- selector
li.bar
--- expected
baz
baz
===
--- input
foo
baz
--- selector
div#bar
--- expected
baz
===
--- input
foo
baz
baz
--- selector
div#bar, div.baz
--- expected
baz
baz
===
--- input
foo
baz
baz
--- selector
div:not([lang|="en"])
--- expected
foo
===
--- input
foo
baz
baz
--- selector
div:not([class~="foo"])
--- expected
foo
baz
===
--- input
foo
baz
baz
--- selector
div:not([class])
--- expected
foo
===
--- SKIP
--- input
foo
baz
--- selector
*:not(p)
--- expected
baz
===
--- input
foo
bar
--- selector
p.pastoral.marine
--- expected
foo