2 use Test::More tests=>62; {
7 use MooseX::Dependent::Types qw(Dependent);
8 use MooseX::Types::Moose qw(Int Any);
9 use MooseX::Types -declare=>[qw(SubDependent IntLessThan EvenInt
10 LessThan100GreatThen5andEvenIntNot44)];
11 use Moose::Util::TypeConstraints;
13 ok Dependent->check(1),
14 'Dependent is basically an "Any"';
16 is Dependent->validate(1), undef,
19 is Dependent->parent, 'Any',
20 'Dependent is an Any';
22 is Dependent->name, 'MooseX::Dependent::Types::Dependent',
23 'Dependent has expected name';
25 is Dependent->get_message,
26 "Validation failed for 'MooseX::Dependent::Types::Dependent' failed with value undef",
27 'Got Expected Message';
29 ok Dependent->equals(Dependent),
30 'Dependent equal Dependent';
32 ok Dependent->is_a_type_of(Dependent),
33 'Dependent is_a_type_of Dependent';
35 ok Dependent->is_a_type_of('Any'),
36 'Dependent is_a_type_of Any';
38 ok Dependent->is_subtype_of('Any'),
39 'Dependent is_subtype_of Dependent';
41 is Dependent->parent_type_constraint, 'Any',
42 'Correct parent type';
44 is subtype( SubDependent, as Dependent ),
46 'Create a useless subtype';
48 ok SubDependent->check(1),
49 'SubDependent is basically an "Any"';
51 is SubDependent->validate(1), undef,
52 'validate returned no error message';
54 is SubDependent->parent, 'MooseX::Dependent::Types::Dependent',
55 'SubDependent is a Dependent';
57 is SubDependent->name, 'main::SubDependent',
58 'Dependent has expected name';
60 is SubDependent->get_message,
61 "Validation failed for 'main::SubDependent' failed with value undef",
62 'Got Expected Message';
64 ok SubDependent->equals(SubDependent),
65 'SubDependent equal SubDependent';
67 ok !SubDependent->equals(Dependent),
68 'SubDependent does not equal Dependent';
70 ok SubDependent->is_a_type_of(Dependent),
71 'SubDependent is_a_type_of Dependent';
73 ok SubDependent->is_a_type_of(Any),
74 'SubDependent is_a_type_of Any';
76 ok SubDependent->is_subtype_of('Any'),
77 'SubDependent is_subtype_of Dependent';
79 ok !SubDependent->is_subtype_of(SubDependent),
80 'SubDependent is not is_subtype_of SubDependent';
86 return $val % 2 ? 0:1;
88 'Created a subtype of Int';
90 ok !EvenInt->check('aaa'), '"aaa" not an Int';
91 ok !EvenInt->check(1), '1 is not even';
92 ok EvenInt->check(2), 'but 2 is!';
94 ok subtype( IntLessThan,
95 as Dependent[EvenInt, Int],
98 my $constraining = shift @_ || 200; #warn "..... $constraining ......";
99 return ($value < $constraining && $value > 5);
101 'Created IntLessThan subtype';
103 ok !IntLessThan->check('aaa'),
104 '"aaa" is not an integer';
106 is IntLessThan->validate('aaa'),
107 "Validation failed for 'main::EvenInt' failed with value aaa",
108 'Got expected error messge for "aaa"';
110 ok !IntLessThan->check(1),
113 ok !IntLessThan->check(2),
116 ok !IntLessThan->check(15),
117 '15 greater than 5 (but odd)';
119 ok !IntLessThan->check(301),
122 ok !IntLessThan->check(400),
125 ok IntLessThan->check(10),
126 '10 greater than 5 (and even)';
128 is IntLessThan->validate(1),
129 "Validation failed for 'main::EvenInt' failed with value 1",
130 'error message is correct';
132 is IntLessThan->name, 'main::IntLessThan',
133 'Got correct name for IntLessThan';
135 is IntLessThan->parent, 'MooseX::Dependent::Types::Dependent[main::EvenInt, Int]',
136 'IntLessThan is a Dependent';
138 is IntLessThan->parent_type_constraint, EvenInt,
141 is IntLessThan->constraining_value_type_constraint, Int,
142 'constraining is an Int';
144 ok IntLessThan->equals(IntLessThan),
145 'IntLessThan equals IntLessThan';
147 ok IntLessThan->is_subtype_of(Dependent),
148 'IntLessThan is_subtype_of Dependent';
150 ok IntLessThan->is_subtype_of(Int),
151 'IntLessThan is_subtype_of Int';
153 ok IntLessThan->is_a_type_of(Dependent),
154 'IntLessThan is_a_type_of Dependent';
156 ok IntLessThan->is_a_type_of(Int),
157 'IntLessThan is_a_type_of Int';
159 ok IntLessThan->is_a_type_of(IntLessThan),
160 'IntLessThan is_a_type_of IntLessThan';
162 ok( (my $lessThan100GreatThen5andEvenInt = IntLessThan[100]),
165 ok !$lessThan100GreatThen5andEvenInt->check(150),
166 '150 Not less than 100';
168 ok !$lessThan100GreatThen5andEvenInt->check(151),
169 '151 Not less than 100';
171 ok !$lessThan100GreatThen5andEvenInt->check(2),
172 'Not greater than 5';
174 ok !$lessThan100GreatThen5andEvenInt->check(51),
177 ok !$lessThan100GreatThen5andEvenInt->check('aaa'),
180 ok $lessThan100GreatThen5andEvenInt->check(42),
181 'is Int, is even, greater than 5, less than 100';
183 ok subtype( LessThan100GreatThen5andEvenIntNot44,
186 my $value = shift @_;
187 return $value == 44 ? 0:1;
189 'Created LessThan100GreatThen5andEvenIntNot44 subtype';
191 ok !LessThan100GreatThen5andEvenIntNot44->check(150),
192 '150 Not less than 100';
194 ok !LessThan100GreatThen5andEvenIntNot44->check(300),
195 '300 Not less than 100 (check to make sure we are not defaulting 200)';
197 ok !LessThan100GreatThen5andEvenIntNot44->check(151),
198 '151 Not less than 100';
200 ok !LessThan100GreatThen5andEvenIntNot44->check(2),
201 'Not greater than 5';
203 ok !LessThan100GreatThen5andEvenIntNot44->check(51),
206 ok !LessThan100GreatThen5andEvenIntNot44->check('aaa'),
209 ok LessThan100GreatThen5andEvenIntNot44->check(42),
210 'is Int, is even, greater than 5, less than 100';
212 ok !LessThan100GreatThen5andEvenIntNot44->check(44),
213 'is Int, is even, greater than 5, less than 100 BUT 44!';
215 #die IntLessThan->validate(100);
216 #use Data::Dump qw/dump/;
217 #warn dump IntLessThan;