1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
use strict;
use Test::More;
use XML::Struct qw(readXML);
my ($xml, $reader);
sub init($) {
my $path = shift;
my $reader = XML::Struct::Reader->new(
attributes => 0, path => $path,
from => XML::LibXML::Reader->new( location => 't/nested.xml' )
);
is $reader->path, $path, "default path = '$path'";
return $reader;
}
for my $root (qw(* / /* /nested)) {
$reader = init($root);
$xml = $reader->readNext;
is $xml->[0], 'nested', 'root';
}
for my $root (qw(x /x //x)) {
$reader = init($root);
is $reader->readNext, undef, 'wrong namedroot';
}
sub test_path(@) {
my $reader;
while (@_) {
my $path = shift;
my $result = shift;
my $msg = shift;
if (!$reader) {
$reader = init($path);
is_deeply $reader->readNext, $result, $msg;
} else {
my $next = $reader->readNext( $path );
is_deeply $next, $result, $msg;
}
}
}
test_path
'/nested/items/*', [ a => ["X"] ], 'readNext (default path set)',
undef, [ "b" ], 'readNext (reusing default path)',
'//', [ a => ["Y"] ], 'readNext (relative)';
test_path
'/nested/items/b', [ "b" ], 'readNext with name',
'*', [ "a", ["Y"] ], '...';
done_testing;
|