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;