package Logger;
use warnings;
use strict;
use Exporter qw{ import };
our @EXPORT = qw{ log_warn };
sub log_warn { warn @_ }
__PACKAGE__
####
package Common;
use warnings;
use strict;
use experimental qw( signatures );
use Logger;
use Moose::Exporter;
my ($import, $unimport, $init_meta) = Moose::Exporter->build_import_methods(
as_is => [\&Logger::log_warn]
);
sub import { goto &$import }
__PACKAGE__
####
package MyObj;
use Moose;
use Common;
use namespace::autoclean;
use experimental qw{ signatures };
has value => (is => 'ro', required => 1);
sub foo($self) {
log_warn('Value too large') if $self->value > 10;
}
__PACKAGE__->meta->make_immutable
####
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 2 * 2;
use Sub::Override;
my @warnings;
my $override;
use MyObj;
BEGIN {
$override = 'Sub::Override'->new(
'MyObj::log_warn' => sub { push @warnings, $_[0] });
}
for my $test ([1, undef, 'no warnings'], [11, 'Value too large', 'warnings']) {
my ($value, $warnings, $name) = @$test;
@warnings = ();
my $o = bless {value => $value}, 'MyObj';
ok($o, 'constructs');
$o->foo;
is($warnings[0], $warnings, $name);
}
####
t/01-basic.t ..
1..4
Cannot replace non-existent sub (MyObj::log_warn) at t/01-basic.t line 15.
BEGIN failed--compilation aborted at t/01-basic.t line 16.
# Looks like your test exited with 255 before it could output anything.
Dubious, test returned 255 (wstat 65280, 0xff00)
Failed 4/4 subtests
Test Summary Report
-------------------
t/01-basic.t (Wstat: 65280 Tests: 0 Failed: 0)
Non-zero exit status: 255
Parse errors: Bad plan. You planned 4 tests but ran 0.
####
#!/usr/bin/perl
use warnings;
use strict;
use Test::More tests => 2 * 2;
use Sub::Override;
my @warnings;
my $override;
use Logger;
BEGIN {
$override = 'Sub::Override'->new(
'Logger::log_warn' => sub { 'WHATEVER' });
}
use MyObj;
BEGIN {
*MyObj::log_warn = sub { push @warnings, $_[0] };
}
for my $test ([1, undef, 'no warnings'], [11, 'Value too large', 'warnings']) {
my ($value, $warnings, $name) = @$test;
@warnings = ();
my $o = bless {value => $value}, 'MyObj';
ok($o, 'constructs');
$o->foo;
is($warnings[0], $warnings, $name);
}