2 use Test::More tests=>79; {
7 use MooseX::Types::Parameterizable qw(Parameterizable);
8 use MooseX::Types::Moose qw(Int Any Maybe);
9 use Moose::Util::TypeConstraints;
11 use MooseX::Types -declare=>[qw(SubParameterizable IntLessThan EvenInt
12 LessThan100GreatThen5andEvenIntNot44 IntNot54
13 GreatThen5andEvenIntNot54or64)];
15 ok Parameterizable->check(1),
16 'Parameterizable is basically an "Any"';
18 is Parameterizable->validate(1), undef,
21 is Parameterizable->parent, 'Any',
22 'Parameterizable is an Any';
24 is Parameterizable->name, 'MooseX::Types::Parameterizable::Parameterizable',
25 'Parameterizable has expected name';
27 like Parameterizable->get_message,
28 qr/Validation failed for 'MooseX::Types::Parameterizable::Parameterizable' with value undef/,
29 'Got Expected Message';
31 ok Parameterizable->equals(Parameterizable),
32 'Parameterizable equal Parameterizable';
34 ok Parameterizable->is_a_type_of(Parameterizable),
35 'Parameterizable is_a_type_of Parameterizable';
37 ok Parameterizable->is_a_type_of('Any'),
38 'Parameterizable is_a_type_of Any';
40 ok Parameterizable->is_subtype_of('Any'),
41 'Parameterizable is_subtype_of Parameterizable';
43 is Parameterizable->parent_type_constraint, 'Any',
44 'Correct parent type';
46 is subtype( SubParameterizable, as Parameterizable ),
47 'main::SubParameterizable',
48 'Create a useless subtype';
50 ok SubParameterizable->check(1),
51 'SubParameterizable is basically an "Any"';
53 is SubParameterizable->validate(1), undef,
54 'validate returned no error message';
56 is SubParameterizable->parent, 'MooseX::Types::Parameterizable::Parameterizable',
57 'SubParameterizable is a Parameterizable';
59 is SubParameterizable->name, 'main::SubParameterizable',
60 'Parameterizable has expected name';
62 like SubParameterizable->get_message,
63 qr/Validation failed for 'main::SubParameterizable' with value undef/,
64 'Got Expected Message';
66 ok SubParameterizable->equals(SubParameterizable),
67 'SubParameterizable equal SubParameterizable';
69 ok !SubParameterizable->equals(Parameterizable),
70 'SubParameterizable does not equal Parameterizable';
72 ok SubParameterizable->is_a_type_of(Parameterizable),
73 'SubParameterizable is_a_type_of Parameterizable';
75 ok SubParameterizable->is_a_type_of(Any),
76 'SubParameterizable is_a_type_of Any';
78 ok SubParameterizable->is_subtype_of('Any'),
79 'SubParameterizable is_subtype_of Parameterizable';
81 ok !SubParameterizable->is_subtype_of(SubParameterizable),
82 'SubParameterizable is not is_subtype_of SubParameterizable';
88 return $val % 2 ? 0:1;
90 'Created a subtype of Int';
92 ok !EvenInt->check('aaa'), '"aaa" not an Int';
93 ok !EvenInt->check(1), '1 is not even';
94 ok EvenInt->check(2), 'but 2 is!';
96 ok subtype( IntLessThan,
97 as Parameterizable[EvenInt, Maybe[Int]],
100 my $constraining = shift @_ || 200;
101 return ($value < $constraining && $value > 5);
103 'Created IntLessThan subtype';
105 ok !IntLessThan->check('aaa'),
106 '"aaa" is not an integer';
108 like IntLessThan->validate('aaa'),
109 qr/Validation failed for 'main::EvenInt' with value .*aaa.*/,
110 'Got expected error messge for "aaa"';
112 ok !IntLessThan->check(1),
115 ok !IntLessThan->check(2),
118 ok !IntLessThan->check(15),
119 '15 greater than 5 (but odd)';
121 ok !IntLessThan->check(301),
124 ok !IntLessThan->check(400),
127 ok IntLessThan->check(10),
128 '10 greater than 5 (and even)';
130 like IntLessThan->validate(1),
131 qr/Validation failed for 'main::EvenInt' with value 1/,
132 'error message is correct';
134 is IntLessThan->name, 'main::IntLessThan',
135 'Got correct name for IntLessThan';
137 is IntLessThan->parent, 'MooseX::Types::Parameterizable::Parameterizable[main::EvenInt, Maybe[Int]]',
138 'IntLessThan is a Parameterizable';
140 is IntLessThan->parent_type_constraint, EvenInt,
143 is IntLessThan->constraining_value_type_constraint, (Maybe[Int]),
144 'constraining is an Int';
146 ok IntLessThan->equals(IntLessThan),
147 'IntLessThan equals IntLessThan';
149 ok IntLessThan->is_subtype_of(Parameterizable),
150 'IntLessThan is_subtype_of Parameterizable';
152 ok IntLessThan->is_subtype_of(Int),
153 'IntLessThan is_subtype_of Int';
155 ok IntLessThan->is_a_type_of(Parameterizable),
156 'IntLessThan is_a_type_of Parameterizable';
158 ok IntLessThan->is_a_type_of(Int),
159 'IntLessThan is_a_type_of Int';
161 ok IntLessThan->is_a_type_of(IntLessThan),
162 'IntLessThan is_a_type_of IntLessThan';
164 ok( (my $lessThan100GreatThen5andEvenInt = IntLessThan[100]),
167 ok !$lessThan100GreatThen5andEvenInt->check(150),
168 '150 Not less than 100';
170 ok !$lessThan100GreatThen5andEvenInt->check(151),
171 '151 Not less than 100';
173 ok !$lessThan100GreatThen5andEvenInt->check(2),
174 'Not greater than 5';
176 ok !$lessThan100GreatThen5andEvenInt->check(51),
179 ok !$lessThan100GreatThen5andEvenInt->check('aaa'),
182 ok $lessThan100GreatThen5andEvenInt->check(42),
183 'is Int, is even, greater than 5, less than 100';
185 ok subtype( LessThan100GreatThen5andEvenIntNot44,
188 my $value = shift @_;
191 'Created LessThan100GreatThen5andEvenIntNot44 subtype';
193 ok !LessThan100GreatThen5andEvenIntNot44->check(150),
194 '150 Not less than 100';
196 ok !LessThan100GreatThen5andEvenIntNot44->check(300),
197 '300 Not less than 100 (check to make sure we are not defaulting 200)';
199 ok !LessThan100GreatThen5andEvenIntNot44->check(151),
200 '151 Not less than 100';
202 ok !LessThan100GreatThen5andEvenIntNot44->check(2),
203 'Not greater than 5';
205 ok !LessThan100GreatThen5andEvenIntNot44->check(51),
208 ok !LessThan100GreatThen5andEvenIntNot44->check('aaa'),
211 ok LessThan100GreatThen5andEvenIntNot44->check(42),
212 'is Int, is even, greater than 5, less than 100';
214 ok !LessThan100GreatThen5andEvenIntNot44->check(44),
215 'is Int, is even, greater than 5, less than 100 BUT 44!';
217 ok subtype( IntNot54,
220 my $val = shift @_ || 200;
223 'Created a subtype of Int';
225 ok IntNot54->check(100), 'Not 54';
226 ok !IntNot54->check(54), '54!!';
228 ok( subtype( GreatThen5andEvenIntNot54or64,
229 as IntLessThan[IntNot54],
231 my $value = shift @_;
234 'Created GreatThen5andEvenIntNot54or64 subtype');
236 is( (GreatThen5andEvenIntNot54or64->name),
237 'main::GreatThen5andEvenIntNot54or64',
238 'got expected name');
240 ok GreatThen5andEvenIntNot54or64->check(150),
241 '150 is even, less than 200, not 54 or 64 but > 5';
243 ok !GreatThen5andEvenIntNot54or64->check(202),
244 '202 is even, exceeds 200, not 54 or 64 but > 5';
246 is( ((GreatThen5andEvenIntNot54or64[100])->name),
247 'main::GreatThen5andEvenIntNot54or64[100]',
248 'got expected name');
250 ok !GreatThen5andEvenIntNot54or64([100])->check(150),
251 '150 Not less than 100';
253 ok !GreatThen5andEvenIntNot54or64([100])->check(300),
254 '300 Not less than 100 (check to make sure we are not defaulting 200)';
256 ok !GreatThen5andEvenIntNot54or64([100])->check(151),
257 '151 Not less than 100';
259 ok !GreatThen5andEvenIntNot54or64([100])->check(2),
260 'Not greater than 5';
262 ok !GreatThen5andEvenIntNot54or64([100])->check(51),
265 ok !GreatThen5andEvenIntNot54or64([100])->check('aaa'),
268 ok GreatThen5andEvenIntNot54or64([100])->check(42),
269 'is Int, is even, greater than 5, less than 100';
271 ok !GreatThen5andEvenIntNot54or64([100])->check(64),
272 'is Int, is even, greater than 5, less than 100 BUT 64!';
275 eval { GreatThen5andEvenIntNot54or64([54])->check(32) };
277 qr/Validation failed for 'main::IntNot54' with value 54/,
278 'Got Expected Error';