r43635 - in /branches/upstream/libxml-libxml-iterator-perl: ./ current/ current/lib/ current/lib/XML/ current/lib/XML/LibXML/ current/lib/XML/LibXML/NodeList/ current/t/
dmn at users.alioth.debian.org
dmn at users.alioth.debian.org
Fri Sep 4 10:38:39 UTC 2009
Author: dmn
Date: Fri Sep 4 10:37:15 2009
New Revision: 43635
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=43635
Log:
[svn-inject] Installing original source of libxml-libxml-iterator-perl
Added:
branches/upstream/libxml-libxml-iterator-perl/
branches/upstream/libxml-libxml-iterator-perl/current/
branches/upstream/libxml-libxml-iterator-perl/current/Changes
branches/upstream/libxml-libxml-iterator-perl/current/MANIFEST
branches/upstream/libxml-libxml-iterator-perl/current/Makefile.PL
branches/upstream/libxml-libxml-iterator-perl/current/README
branches/upstream/libxml-libxml-iterator-perl/current/lib/
branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/
branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/
branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/Iterator.pm
branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/NodeList/
branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/NodeList/Iterator.pm
branches/upstream/libxml-libxml-iterator-perl/current/t/
branches/upstream/libxml-libxml-iterator-perl/current/t/01basic.t
branches/upstream/libxml-libxml-iterator-perl/current/test.pl
Added: branches/upstream/libxml-libxml-iterator-perl/current/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-libxml-iterator-perl/current/Changes?rev=43635&op=file
==============================================================================
--- branches/upstream/libxml-libxml-iterator-perl/current/Changes (added)
+++ branches/upstream/libxml-libxml-iterator-perl/current/Changes Fri Sep 4 10:37:15 2009
@@ -1,0 +1,4 @@
+Revision history for Perl extension XML::LibXML::Iterator.
+
+1.00 Fri Nov 8 2002
+ - extracted the modules from the main XML::LibXML bundle.
Added: branches/upstream/libxml-libxml-iterator-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-libxml-iterator-perl/current/MANIFEST?rev=43635&op=file
==============================================================================
--- branches/upstream/libxml-libxml-iterator-perl/current/MANIFEST (added)
+++ branches/upstream/libxml-libxml-iterator-perl/current/MANIFEST Fri Sep 4 10:37:15 2009
@@ -1,0 +1,8 @@
+Changes
+lib/XML/LibXML/Iterator.pm
+lib/XML/LibXML/NodeList/Iterator.pm
+Makefile.PL
+MANIFEST
+README
+t/01basic.t
+test.pl
Added: branches/upstream/libxml-libxml-iterator-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-libxml-iterator-perl/current/Makefile.PL?rev=43635&op=file
==============================================================================
--- branches/upstream/libxml-libxml-iterator-perl/current/Makefile.PL (added)
+++ branches/upstream/libxml-libxml-iterator-perl/current/Makefile.PL Fri Sep 4 10:37:15 2009
@@ -1,0 +1,11 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+ 'NAME' => 'XML::LibXML::Iterator',
+ 'VERSION_FROM' => 'lib/XML/LibXML/Iterator.pm',
+ 'PREREQ_PM' => {
+ XML::LibXML => 1.52,
+ XML::NodeFilter => 0
+ },
+);
Added: branches/upstream/libxml-libxml-iterator-perl/current/README
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-libxml-iterator-perl/current/README?rev=43635&op=file
==============================================================================
--- branches/upstream/libxml-libxml-iterator-perl/current/README (added)
+++ branches/upstream/libxml-libxml-iterator-perl/current/README Fri Sep 4 10:37:15 2009
@@ -1,0 +1,30 @@
+XML::LibXML::Iterator version 1.00
+==================================
+
+XML::LibXML::Iterator implements the iterator part of the DOM
+Traversal and Range specification. This class allows to iterate
+through a DOM as it is done through an ordinary array.
+
+INSTALLATION
+
+To install this module type the following:
+
+ perl Makefile.PL
+ make
+ make test
+ make install
+
+DEPENDENCIES
+
+This module requires these other modules and libraries:
+
+XML::LibXML 1.52 or later.
+XML::NodeFilter 0.01 or later.
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2002 Christian Glahn. All rights reserved.
+
+This package is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
Added: branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/Iterator.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/Iterator.pm?rev=43635&op=file
==============================================================================
--- branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/Iterator.pm (added)
+++ branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/Iterator.pm Fri Sep 4 10:37:15 2009
@@ -1,0 +1,455 @@
+# $Id: Iterator.pm,v 1.1.1.1 2002/11/08 17:18:36 phish Exp $
+#
+package XML::LibXML::Iterator;
+
+use strict;
+
+use XML::NodeFilter qw(:results);
+
+use vars qw($VERSION);
+
+$VERSION = '1.00';
+
+use overload
+ '++' => sub { $_[0]->next; $_[0]; },
+ '--' => sub { $_[0]->previous; $_[0]; },
+ '<>' => sub {
+ if ( wantarray ) {
+ my @rv = ();
+ while ( $_[0]->next ){
+ push @rv;
+ }
+ return @rv;
+ } else {
+ return $_[0]->next
+ };
+ },
+;
+
+
+sub new {
+ my $class = shift;
+ my $node = shift;
+
+ return undef unless defined $node;
+
+ my $self = bless {}, $class;
+
+ $self->{FIRST} = $node;
+ $self->first;
+ $self->{ITERATOR} = \&default_iterator;
+
+ $self->{FILTERS} = [];
+
+ return $self;
+}
+
+
+sub iterator_function {
+ my $self = shift;
+ my $func = shift;
+
+ return if defined $func and ref( $func ) ne "CODE";
+
+ $self->first;
+ if ( defined $func ) {
+ $self->{ITERATOR} = $func;
+ }
+ else {
+ $self->{ITERATOR} = \&default_iterator;
+ }
+}
+
+sub set_filter {
+ my $self = shift;
+ $self->{FILTERS} = [ @_ ];
+}
+
+sub add_filter {
+ my $self = shift;
+ push @{$self->{FILTERS}}, @_;
+}
+
+sub current { return $_[0]->{CURRENT}; }
+sub index { return $_[0]->{INDEX}; }
+
+sub next {
+ my $self = shift;
+ my @filters = @{$self->{FILTERS}};
+ my $node = undef;
+ my $fv = FILTER_SKIP;
+ unless ( scalar @filters > 0 ) {
+ $fv = FILTER_DECLINED;
+ }
+ while ( 1 ) {
+ $node = $self->{ITERATOR}->( $self, 1 );
+ last unless defined $node;
+ foreach my $f ( @filters ) {
+ $fv = $f->accept_node( $node );
+ last if $fv;
+ }
+ last if $fv == FILTER_ACCEPT or $fv == FILTER_DECLINED;
+ }
+
+ if ( defined $node ) {
+ $self->{CURRENT} = $node;
+ $self->{INDEX}++;
+ }
+
+ return $node;
+}
+
+sub previous {
+ my $self = shift;
+ my @filters = @{$self->{FILTERS}};
+ my $node = undef;
+ my $fv = FILTER_SKIP;
+ unless ( scalar @filters > 0 ) {
+ $fv = FILTER_DECLINED;
+ }
+ while ( 1 ) {
+ $node = $self->{ITERATOR}->( $self, -1 );
+ last unless defined $node;
+ foreach my $f ( @filters ) {
+ $fv = $f->accept_node( $node );
+ last if $fv;
+ }
+ last if $fv == FILTER_ACCEPT or $fv == FILTER_DECLINED;
+ }
+
+ if ( defined $node ) {
+ $self->{CURRENT} = $node;
+ $self->{INDEX}--;
+ }
+
+ return $node;
+}
+
+sub first {
+ my $self = shift;
+ if ( scalar @_ ) {
+ $self->{FIRST} = shift;
+ }
+
+ $self->{CURRENT} = $self->{FIRST};
+
+ # this logic is required if the node is not allowed to be shown
+ my @filters = @{$self->{FILTERS}||[]};
+ my $fv = FILTER_DECLINED;
+
+ foreach my $f ( @filters ) {
+ $fv = $f->accept_node( $self->{CURRENT} );
+ last if $fv;
+ }
+
+ $fv ||= FILTER_ACCEPT;
+
+ unless ( $fv == FILTER_ACCEPT ) {
+ return undef;
+ }
+
+ $self->{INDEX} = 0;
+ return $self->current;
+}
+
+sub last {
+ my $self = shift;
+ while ($self->next) {}
+ return $self->current;
+}
+
+sub iterate {
+ my $self = shift;
+ my $function = shift;
+ return unless defined $function and ref( $function ) eq 'CODE' ;
+ my $rv;
+ my $node = $self->first;
+ while ( $node ) {
+ $rv = $function->($self,$node);
+ $node = $self->next;
+ }
+ return $rv;
+}
+
+sub default_iterator {
+ my $self = shift;
+ my $dir = shift;
+ my $node = undef;
+
+
+ if ( $dir < 0 ) {
+ return undef if $self->{CURRENT}->isSameNode( $self->{FIRST} )
+ and $self->{INDEX} <= 0;
+
+ $node = $self->{CURRENT}->previousSibling;
+ return $self->{CURRENT}->parentNode unless defined $node;
+
+ while ( $node->hasChildNodes ) {
+ $node = $node->lastChild;
+ }
+ }
+ else {
+ return undef if $self->{CURRENT}->isSameNode( $self->{FIRST} )
+ and $self->{INDEX} > 0;
+
+ if ( $self->{CURRENT}->hasChildNodes ) {
+ $node = $self->{CURRENT}->firstChild;
+ }
+ else {
+ $node = $self->{CURRENT}->nextSibling;
+ my $pnode = $self->{CURRENT}->parentNode;
+ while ( not defined $node ) {
+ last unless defined $pnode;
+ $node = $pnode->nextSibling;
+ $pnode = $pnode->parentNode unless defined $node;
+ }
+ }
+ }
+
+ return $node;
+}
+
+1;
+__END__
+
+=pod
+
+
+=head1 NAME
+
+XML::LibXML::Iterator - XML::LibXML's Tree Iteration Class
+
+=head1 SYNOPSIS
+
+ use XML::LibXML;
+ use XML::LibXML::Iterator;
+
+ my $doc = XML::LibXML->new->parse_string( $somedata );
+ my $iter= XML::LibXML::Iterator->new( $doc );
+
+ $iter->iterator_function( \&iterate );
+
+ # more control on the flow
+ while ( $iter->next ) {
+ # do something
+ }
+
+ # operate on the entire tree
+ $iter->iterate( \&operate );
+
+=head1 DESCRIPTION
+
+XML::LibXML::Iterator is an iterator class for XML::LibXML parsed
+documents. This class allows to iterate the document tree as it were a
+linear data structure. It is possible to step back and forth between
+the nodes of the tree and do certain operations on that
+nodes. Different to XPath the nodes are not prefetched but will be
+calculated for each step. Therefore an iterator is sensible towards
+the current state of a document tree on each step, while XPath is only
+per query executed.
+
+=head2 What is an iterator?
+
+XML::LibXML offers by default a W3C DOM interface on the parsed XML
+documents. This tree has per definition four directions to be
+traversed: Up, down, foreward and backward. Therefore a tree can be
+considered two dimensional. Although a tree is still one more simple
+datastructure it is way to complex for some operations. So the
+XML::LibXML::Iterator class breaks the for operations down to only
+two: backward and forward. For some people this easier to understand
+than DOM or SAX as this follows more the way one actually reads an XML
+document.
+
+Therefore an iterator has three basic functions:
+
+=over 4
+
+=item * next()
+
+=item * current()
+
+=item * previous()
+
+=back
+
+That's it. With an iterator one does not have to decide when to dive
+into a subtree or find a parent. It is not even required to care about
+the boundaries of a certain level. The iterator will get the next node
+for you until there is no node left to handle.
+
+In short: An iterator will answer the question about what to do next.
+
+=head2 How to use XML::LibXML::Iterator?
+
+XML::LibXML::Iterator requires a parsed document or at least a node to
+operate on. This node is passed to the iterator class and will be used
+as the B<first> node of the iteration. One can allways reset the
+iterator to the first node by using the first()-function.
+
+Once XML::LibXML::Iterator is initialized the tree can be traversed by
+using either next() or previous(). Both function will return a
+XML::LibXML::Node object if there is such object available.
+
+Since the current object hold by the iterator class is always
+available via the current() function.
+
+The following example may clearify this:
+
+ # get the document from wherever you like
+ my $doc = XML::LibXML->new->parse_stream( *SOMEINPUT );
+
+ # get the iterator for the document root.
+ my $iter = XML::LibXML::Iterator->new( $doc->documentElement );
+
+ # walk through the document
+ while ( $iter->next() ) {
+ my $curnode = $iter->current();
+ print $curnode->nodeType();
+ }
+
+ # now get back to the beginning
+ $iter->first();
+ my $curnode = $iter->current();
+ print $curnode->nodeType();
+
+Actually the functions next(), previous(), first(), last() and
+current() do return the node which is current after the
+operation. E.g. next() moves to the next node if possible and then
+returns the node. Thus the while-loop in the example can be written
+as
+
+ while ( $iter->next() ) {
+ print $_->nodeType();
+ }
+
+Note, that just relieing on the return value of next() and previous()
+is somewhat dangerous, because both functions return B<undef> in case
+of reaching the iteration boundaries. That means it is not possible
+to iterate past the last element or before the first one.
+
+=head2 Node Filters
+
+XML::LibXML::Iterator accepts XML::NodeFilters to limit the nodes made
+available to the caller. Any nodefilter applied to
+XML::LibXML::Iterator will test if a node returned by the iteration
+function is visible to the caller.
+
+Different to the DOM Traversal Specification, XML::LibXML::Iterator
+allows filter stacks. This means it is possible to apply more than a
+single node filter to your node iterator.
+
+=head2 Complex Iterations
+
+By default XML::LibXML::Iterator will access all nodes of a given DOM
+tree. An interation based on the default iterator will access each
+single node in the given subtree once. The order how the nodes will be
+accessed is given by the following order:
+
+ node -> node's childnodes -> node's next sibling
+
+In combination with XML::Nodefilter this is best for a wide range of
+scripts and applications. Nevertheless this is still to restrictive
+for some applications. XML::LibXML::Iterator allows to change that
+behaviour. This is done by resetting XML::LibXML::Iterator's iterator
+function. By using the method iterator_function() to override the
+default iterator function, it is possible to implement iterations
+based on any iteration rule imaginable.
+
+A valid iterator function has to take two parameters: As the first
+parameter it will recieve the iterator object itself, as second the
+direction of the iteration will be passed. The direction is either 1
+(for next()) or -1 (for previous()). As the iterator-function is
+called by next() and previous() the interator-function has to be aware
+about the iteration boundaries. In case the iteration would pass the
+boundary for that operation, the function has to return
+undefined. Also the iterator function has to return the new current node,
+instead of setting it itself.
+
+*DEVELOPER NOTE* In order a single stepping is rather limited, the
+direction is given by the sign of the passed integer value. The value
+of the passed parameter will be used as an indication how many steps
+should be done. Therefor the interation direction should be tested
+relative to '0' and not as a equation. A basic template for a iterator
+function therefore will look like this:
+
+ sub iterator_func_templ {
+ my $iter = shift;
+ my $step = shift;
+ my $node = undef;
+ my $current = $iter->current();
+
+ if ( $step > 0 ) {
+ # move forward
+ }
+ else {
+ # move backward
+ $step *= -1; # remove the sign
+ }
+
+ return $node;
+ }
+
+=head2 Repeated Operation
+
+Another feature of XML::LibXML::Iterator is the ability to repeat a
+single operation on all nodes in scope. Instead of writing a loop one
+can specify the opeation as a function, that it applied on each node
+found. The function that does the trick, is named iterate().
+
+iterate() takes again two parameter: First the iterator object, second
+the node to operate on. iterate() will iterate through the entire
+document starting with the first node. If one has already started an
+iteration, the internal position will be reset to the first node.
+
+The following example will show how this works:
+
+ $iter->iterate( sub {shift; map {$_->setNodeName( lc $_->nodeName ) if $_->nodeType != NAMESPACE_DECLARATION } ($_[0], $_[0]->attributes); } );
+
+This extra long line lowercases all tagnames and the names of the
+attributes in a given subtree.
+
+=head2 Functions
+
+=over 4
+
+=item new($first_node)
+
+=item first()
+
+=item next()
+
+=item previous()
+
+=item last()
+
+=item current()
+
+=item index()
+
+=item iterator_function($funcion_ref)
+
+=item set_filter(@filter_list)
+
+=item add_filter(@filter_list)
+
+=item iterate($function_ref)
+
+=back
+
+=head1 SEE ALSO
+
+L<XML::LibXML::Node>, L<XML::NodeFilter>
+
+=head1 AUTHOR
+
+Christian Glahn, E<lt>christian.glahn at uibk.ac.atE<gt>
+
+=head1 COPYRIGHT
+
+(c) 2002, Christian Glahn. All rights reserved.
+
+This package is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
+
Added: branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/NodeList/Iterator.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/NodeList/Iterator.pm?rev=43635&op=file
==============================================================================
--- branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/NodeList/Iterator.pm (added)
+++ branches/upstream/libxml-libxml-iterator-perl/current/lib/XML/LibXML/NodeList/Iterator.pm Fri Sep 4 10:37:15 2009
@@ -1,0 +1,183 @@
+# $Id: Iterator.pm,v 1.1.1.1 2002/11/08 17:18:36 phish Exp $
+#
+package XML::LibXML::NodeList::Iterator;
+
+use strict;
+use XML::NodeFilter qw(:results);
+
+use vars qw($VERSION);
+$VERSION = "1.00";
+
+use overload
+ '++' => sub { $_[0]->next; $_[0]; },
+ '--' => sub { $_[0]->previous; $_[0] },
+ '<>' => sub {
+ if ( wantarray ) {
+ my @rv = ();
+ while ( $_[0]->next ){ push @rv,$_;}
+ return @rv;
+ } else {
+ return $_[0]->next
+ };
+ },
+;
+
+sub new {
+ my $class = shift;
+ my $list = shift;
+ my $self = undef;
+ if ( defined $list ) {
+ $self = bless [
+ $list,
+ 0,
+ [],
+ ], $class;
+ }
+
+ return $self;
+}
+
+sub set_filter {
+ my $self = shift;
+ $self->[2] = [ @_ ];
+}
+
+sub add_filter {
+ my $self = shift;
+ push @{$self->[2]}, @_;
+}
+
+# helper function.
+sub accept_node {
+ foreach ( @{$_[0][2]} ) {
+ my $r = $_->accept_node($_[1]);
+ return $r if $r;
+ }
+ # no filters or all decline ...
+ return FILTER_ACCEPT;
+}
+
+sub first { $_[0][1]=0;
+ my $s = scalar(@{$_[0][0]});
+ while ( $_[0][1] < $s ) {
+ last if $_[0]->accept_node($_[0][0][$_[0][1]]) == FILTER_ACCEPT;
+ $_[0][1]++;
+ }
+ return undef if $_[0][1] == $s;
+ return $_[0][0][$_[0][1]]; }
+
+sub last {
+ my $i = scalar(@{$_[0][0]})-1;
+ while($i >= 0){
+ if ( $_[0]->accept_node($_[0][0][$i] == FILTER_ACCEPT) ) {
+ $_[0][1] = $i;
+ last;
+ }
+ $i--;
+ }
+
+ if ( $i < 0 ) {
+ # this costs a lot, but is more safe
+ return $_[0]->first;
+ }
+ return $_[0][0][$i];
+}
+
+sub current { return $_[0][0][$_[0][1]]; }
+sub index { return $_[0][1]; }
+
+sub next {
+ if ( (scalar @{$_[0][0]}) <= ($_[0][1] + 1)) {
+ return undef;
+ }
+ my $i = $_[0][1];
+ while ( 1 ) {
+ $i++;
+ return undef if $i >= scalar @{$_[0][0]};
+ if ( $_[0]->accept_node( $_[0][0]->[$i] ) == FILTER_ACCEPT ) {
+ $_[0][1] = $i;
+ last;
+ }
+ }
+ return $_[0][0]->[$_[0][1]];
+}
+
+sub previous {
+ if ( $_[0][1] <= 0 ) {
+ return undef;
+ }
+ my $i = $_[0][1];
+ while ( 1 ) {
+ $i--;
+ return undef if $i < 0;
+ if ( $_[0]->accept_node( $_[0][0]->[$i] ) == FILTER_ACCEPT ) {
+ $_[0][1] = $i;
+ last;
+ }
+ }
+ return $_[0][0][$_[0][1]];
+}
+
+sub iterate {
+ my $self = shift;
+ my $funcref = shift;
+ return unless defined $funcref && ref( $funcref ) eq 'CODE';
+ $self->[1] = -1;
+ my $rv;
+ while ( $self->next ) {
+ $rv = $funcref->( $self, $_ );
+ }
+ return $rv;
+}
+
+1;
+
+=pod
+
+=head1 NAME
+
+XML::LibXML::NodeList::Iterator - Iteration Class for XML::LibXML XPath results
+
+=head1 SYNOPSIS
+
+ use XML::LibXML;
+ use XML::LibXML::NodeList::Iterator;
+
+ my $doc = XML::LibXML->new->parse_string( $somedata );
+ my $nodelist = $doc->findnodes( $somexpathquery );
+
+ my $iter= XML::LibXML::NodeList::Iterator->new( $nodelist );
+
+ # more control on the flow
+ while ( $iter->next ) {
+ # do something
+ }
+
+ # operate on the entire tree
+ $iter->iterate( \&operate );
+
+=head1 DESCRIPTION
+
+XML::LibXML::NodeList::Iterator is very similar to
+XML::LibXML::Iterator, but it does not iterate on the tree structure
+but on a XML::LibXML::NodeList object. Because XML::LibXML::NodeList
+is basicly an array the functionality of
+XML::LibXML::NodeList::Iterator is more restircted to stepwise
+foreward and backward than XML::LibXML::Iterator is.
+
+=head1 SEE ALSO
+
+L<XML::LibXML::NodeList>, L<XML::NodeFilter>, L<XML::LibXML::Iterator>
+
+=head1 AUTHOR
+
+Christian Glahn, E<lt>christian.glahn at uibk.ac.atE<gt>
+
+=head1 COPYRIGHT
+
+(c) 2002, Christian Glahn. All rights reserved.
+
+This package is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
Added: branches/upstream/libxml-libxml-iterator-perl/current/t/01basic.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-libxml-iterator-perl/current/t/01basic.t?rev=43635&op=file
==============================================================================
--- branches/upstream/libxml-libxml-iterator-perl/current/t/01basic.t (added)
+++ branches/upstream/libxml-libxml-iterator-perl/current/t/01basic.t Fri Sep 4 10:37:15 2009
@@ -1,0 +1,49 @@
+use Test;
+
+BEGIN { plan tests => 32; }
+
+use XML::LibXML;
+use XML::LibXML::Iterator;
+use XML::LibXML::NodeList::Iterator;
+
+my $doc = XML::LibXML->new->parse_string( <<EOF );
+<test>
+ text
+ <foo/>
+ <foo/>
+ text
+ <bar><kungfoo/></bar>
+</test>
+EOF
+
+
+print "# TREE ITERATION\n";
+my $iter = XML::LibXML::Iterator->new( $doc->documentElement );
+
+do {
+ ok(1); # warn $iter->current->nodeName;
+}while ( $iter->next );
+
+do {
+ ok(1); # warn $iter->current->nodeName;
+}while ( $iter->previous );
+
+
+$iter->iterate( sub { ok(1) } );
+
+$iter->first;
+ok( $iter->current->nodeName, "test" );
+
+my $n = $iter->last;
+ok( $iter->current->nodeName, "text" );
+
+
+print "# LIST ITERATION\n";
+my $nodelist = $doc->findnodes( '//foo' );
+my $nliter = XML::LibXML::NodeList::Iterator->new( $nodelist );
+
+while ( $nliter->next ) {
+ ok(1);
+}
+
+$nliter->iterate( sub {ok(1)} );
Added: branches/upstream/libxml-libxml-iterator-perl/current/test.pl
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libxml-libxml-iterator-perl/current/test.pl?rev=43635&op=file
==============================================================================
--- branches/upstream/libxml-libxml-iterator-perl/current/test.pl (added)
+++ branches/upstream/libxml-libxml-iterator-perl/current/test.pl Fri Sep 4 10:37:15 2009
@@ -1,0 +1,15 @@
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+#########################
+
+# change 'tests => 1' to 'tests => last_test_to_print';
+
+use XML::LibXML::Iterator;
+
+print "OK\n";
+#########################
+
+# Insert your test code below, the Test module is use()ed here so read
+# its man page ( perldoc Test ) for help writing this test script.
+
More information about the Pkg-perl-cvs-commits
mailing list