#!/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;