Merge branch 'master' of gitmo@jules.scsys.co.uk:Moose
[gitmo/Moose.git] / t / 040_type_constraints / 022_custom_type_errors.t
CommitLineData
f5f2d482 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
599c5541 6use Test::More tests => 10;
f5f2d482 7use Test::Exception;
8
9{
10 package Animal;
11 use Moose;
12 BEGIN {
13 ::use_ok("Moose::Util::TypeConstraints");
14 }
15
16 subtype 'Natural'
17 => as 'Int'
18 => where { $_ > 0 }
19 => message { "This number ($_) is not a positive integer!" };
20
21 subtype 'NaturalLessThanTen'
22 => as 'Natural'
23 => where { $_ < 10 }
24 => message { "This number ($_) is not less than ten!" };
25
26 has leg_count => (
27 is => 'rw',
28 isa => 'NaturalLessThanTen',
599c5541 29 lazy => 1,
30 default => 0,
31
f5f2d482 32 );
599c5541 33
f5f2d482 34}
35
688fcdda 36lives_ok { my $goat = Animal->new(leg_count => 4) } '... no errors thrown, value is good';
37lives_ok { my $spider = Animal->new(leg_count => 8) } '... no errors thrown, value is good';
f5f2d482 38
39throws_ok { my $fern = Animal->new(leg_count => 0) }
688fcdda 40 qr/This number \(0\) is not less than ten!/,
f5f2d482 41 "gave custom supertype error message on new";
42
43throws_ok { my $centipede = Animal->new(leg_count => 30) }
688fcdda 44 qr/This number \(30\) is not less than ten!/,
f5f2d482 45 "gave custom subtype error message on new";
46
47my $chimera;
688fcdda 48lives_ok { $chimera = Animal->new(leg_count => 4) } '... no errors thrown, value is good';
f5f2d482 49
50# first we remove the lion's legs..
51throws_ok { $chimera->leg_count(0) }
688fcdda 52 qr/This number \(0\) is not less than ten!/,
f5f2d482 53 "gave custom supertype error message on set_value";
54
55# mix in a few octopodes
56throws_ok { $chimera->leg_count(16) }
688fcdda 57 qr/This number \(16\) is not less than ten!/,
f5f2d482 58 "gave custom subtype error message on set_value";
59
599c5541 60# try the lazy legs
61my $gimp;
62lives_ok { my $gimp = Animal->new() } '... no errors thrown, value is good';
63throws_ok { $gimp->leg_count }
64 qr/This number \(0\) is not less than ten!/,
65 "gave custom supertype error message on set_value";
66