File Coverage

lib/XML/DOM/Lite/NodeList.pm
Criterion Covered Total %
statement 39 41 95.1
branch 7 10 70.0
condition n/a
subroutine 10 10 100.0
pod 0 7 0.0
total 56 68 82.3


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