The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl -w

BEGIN { 
    if($ENV{INTERNAL_DEBUG}) {
        require Log::Log4perl::InternalDebug;
        Log::Log4perl::InternalDebug->enable();
    }
}

use strict;
use Log::Log4perl qw(:easy);

############################################
# Tests for Log4perl used by a wrapper class
# Mike Schilli, 2009 (m@perlmeister.com)
###########################################
use warnings;
use strict;

use Test::More;

BEGIN { plan tests => 12 }

###########################################
package L4p::RelayWrapper;
###########################################
no strict qw(refs);
sub get_logger;
Log::Log4perl->wrapper_register(__PACKAGE__);

*get_logger = sub {

    my @args = @_;

    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;

    if(defined $args[0] and $args[0] eq __PACKAGE__) {
         my $pkg = __PACKAGE__;
         $args[0] =~ s/$pkg/Log::Log4perl/g;
    }
    Log::Log4perl::get_logger( @args );
};

###########################################
package L4p::InheritWrapper;
###########################################
our @ISA = qw(Log::Log4perl);
Log::Log4perl->wrapper_register(__PACKAGE__);

###########################################
package main;
###########################################

use Log::Log4perl qw(get_logger);

my $pkg    = "Wobble::Cobble";
my $pkgcat = "Wobble.Cobble";

my $logger;

$logger = get_logger();
is $logger->{category}, "main", "imported get_logger()";

$logger = get_logger( $pkg );
is $logger->{category}, $pkgcat, "imported get_logger($pkg)";

for my $class (qw(Log::Log4perl
                  L4p::RelayWrapper 
                  L4p::InheritWrapper)) {

    no strict 'refs';

    my $func = "$class\::get_logger";

    if($class !~ /Inherit/) {
          # wrap::()
        $logger = $func->();
        is $logger->{category}, "main", "$class\::()";

        $logger = $func->( $pkg );
        is $logger->{category}, $pkgcat, "$class\::($pkg)";
    }

      # wrap->()
    $logger = $class->get_logger();
    is $logger->{category}, "main", "$class->()";

    $logger = $class->get_logger($pkg);
    is $logger->{category}, $pkgcat, "$class->($pkg)";
}

# use Data::Dumper;
# print Dumper($logger;