The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use utf8;
use Test::More;
use Web::Query;

test('Web::Query');
test('Web::Query::LibXML') if eval "require Web::Query::LibXML; 1";

done_testing;

    
sub test {
    my $class = shift;    
    diag "testing $class";
    no warnings 'redefine';
    *wq = \&{$class . "::wq" };
    
    my $html = '<html><body><ul id="foo"><li>A</li><li>B</li><li>C</li><li>D</li><li>E</li><li>F</li></ul></body></html>';
    
    subtest 'get first' => sub {
        my $q = wq($html)->find('#foo li');
        my $elm = $q->get(0);
        isa_ok $elm, 'HTML::Element';
        is wq($elm)->text(), 'A';
    };
    subtest 'get second' => sub {
        my $q = wq($html)->find('#foo li');
        my $elm = $q->get(1);
        isa_ok $elm, 'HTML::Element';
        is wq($elm)->text(), 'B';
    };
    subtest 'get last' => sub {
        my $q = wq($html)->find('#foo li');
        my $elm = $q->get(-1);
        isa_ok $elm, 'HTML::Element';
        is wq($elm)->text(), 'F';
    };
    subtest 'get before last' => sub {
        my $q = wq($html)->find('#foo li');
        my $elm = $q->get(-2);
        isa_ok $elm, 'HTML::Element';
        is wq($elm)->text(), 'E';
    };

    subtest 'eq first' => sub {
        is wq($html)->find('#foo li')->eq(0)->text(), 'A';
    };
    subtest 'eq second' => sub {
        is wq($html)->find('#foo li')->eq(1)->text(), 'B';
    };
    subtest 'eq last' => sub {
        is wq($html)->find('#foo li')->eq(-1)->text(), 'F';
    };
    subtest 'eq before last' => sub {
        is wq($html)->find('#foo li')->eq(-2)->text(), 'E';
    };

}