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 tests => 6;
use Test::Exception;
use File::Spec;

{
    package Class;
    use Moose;
    use MooseX::FileAttribute;

    has_file 'file';
    has_directory 'dir';
}

my $c = Class->new( file => 'file', dir => 'dir' );
isa_ok $c, 'Class';
isa_ok $c->file, 'Path::Class::File';
isa_ok $c->dir, 'Path::Class::Dir';

{
    package EfClass;
    use Moose;
    use MooseX::FileAttribute;

    has_file 'file' => ( must_exist => 1 );
}

my $no_exist
    = File::Spec->catfile( '', qw/omg hopefully this does not exist!/ );

throws_ok {
    EfClass->new( file => $no_exist );
} qr/File '\Q$no_exist\E' must exist./, 'file must exist';

{
    package EdClass;
    use Moose;
    use MooseX::FileAttribute;

    has_directory 'dir' => ( must_exist => 1 );
}

throws_ok {
    EdClass->new( dir => $no_exist );
} qr/Directory '\Q$no_exist\E' must exist./, 'directory must exist';

lives_ok {
    EdClass->new( dir => '.' ); # if the current directory does not exist, I hate you.
} 'existing dir constraint passes on existing dir';