#!/usr/local/bin/perl -w use strict; use Test; use XML::SAX::Machines qw( Pipeline ByRecord ); package My::Id::Adder; ## Identical to code in t/10docsplitter.t use vars qw( @ISA ); @ISA = qw( XML::SAX::Base ); use XML::SAX::Base; my $id; sub start_element { my $self = shift; my ( $elt ) = @_; $elt->{Attributes}->{id} = { Name => "id", LocalName => "id", Value => ++$id, }; $self->SUPER::start_element( @_ ); } sub characters { my $self = shift; my ( $data ) = @_; $data->{Data} = uc $data->{Data}; $self->SUPER::characters( @_ ); } ## This is the example from XML::SAX::ByRecord POD. package My::Filter::Uc; use vars qw( @ISA ); @ISA = qw( XML::SAX::Base ); use XML::SAX::Base; sub characters { my $self = shift; my ( $data ) = @_; $data->{Data} = uc $data->{Data}; $self->SUPER::characters( @_ ); } package main; my $m; my $out; my @tests = ( sub { $out = ""; $m = Pipeline( ByRecord( "My::Id::Adder" ), \$out, ); ok $m->isa( "XML::SAX::Machine" ); }, sub { $out = ""; $m->parse_string( "abcdefg" ); ok 1; }, sub { $out =~ m{aBcDeFg} ? ok 1 : ok qq{this outout $out}, qq{something like aBcDeFg} ; }, sub { $out = ""; $m = Pipeline( ByRecord( "My::Filter::Uc" ), \$out, ); $m->parse_string( "abcdefg" ); $out =~ m{aBcDeFg} ? ok 1 : ok qq{this outout $out}, qq{something like aBcDeFg} ; }, ); plan tests => scalar @tests; $_->() for @tests;