Commit | Line | Data |
f5f2d482 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
a28e50e4 |
6 | use Test::More; |
53a4d826 |
7 | use Test::Exception; |
f5f2d482 |
8 | |
9 | { |
10 | package Animal; |
11 | use Moose; |
0e9e37e5 |
12 | use Moose::Util::TypeConstraints; |
f5f2d482 |
13 | |
62bf83c7 |
14 | subtype 'Natural' => as 'Int' => where { $_ > 0 } => |
15 | message {"This number ($_) is not a positive integer!"}; |
f5f2d482 |
16 | |
62bf83c7 |
17 | subtype 'NaturalLessThanTen' => as 'Natural' => where { $_ < 10 } => |
18 | message {"This number ($_) is not less than ten!"}; |
f5f2d482 |
19 | |
20 | has leg_count => ( |
62bf83c7 |
21 | is => 'rw', |
22 | isa => 'NaturalLessThanTen', |
23 | lazy => 1, |
599c5541 |
24 | default => 0, |
f5f2d482 |
25 | ); |
26 | } |
27 | |
53a4d826 |
28 | lives_ok { my $goat = Animal->new( leg_count => 4 ) } |
ded5f696 |
29 | '... no errors thrown, value is good'; |
53a4d826 |
30 | lives_ok { my $spider = Animal->new( leg_count => 8 ) } |
ded5f696 |
31 | '... no errors thrown, value is good'; |
0e9e37e5 |
32 | |
53a4d826 |
33 | throws_ok { my $fern = Animal->new( leg_count => 0 ) } |
ded5f696 |
34 | qr/This number \(0\) is not less than ten!/, |
35 | 'gave custom supertype error message on new'; |
f5f2d482 |
36 | |
53a4d826 |
37 | throws_ok { my $centipede = Animal->new( leg_count => 30 ) } |
ded5f696 |
38 | qr/This number \(30\) is not less than ten!/, |
39 | 'gave custom subtype error message on new'; |
f5f2d482 |
40 | |
ded5f696 |
41 | my $chimera; |
53a4d826 |
42 | lives_ok { $chimera = Animal->new( leg_count => 4 ) } |
ded5f696 |
43 | '... no errors thrown, value is good'; |
f5f2d482 |
44 | |
53a4d826 |
45 | throws_ok { $chimera->leg_count(0) } |
ded5f696 |
46 | qr/This number \(0\) is not less than ten!/, |
47 | 'gave custom supertype error message on set to 0'; |
f5f2d482 |
48 | |
53a4d826 |
49 | throws_ok { $chimera->leg_count(16) } |
ded5f696 |
50 | qr/This number \(16\) is not less than ten!/, |
51 | 'gave custom subtype error message on set to 16'; |
f5f2d482 |
52 | |
ded5f696 |
53 | my $gimp = eval { Animal->new() }; |
54 | is( $@, '', '... no errors thrown, value is good' ); |
f5f2d482 |
55 | |
53a4d826 |
56 | throws_ok { $gimp->leg_count } |
ded5f696 |
57 | qr/This number \(0\) is not less than ten!/, |
58 | 'gave custom supertype error message on lazy set to 0'; |
62bf83c7 |
59 | |
a28e50e4 |
60 | done_testing; |