use Test; BEGIN { plan tests => 12 } use XML::LibXSLT; use XML::LibXML; my $parser = XML::LibXML->new(); print "# parser\n"; ok($parser); my $doc = $parser->parse_string(<<'EOT'); random contents EOT print "# doc\n"; ok($doc); my $xslt = XML::LibXSLT->new(); print "# xslt\n"; ok($xslt); print "# setting callbacks\n"; local $XML::LibXML::match_cb = \&match_cb; local $XML::LibXML::open_cb = \&open_cb; local $XML::LibXML::close_cb = \&close_cb; local $XML::LibXML::read_cb = \&read_cb; my $stylesheet = $xslt->parse_stylesheet($parser->parse_string(<<'EOT')); Know Your Dromedaries

foo:

EOT print "# stylesheet\n"; ok($stylesheet); # warn "transform!\n"; my $results = $stylesheet->transform($doc); print "# results\n"; ok($results); my $output = $stylesheet->output_string($results); # warn "output: $output\n"; print "# output\n"; ok($output); $XML::LibXML::open_cb = \&dying_open_cb; # check transform throws exception eval { $stylesheet->transform($doc); }; if ($@) { ok(1, 1, "Threw: $@"); } else { ok(0, 1, "No error"); } sub match_cb { my $uri = shift; print "# match_cb: $uri\n"; if ($uri eq "foo.xml") { ok(1); return 1; } return 0; } sub open_cb { my $uri = shift; print "# open_cb: $uri\n"; ok($uri, "foo.xml"); return "Text here"; } sub dying_open_cb { my $uri = shift; print "# dying_open_cb: $uri\n"; ok($uri, "foo.xml"); die "Test a die from open_cb"; } sub close_cb { print "# close_cb\n"; # warn("close\n"); ok(1); } sub read_cb { print "# read_cb\n"; # warn("read\n"); return substr($_[0], 0, $_[1], ""); }