-
Notifications
You must be signed in to change notification settings - Fork 3
/
datasource_xml.t
91 lines (75 loc) · 2.33 KB
/
datasource_xml.t
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
use strict;
use warnings;
use lib qw(blib);
use Test::More;
BEGIN {
eval 'use XML::Simple';
if ($@){
plan skip_all => 'XML::Simple not available';
exit;
} else {
plan tests => 22;
}
}
BEGIN {
use_ok 'Mowyw::Datasource';
use_ok 'Mowyw::Datasource::XML';
}
my $x = eval {
Mowyw::Datasource->new({
type => 'XML',
file => 't/sample.xml',
});
};
print $@ if $@;
ok !$@, 'No errors while creating Mowyw::Datasource::XML instance';
ok !$x->is_exhausted, 'Iterator not yet exhausted';
my $data = $x->get();
is $data->{foo}, 'bar1', 'First element (item "foo") retrieved';
is $data->{baz}, 'quox1', 'First element (item "baz") retrieved';
$x->next();
ok !$x->is_exhausted, 'Iterator not yet exhausted';
$data = $x->get();
is $data->{foo}, 'bar2', 'Second element (item "foo") retrieved';
is $data->{baz}, 'quox2', 'Second element (item "baz") retrieved';
$x->next();
ok !$x->is_exhausted, 'Iterator not yet exhausted';
$data = $x->get();
is $data->{foo}, 'bar3', 'Third element (item "foo") retrieved';
is $data->{baz}, 'quox3', 'Third element (item "baz") retrieved';
$x->next();
ok $x->is_exhausted, 'Iterator exhausted';
# next test file
$x = Mowyw::Datasource->new({
type => 'XML',
file => 't/sample-single.xml',
root => 'item',
});
ok $x, 'Datasource created from t/sample-single.xml';
ok !$x->is_exhausted, 'Iterator not yet exhausted';
$data = $x->get();
is $data->{foo}, 'bar', 'First element (item "foo") retrieved';
is $data->{baz}, 'quox', 'First element (item "baz") retrieved';
$x->next();
ok $x->is_exhausted, 'Iterator exhausted';
eval {
Mowyw::Datasource->new({
type => 'XML',
file => 't/sample-bad.xml',
});
};
ok $@, 'Dies with ambigous root element';
# test limits
$x = eval {
Mowyw::Datasource->new({
type => 'XML',
file => 't/sample.xml',
limit => 2,
});
};
print $@ if $@;
ok(!$x->is_exhausted, 'First item available with limit 2');
$x->get();
ok(!$x->is_exhausted, 'Second item available with limit 2');
$x->get();
ok($x->is_exhausted, 'Third item NOT available with limit 2');