The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
# This is automatically generated by author/import-moose-test.pl.
# DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!!
use t::lib::MooseCompat;

use strict;
use warnings;

use Test::More;
use Test::Exception;

{
    package Animal;
    use Mouse;
    use Mouse::Util::TypeConstraints;

    subtype 'Natural' => as 'Int' => where { $_ > 0 } =>
        message {"This number ($_) is not a positive integer!"};

    subtype 'NaturalLessThanTen' => as 'Natural' => where { $_ < 10 } =>
        message {"This number ($_) is not less than ten!"};

    has leg_count => (
        is      => 'rw',
        isa     => 'NaturalLessThanTen',
        lazy    => 1,
        default => 0,
    );
}

lives_ok { my $goat = Animal->new( leg_count => 4 ) }
'... no errors thrown, value is good';
lives_ok { my $spider = Animal->new( leg_count => 8 ) }
'... no errors thrown, value is good';

throws_ok { my $fern = Animal->new( leg_count => 0 ) }
qr/This number \(0\) is not less than ten!/,
    'gave custom supertype error message on new';

throws_ok { my $centipede = Animal->new( leg_count => 30 ) }
qr/This number \(30\) is not less than ten!/,
    'gave custom subtype error message on new';

my $chimera;
lives_ok { $chimera = Animal->new( leg_count => 4 ) }
'... no errors thrown, value is good';

throws_ok { $chimera->leg_count(0) }
qr/This number \(0\) is not less than ten!/,
    'gave custom supertype error message on set to 0';

throws_ok { $chimera->leg_count(16) }
qr/This number \(16\) is not less than ten!/,
    'gave custom subtype error message on set to 16';

my $gimp = eval { Animal->new() };
is( $@, '', '... no errors thrown, value is good' );

throws_ok { $gimp->leg_count }
qr/This number \(0\) is not less than ten!/,
    'gave custom supertype error message on lazy set to 0';

done_testing;