The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;

package MySAX;
use base qw (XML::Filter::XML_Directory_2::Base);

sub start_element {
  my $self = shift;
  my $data = shift;

  $self->on_enter_start_element($data)
    || return;

  map { print STDERR " "; } (0..$self->current_level());
  print STDERR "[".$self->current_level()."] $data->{'Name'}\n";

  return 1;
}

sub end_element {
  my $self = shift;
  my $data = shift;

  $self->on_enter_end_element($data);
  $self->on_exit_end_element($data);
}

sub characters {}

package main;

BEGIN { $| = 1; print "1..2\n"; }

use XML::SAX::Writer;
use XML::Directory::SAX;

my $output    = "";
my $writer    = undef;
my $filter    = undef;
my $directory = undef;

if (&t2(&t1())) {
  print "Passed all tests\n";;
}

sub t1 {
  $writer = XML::SAX::Writer->new(Output=>\$output);
  if (! $writer) {
    print "Failed to create XML::SAX::Writer object, $!\n";
    print "not ok 1\n";
  }

  $filter = MySAX->new(Handler=>$writer);

  if (! $filter) {
    print "Failed to create filter object, $!\n";
    print "not ok 1\n";
  }

  $directory = XML::Directory::SAX->new(depth=>1,detail=>2,Handler=>$filter);
  
  if (! $directory) {
    print "Failed to create XML::Directory::SAX object, $!\n";
    print "not ok 1\n";
  }

  print "ok 1\n";
  return 1;
}

sub t2 {
  if (! $_[0]) {
    print "not ok 2\n";
    return 0;
  }
  
  $directory->order_by("a");
  eval { $directory->parse_dir($INC[$#INC]); };

  if ($@) {
    print $@;
    print "not ok 2\n";
    return 0;
  }

  print "ok 2\n";
  return 1;
}