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 lib "$FindBin::Bin/lib";
use Test::More;

use File::Stat::OO;

if ($^O =~ /Win/) {
    plan tests => 29;
} else {
    plan tests => 36;
}

my $obj   = File::Stat::OO->new;
my $class = 'File::Stat::OO';

isa_ok($obj, $class);

my @methods =
  (qw/new file use_datetime owner group/, @File::Stat::OO::stat_keys);

foreach my $m (@methods) {
    ok($obj->can($m), "$class->can('$m')");
}

$obj->stat($0);

foreach my $m (@File::Stat::OO::stat_keys) {
    next
      if (($^O =~ /Win/)
	&& grep(/^$m$/, (qw/ino uid gid blksize blocks owner group/)));
    next if $m eq 'rdev';
    ok($obj->can($m), "Method $m");
}

$obj->use_datetime(1);
$obj->stat($0);

foreach my $m (qw/atime ctime mtime/) {
    my $date_obj = $obj->$m;
    isa_ok($date_obj, 'DateTime');
}

unless ($^O =~ /Win/) {
    my $owner = (getpwuid($obj->uid))[0];
    my $group = (getgrgid($obj->gid))[0];
    is($owner, $obj->owner,  'Owner');
    is($group, $obj->group, 'Group');
}