use strict;
use Test;
use XML::SAX::PurePerl;
use XML::Filter::Merger;
use XML::SAX::Writer;
use UNIVERSAL;
my $p;
my $h;
my $w;
my $out;
my @tests = (
sub {
$w = XML::SAX::Writer->new( Output => \$out );
$h = XML::Filter::Merger->new( Handler => $w );
$p = XML::SAX::PurePerl->new( Handler => $h );
ok UNIVERSAL::isa( $h, "XML::Filter::Merger" );
},
##
## sequential docs in default (non-IncludeAllRoots) mode
##
sub {
$out = "";
$h->start_manifold_document( {} );
$p->parse_string( "" );
$p->parse_string( "" );
$h->end_manifold_document( {} );
$out =~ m{}
? ok 1
: ok $out, "something like " ;
},
##
## sequential, IncludeAllRoots mode
##
sub {
$out = "";
$h->set_include_all_roots( 1 );
$h->start_manifold_document( {} );
$p->parse_string( "" );
$p->parse_string( "" );
$h->end_manifold_document( {} );
$out =~ m{}
? ok 1
: ok qq{This output $out},
qq{something like } ;
},
##
## Nested documents
##
sub {
$out = "";
$h->set_include_all_roots( 0 );
$h->reset;
$h->start_document( {} );
$h->start_element( { Name => "foo1" } );
$p->parse_string( "" );
$h->end_element( { Name => "foo1" } );
$h->end_document( {} );
$out =~ m{}
? ok 1
: ok qq{This output $out},
qq{something like } ;
},
sub {
$out = "";
$h->set_include_all_roots( 1 );
$h->reset;
$h->start_document( {} );
$h->start_element( { Name => "foo1" } );
$p->parse_string( "" );
$h->end_element( { Name => "foo1" } );
$h->end_document( {} );
$out =~ m{}
? ok 1
: ok qq{This output $out},
qq{something like } ;
},
##
## Sequential and Nested documents, a deviant corner condition
##
sub {
$out = "";
$h->set_include_all_roots( 0 );
$h->start_manifold_document( {} );
$h->start_document( {} );
$h->start_element( { Name => "foo1" } );
$p->parse_string( "" );
$h->end_element( { Name => "foo1" } );
$h->end_document( {} );
$p->parse_string( "" );
$h->end_manifold_document( {} );
$out =~ m{}
? ok 1
: ok qq{This output $out},
qq{something like } ;
},
##
## Subclassing
##
sub {
my $s = do {
package Subclass;
use vars qw( @ISA );
@ISA = qw( XML::Filter::Merger );
sub characters {
my $self = shift;
my $r = $self->SUPER::characters( @_ );
$self->set_include_all_roots( 1 );
XML::SAX::PurePerl->new( Handler => $self )->parse_string( "" );
return $r;
}
__PACKAGE__ ;
}->new( Handler => $w );
$p->set_handler( $s );
$p->parse_string( " " );
$out =~ m{ }
? ok 1
: ok qq{This output $out},
qq{something like } ;
},
);
plan tests => scalar @tests;
$_->() for @tests;