File Coverage

lib/XML/DOM/Lite/NodeList.pm
Criterion Covered Total %
statement 33 35 94.2
branch 7 10 70.0
condition n/a
subroutine 8 8 100.0
pod 0 7 0.0
total 48 60 80.0


line stmt bran cond sub pod time code
1             package XML::DOM::Lite::NodeList;
2              
3             =head1 NAME
4              
5             XML::DOM::Lite::NodeList - blessed array ref for containing Node objects
6              
7             =head1 SYNOPSIS
8              
9             $node->childNodes->insertNode($childNode, [$index]);
10             my @removedNodes = $node->childNodes->removeNode($childNode);
11             my $childNode = $node->childNodes->item($index);
12             my $numChilds = $node->childNodes->length;
13              
14             =cut
15              
16 8     8   18903 use overload '%{}' => \&as_hashref, fallback => 1;
  8         16403  
  8         64  
17              
18             sub new {
19 263     263 0 389 my ($class, $nodes) = @_;
20 263         267 my $self;
21 263 50       564 if (ref $nodes eq 'ARRAY') {
22             # take a copy of the array
23 263         737 $self = bless [ @$nodes ], $class;
24             } else {
25 0         0 die "usage error, $class must be constructed with an ARRAY ref";
26             }
27 263         1172 return $self;
28             }
29              
30             sub as_hashref {
31 2     2 0 3 my $self = shift;
32 2         5 my $hashref = { };
33 2         4 foreach my $n (@$self) {
34 2 50       8 $hashref->{$n->nodeName} = ($n->nodeValue ? $n->nodeValue : $n);
35             }
36 2         11 return $hashref;
37             }
38              
39             sub insertNode {
40 80     80 0 125 my ($self, $node, $index) = @_;
41 80 100       151 if (defined $index) {
42 1         2 splice(@{$self}, $index, 0, $node);
  1         4  
43             } else {
44 79         95 push(@{$self}, $node);
  79         292  
45             }
46 80         162 return $node;
47             }
48              
49             sub removeNode {
50 4     4 0 9 my ($self, $node) = @_;
51 4         7 return splice (@{$self}, $self->nodeIndex($node), 1);
  4         16  
52             }
53              
54             sub item {
55 21     21 0 39 my ($self, $index) = @_;
56 21         107 return $self->[$index];
57             }
58              
59             sub length {
60 145     145 0 182 my $self = shift;
61 145         575 return scalar(@$self);
62             }
63              
64             sub nodeIndex {
65 15     15 0 163 my ($self, $node) = @_;
66 15 50       37 die "usage error" unless (scalar(@_) == 2);
67 15         20 my $i = 0;
68 15         34 foreach (@$self) {
69 21 100       107 return $i if $_ eq $node;
70 6         10 $i++;
71             }
72 0           return undef;
73             }
74              
75             1;