use strict; use Test; use XML::SAX::Machines qw( Machine ); my $m; my $out; ## Make a filter that is *not* in a file that can be require()ed. @Foo::Filter::ISA = qw( XML::SAX::Base ); my @tests = ( ( map { my $m = $_; sub { $out = ""; ok $m->isa( "XML::SAX::Machine" ); }, sub { $m->start_document; ok 1, 1, "start_document"}, sub { $m->start_element( { Name => "foo" } );ok 1, 1, "start_elt foo" }, sub { $m->start_element( { Name => "bar" } );ok 1, 1, "start_elt bar" }, sub { $m->end_element( { Name => "bar" } );ok 1, 1, "end_elt bar" }, sub { $m->end_element( { Name => "foo" } );ok 1, 1, "end_elt foo" }, sub { $m->end_document; ok 1, 1, "end_document" }, sub { $out =~ m{} ? ok 1 : ok $out, "something like " ; }, sub { $out = ""; ok $m->parse_string( "" ); }, sub { $out =~ m{} ? ok 1 : ok $out, "something like " ; }, } ( Machine( [ Intake => "XML::SAX::Base", 1 ], [ undef() => "XML::SAX::Base", 2 ], \$out ), Machine( [ Intake => XML::SAX::Base->new(), 1 ], [ undef() => XML::SAX::Base->new(), 2 ], \$out ), Machine( [ Intake => "Foo::Filter", 1 ], [ undef() => XML::SAX::Base->new(), 2 ], \$out ), Machine( [ Intake => "XML::SAX::Base", "W" ], [ "W" => XML::SAX::Writer->new( Output => \$out ) ], ), Machine( [ Intake => "XML::SAX::Base", "Exhaust" ], { Handler => XML::SAX::Writer->new( Output => \$out ) }, ), ) ), ); plan tests => scalar @tests; $_->() for @tests;