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 Test::More 'no_plan';

use_ok( 'Brick::General' );
use_ok( 'Brick::Bucket' );

use lib qw( t/lib );
use_ok( 'Mock::Bucket' );

my $bucket = Mock::Bucket->new;
isa_ok( $bucket, 'Mock::Bucket' );
isa_ok( $bucket, Mock::Bucket->bucket_class );

can_ok( $bucket, '_is_tuesday' );

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# WORKS - overriding localtime
{
my $sub = $bucket->_is_tuesday();

isa_ok( $sub, ref sub {}, "_is_tuesday returns a code ref" );

{
package Brick::Bucket;

use subs qw(localtime);
sub localtime (;$) { qw( 0 0 0 0 0 0 2 ) };

package main;

use subs qw(localtime);
sub localtime (;$) { qw( 0 0 0 0 0 0 2 ) };

is( (localtime)[6], 2, "Overrode localtime" );

# How do I test this?
my $result = eval { $sub->() };
ok( $result, "Passed" );
}

}

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# FAILS - overriding localtime
{
my $sub = $bucket->_is_tuesday();

isa_ok( $sub, ref sub {}, "_is_tuesday returns a code ref" );

{
no warnings 'redefine';
*Brick::Bucket::localtime = sub (;$) { qw( 0 0 0 0 0 0 3 ) };
*localtime = sub (;$) { qw( 0 0 0 0 0 0 3 ) };

is( (localtime)[6], 3, "Overrode localtime" );

# How do I test this?
my $result = eval { $sub->() };
is( $result, 0, "Failed (expected)" );
}

}