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

use Test::More 0.88;
use Test::Fatal;
use File::Basename 'fileparse';
use POSIX 'strftime';
use Log::Dispatch::File::Stamped;

my @localtime = (localtime);
my @gmtime = (gmtime);

note 'localtime: ', join(' ', @localtime);
note 'gmtime:    ', join(' ', @gmtime);

my %args = (
    min_level => 'debug',
    close_after_write => 1, # prevents file creation until first use
    filename => 'foo.log',
    stamp_fmt => '%Y%m%d%H',
);

{
    my $logger = Log::Dispatch::File::Stamped->new(%args);
    my ($basename, $path) = fileparse($logger->{filename});
    is(
        $basename,
        strftime('foo-' . $args{stamp_fmt} . '.log', @localtime),
        'localtime is used by default',
    );
}

{
    my $logger = Log::Dispatch::File::Stamped->new(%args, time_function => 'localtime');
    my ($basename, $path) = fileparse($logger->{filename});
    is(
        $basename,
        strftime('foo-' . $args{stamp_fmt} . '.log', @localtime),
        'localtime is used by request',
    );
}

{
    my $logger = Log::Dispatch::File::Stamped->new(%args, time_function => 'gmtime');
    my ($basename, $path) = fileparse($logger->{filename});
    is(
        $basename,
        strftime('foo-' . $args{stamp_fmt} . '.log', @gmtime),
        'gmtime is used by request',
    );
}

{
    like(
        exception { Log::Dispatch::File::Stamped->new(%args, time_function => 'ethertime') },
        qr/time_function.*ethertime/,
        'no support for anything but localtime, gmtime',
    );
}

done_testing;