The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use strict;
use warnings;

use Test::More tests => 9;

# catching carp()
local $SIG{'__WARN__'} = sub {
    my $msg = shift;
    ::like(
        $msg,
        qr/\Qlog_fields() is deprecated\E/,
        'Correct dep warning to carp',
    );
};

{
    package Foo;
    use Mouse;
    with 'MouseX::Role::Loggable';
    # override log(), do it after the role is applied
    no warnings 'redefine', 'once';
    *log  = sub {
        my ( $class, $args, $msg ) = @_;
        ::isa_ok( $class, 'Foo'  );
        ::isa_ok( $args,  'HASH' );
        ::is_deeply( $args, { level => 'warning' }, 'Correct args to log' );
        ::like(
            $msg,
            qr/\Qlog_fields() is deprecated\E/,
            'Correct dep warning',
        );
    };
}

my $foo = Foo->new();
isa_ok( $foo, 'Foo'        );
can_ok( $foo, 'log_fields' );
my ( $key, $logger ) = $foo->log_fields;
is( $key, 'logger', 'Logger key returned' );
isa_ok( $logger, 'Log::Dispatchouli' );