use strict; use Test; use XML::SAX::Machines qw( Machine ); package My::Id::Adder; ## Identical to code in t/11byrecord.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( @_ ); } package main; my $m; my $out; my @tests = ( sub { $out = ""; $m = Machine( [ Intake => "XML::Filter::DocSplitter" => qw( A ) ], [ A => "My::Id::Adder" => qw( Merger ) ], [ Merger => "XML::Filter::Merger" => qw( Output ) ], [ Output => \$out ], ); $m->Intake->set_aggregator( $m->Merger ); ok $m->isa( "XML::SAX::Machine" ); }, sub { $out = ""; ok $m->parse_string( "abcdefg" ); }, sub { $out =~ s/^<\?.*?\?>//; $out =~ m{aBcDeFg} ? ok 1 : ok qq{this output $out}, qq{something like abcdefg} ; }, ); plan tests => scalar @tests; $_->() for @tests;