The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl

use strict;
use warnings;

use FindBin;
use File::Spec;
use File::Temp qw/tempdir/;
use File::Touch;

use Test::More;
use File::Find::Rule::Age;

my $test_dir = File::Temp->newdir( CLEANUP => 1 );
my $dir_name = $test_dir->dirname;

my $now   = DateTime->now();
my $today = DateTime->now();
$today->truncate( to => 'day' );
my $yesterday = DateTime->now();
$yesterday->truncate( to => 'day' );
$yesterday->subtract( days => 2 );

File::Touch->new( time => $now->epoch )->touch( File::Spec->catfile( $dir_name, 'newer' ) );
File::Touch->new( time => $yesterday->epoch )->touch( File::Spec->catfile( $dir_name, 'older' ) );

my @older = find(
    file => age => [ older => "1D" ],
    in   => $dir_name
);
is_deeply( \@older, [ File::Spec->catfile( $dir_name, 'older' ) ], "older" );
my @newer = find(
    file => age => [ newer => "1D" ],
    in   => $dir_name
);
is_deeply( \@newer, [ File::Spec->catfile( $dir_name, 'newer' ) ], "newer" );

SCOPE:
{
    my @warns;
    local $SIG{__WARN__} = sub { push @warns, @_ };
    my @fail = find(
        file => age => [ "ancient" => "1D" ],
        in   => $dir_name
    );
    cmp_ok( scalar @warns, "==", 1, "catched 1 warning for invalid criterion" );
    like( $warns[0], qr/^Invalid criterion: ancient/, "Criterion warning" );

    @warns = ();
    @fail  = find(
        file => age => [ "Newer" => "Mein, Dein Tag" ],
        in   => $dir_name
    );
    cmp_ok( scalar @warns, "==", 1, "catched 1 warning for missing operands" );
    like( $warns[0], qr/^Duration or Unit missing/, "Duration/Unit warning" );
}

done_testing;