typo fix
[gitmo/MooseX-Types-Structured.git] / t / 06-api.t
CommitLineData
a4a88fef 1BEGIN {
8dbdca20 2 use strict;
3 use warnings;
4 use Test::More tests=>88;
a4a88fef 5}
6
04109574 7{
8 package TypeLib;
9 use MooseX::Types::Structured qw(Dict Tuple);
10 use MooseX::Types::Moose qw(Int Str Item Object ArrayRef HashRef);
11 use MooseX::Types -declare => [qw(
12 MyDict1 MyDict2 MyDict3 MyDict4 subMyDict3 subMyDict1
13 MyTuple1 MyTuple2 MyTuple3 subMyTuple3
14 )];
15
16 ## Create some sample Dicts
17
18 subtype MyDict1,
19 as Dict[name=>Str, age=>Int];
20
21 subtype subMyDict1,
22 as MyDict1;
23
24 subtype MyDict2,
25 as Dict[name=>Str, age=>Int];
16aea7bf 26
04109574 27 subtype MyDict3,
28 as Dict[key=>Int, anotherkey=>Str];
16aea7bf 29
04109574 30 subtype subMyDict3,
31 as MyDict3;
16aea7bf 32
04109574 33 subtype MyDict4,
34 as Dict[name=>Str, age=>Item];
16aea7bf 35
04109574 36 ## Create some sample Tuples
16aea7bf 37
04109574 38 subtype MyTuple1,
39 as Tuple[Int,Int,Str];
179af711 40
04109574 41 subtype MyTuple2,
42 as Tuple[Int,Int,Str];
16aea7bf 43
04109574 44 subtype MyTuple3,
45 as Tuple[Object, HashRef];
16aea7bf 46
04109574 47 subtype subMyTuple3,
48 as MyTuple3;
49}
16aea7bf 50
04109574 51use Moose::Util::TypeConstraints;
52use MooseX::Types::Structured qw(Dict Tuple);
53use MooseX::Types::Moose qw(Int Str Item Object ArrayRef HashRef);
54
55BEGIN {
56 TypeLib->import(':all');
57}
a4a88fef 58
59## Test equals
60
16aea7bf 61ok ( MyDict1->equals(MyDict2), 'MyDict1 == MyDict2');
62ok ( MyDict2->equals(MyDict1), 'MyDict2 == MyDict1');
63ok (!MyDict1->equals(MyDict3), 'MyDict1 == MyDict3');
64ok (!MyDict2->equals(MyDict3), 'MyDict2 == MyDict3');
65ok (!MyDict3->equals(MyDict2), 'MyDict3 == MyDict2');
66ok (!MyDict3->equals(MyDict1), 'MyDict3 == MyDict1');
a4a88fef 67
16aea7bf 68ok ( MyTuple1->equals(MyTuple2), 'MyTuple1 == MyTuple2');
69ok ( MyTuple2->equals(MyTuple1), 'MyTuple2 == MyTuple1');
70ok (!MyTuple1->equals(MyTuple3), 'MyTuple1 == MyTuple3');
71ok (!MyTuple2->equals(MyTuple3), 'MyTuple2 == MyTuple3');
72ok (!MyTuple3->equals(MyTuple2), 'MyTuple3 == MyTuple2');
73ok (!MyTuple3->equals(MyTuple1), 'MyTuple3 == MyTuple1');
a4a88fef 74
fe1fd33c 75ok ( MyDict1->equals(MyDict2), 'MyDict1 == MyDict2');
76ok ( MyDict2->equals(MyDict1), 'MyDict2 == MyDict1');
77ok (!MyDict1->equals(MyDict3), 'MyDict1 == MyDict3');
179af711 78ok (!MyDict1->equals(MyDict4), 'MyDict1 == MyDict3');
fe1fd33c 79ok (!MyDict2->equals(MyDict3), 'MyDict2 == MyDict3');
179af711 80ok (!MyDict2->equals(MyDict4), 'MyDict2 == MyDict3');
fe1fd33c 81ok (!MyDict3->equals(MyDict2), 'MyDict3 == MyDict2');
179af711 82ok (!MyDict3->equals(MyDict4), 'MyDict3 == MyDict2');
fe1fd33c 83ok (!MyDict3->equals(MyDict1), 'MyDict3 == MyDict1');
179af711 84ok (!MyDict4->equals(MyDict1), 'MyDict3 == MyDict1');
85ok (!MyDict4->equals(MyDict2), 'MyDict3 == MyDict1');
86ok (!MyDict4->equals(MyDict3), 'MyDict3 == MyDict1');
fe1fd33c 87
88ok ( MyTuple1->equals(MyTuple2), 'MyTuple1 == MyTuple2');
89ok ( MyTuple2->equals(MyTuple1), 'MyTuple2 == MyTuple1');
90ok (!MyTuple1->equals(MyTuple3), 'MyTuple1 == MyTuple3');
91ok (!MyTuple2->equals(MyTuple3), 'MyTuple2 == MyTuple3');
92ok (!MyTuple3->equals(MyTuple2), 'MyTuple3 == MyTuple2');
93ok (!MyTuple3->equals(MyTuple1), 'MyTuple3 == MyTuple1');
af1d00c9 94
a4a88fef 95## Test is_a_type_of
96
179af711 97ok ( MyDict1->is_a_type_of(HashRef), 'MyDict1 is_a_type_of HashRef');
16aea7bf 98ok ( MyDict1->is_a_type_of(Dict), 'MyDict1 is_a_type_of Dict');
99ok (!MyDict1->is_a_type_of(Tuple), 'MyDict1 NOT is_a_type_of Tuple');
100ok ( MyDict1->is_a_type_of(MyDict2), 'MyDict1 is_a_type_of MyDict2');
101ok ( MyDict2->is_a_type_of(MyDict1), 'MyDict2 is_a_type_of MyDict1');
102ok (!MyDict1->is_a_type_of(MyDict3), 'MyDict1 NOT is_a_type_of MyDict3');
103ok (!MyDict2->is_a_type_of(MyDict3), 'MyDict2 NOT is_a_type_of MyDict3');
104ok ( subMyDict1->is_a_type_of(Dict), 'subMyDict1 type of Dict');
105ok ( subMyDict1->is_a_type_of(MyDict1), 'subMyDict1 type of MyDict1');
106ok ( subMyDict1->is_a_type_of(subMyDict1), 'subMyDict1 type of subMyDict1');
107ok ( subMyDict1->is_a_type_of(MyDict2), 'subMyDict1 type of MyDict2');
179af711 108ok ( MyDict4->is_a_type_of(HashRef), 'MyDict4 is_a_type_of HashRef');
109ok ( MyDict4->is_a_type_of(Dict), 'MyDict4 is_a_type_of Dict');
110ok (!MyDict4->is_a_type_of(Tuple), 'MyDict4 NOT is_a_type_of Tuple');
111ok (!MyDict4->is_a_type_of(MyDict2), 'MyDict4 NOT is_a_type_of MyDict2');
112ok ( MyDict2->is_a_type_of(MyDict4), 'MyDict2 is_a_type_of MyDict4');
113ok (!MyDict4->is_a_type_of(MyDict3), 'MyDict4 NOT is_a_type_of MyDict3');
114
16aea7bf 115
116ok ( MyTuple1->is_a_type_of(Tuple), 'MyTuple1 is_a_type_of Tuple');
117ok (!MyTuple1->is_a_type_of(Dict), 'MyTuple1 NOT is_a_type_of Dict');
118ok ( MyTuple1->is_a_type_of(MyTuple2), 'MyTuple1 is_a_type_of MyTuple2');
119ok ( MyTuple2->is_a_type_of(MyTuple1), 'MyTuple2 is_a_type_of MyTuple1');
120ok (!MyTuple1->is_a_type_of(MyTuple3), 'MyTuple1 NOT is_a_type_of MyTuple3');
121ok (!MyTuple2->is_a_type_of(MyTuple3), 'MyTuple2 NOT is_a_type_of MyTuple3');
122
a4a88fef 123## is_subtype_of
124
820efec9 125ok ( not((Tuple[Tuple[ class_type('Paper'), class_type('Stone') ], Dict[]])->equals( Tuple[Tuple[ Item, Item ], Dict[]] )), "tuple of tuple" );
126ok ( (Tuple[Tuple[ class_type('Paper'), class_type('Stone') ], Dict[]])->equals( Tuple[Tuple[ class_type('Paper'), class_type('Stone') ], Dict[]] ), "tuple of tuple" );
127ok ( (Tuple[Tuple[ class_type('Paper'), class_type('Stone') ], Dict[]])->is_a_type_of( Tuple[Tuple[ Item, Item ], Dict[]] ), "tuple of tuple" );
128ok ( (Tuple[Tuple[ class_type('Paper'), class_type('Stone') ], Dict[]])->is_a_type_of( Tuple[Tuple[ Item, Item ], Dict[]] ), "tuple of tuple" );
129ok ( (Tuple[Tuple[ class_type('Paper'), class_type('Stone') ], Dict[]])->is_subtype_of( Tuple[Tuple[ Item, Item ], Dict[]] ), "tuple of tuple" );
130
179af711 131ok ( MyDict1->is_subtype_of(HashRef), 'MyDict1 is_subtype_of HashRef');
16aea7bf 132ok ( MyDict1->is_subtype_of(Dict), 'MyDict1 is_subtype_of Dict');
179af711 133ok ( MyDict1->is_subtype_of(MyDict4), 'MyDict1 is_subtype_of MyDict4');
16aea7bf 134ok (!MyDict1->is_subtype_of(Tuple), 'MyDict1 NOT is_subtype_of Tuple');
179af711 135ok (!MyDict1->is_subtype_of(MyDict2), 'MyDict1 NOT is_subtype_of MyDict2');
136ok (!MyDict2->is_subtype_of(MyDict1), 'MyDict2 NOT is_subtype_of MyDict1');
16aea7bf 137ok (!MyDict1->is_subtype_of(MyDict3), 'MyDict1 NOT is_subtype_of MyDict3');
138ok (!MyDict2->is_subtype_of(MyDict3), 'MyDict2 NOT is_subtype_of MyDict3');
139ok ( subMyDict1->is_subtype_of(Dict), 'subMyDict1 is_subtype_of Dict');
140ok ( subMyDict1->is_subtype_of(MyDict1), 'subMyDict1 is_subtype_of MyDict1');
179af711 141ok (!subMyDict1->is_subtype_of(subMyDict1), 'subMyDict1 NOT is_subtype_of subMyDict1');
16aea7bf 142ok ( subMyDict1->is_subtype_of(MyDict2), 'subMyDict1 is_subtype_of MyDict2');
143
144ok ( MyTuple1->is_subtype_of(Tuple), 'MyTuple1 is_subtype_of Tuple');
145ok (!MyTuple1->is_subtype_of(Dict), 'MyTuple1 NOT is_subtype_of Dict');
146ok (!MyTuple1->is_subtype_of(MyTuple2), 'MyTuple1 is_subtype_of MyTuple2');
147ok (!MyTuple2->is_subtype_of(MyTuple1), 'MyTuple2 is_subtype_of MyTuple1');
148ok (!MyTuple1->is_subtype_of(MyTuple3), 'MyTuple1 NOT is_subtype_of MyTuple3');
149ok (!MyTuple2->is_subtype_of(MyTuple3), 'MyTuple2 NOT is_subtype_of MyTuple3');
a4a88fef 150
e327145a 151## Test manual parameterizing
152
153PARAMETERIZE: {
154
155 ok (my $int = Moose::Util::TypeConstraints::find_or_parse_type_constraint('Int'), 'Got Int');
8dbdca20 156 ok (my $str = Moose::Util::TypeConstraints::find_or_parse_type_constraint('Str'), 'Got Str');
157 ok (my $hashref = Moose::Util::TypeConstraints::find_or_parse_type_constraint('HashRef[Int]'), 'Got HashRef');
e327145a 158
159 ## Test Dict->parameterize
160 ok (my $test_dict = Dict(), 'Created Test Dict');
161 ok (my $person = $test_dict->parameterize(name=>$str, age=>$int), 'Parameterized It');
162 ok ($person->check({name=>'John', age=>21}), 'Passed');
163 ok ($person->check({age=>25, name=>'User'}), 'Passed');
8dbdca20 164
e327145a 165 ## Test Tuple->parameterize
166 ok (my $test_tuple = Tuple(), 'Created Test Tuple');
167 ok (my $int_and_hashref = $test_tuple->parameterize($int, $hashref), 'Parameterized It');
168 ok ($int_and_hashref->check([1, {key=>2, key2=>3}]), "Passed");
8dbdca20 169 ok (!$int_and_hashref->check(['a', {key=>2, key2=>3}]), "Not Passed");
e327145a 170 ok (!$int_and_hashref->check([1, {key=>'a', key2=>3}]), "Not Passed");
171}