got working prototype, but relies on uncommited changes to Moose::Meta::TypeConstraint
[gitmo/MooseX-Types-Structured.git] / t / 06-api.t
CommitLineData
a4a88fef 1BEGIN {
2 use strict;
3 use warnings;
fe1fd33c 4 use Test::More tests=>56;
a4a88fef 5}
6
16aea7bf 7use MooseX::Types::Structured qw(Dict Tuple);
8use MooseX::Types::Moose qw(Int Str Object ArrayRef HashRef);
9use MooseX::Types -declare => [qw(
10 MyDict1 MyDict2 MyDict3 subMyDict3 subMyDict1
11 MyTuple1 MyTuple2 MyTuple3 subMyTuple3
12)];
13
14## Create some sample Dicts
15
16subtype MyDict1,
17 as Dict[name=>Str, age=>Int];
18
19subtype subMyDict1,
20 as MyDict1;
21
22subtype MyDict2,
23 as Dict[name=>Str, age=>Int];
24
25subtype MyDict3,
26 as Dict[key=>Int, anotherkey=>Str];
27
28subtype subMyDict3,
29 as MyDict3;
30
31## Create some sample Tuples
32
33subtype MyTuple1,
34 as Tuple[Int,Int,Str];
35
36subtype MyTuple2,
37 as Tuple[Int,Int,Str];
38
39subtype MyTuple3,
40 as Tuple[Object, HashRef];
41
42subtype subMyTuple3,
43 as MyTuple3;
a4a88fef 44
45## Test equals
46
16aea7bf 47ok ( MyDict1->equals(MyDict2), 'MyDict1 == MyDict2');
48ok ( MyDict2->equals(MyDict1), 'MyDict2 == MyDict1');
49ok (!MyDict1->equals(MyDict3), 'MyDict1 == MyDict3');
50ok (!MyDict2->equals(MyDict3), 'MyDict2 == MyDict3');
51ok (!MyDict3->equals(MyDict2), 'MyDict3 == MyDict2');
52ok (!MyDict3->equals(MyDict1), 'MyDict3 == MyDict1');
a4a88fef 53
16aea7bf 54ok ( MyTuple1->equals(MyTuple2), 'MyTuple1 == MyTuple2');
55ok ( MyTuple2->equals(MyTuple1), 'MyTuple2 == MyTuple1');
56ok (!MyTuple1->equals(MyTuple3), 'MyTuple1 == MyTuple3');
57ok (!MyTuple2->equals(MyTuple3), 'MyTuple2 == MyTuple3');
58ok (!MyTuple3->equals(MyTuple2), 'MyTuple3 == MyTuple2');
59ok (!MyTuple3->equals(MyTuple1), 'MyTuple3 == MyTuple1');
a4a88fef 60
fe1fd33c 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');
67
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');
af1d00c9 74
a4a88fef 75## Test is_a_type_of
76
16aea7bf 77ok ( MyDict1->is_a_type_of(Dict), 'MyDict1 is_a_type_of Dict');
78ok (!MyDict1->is_a_type_of(Tuple), 'MyDict1 NOT is_a_type_of Tuple');
79ok ( MyDict1->is_a_type_of(MyDict2), 'MyDict1 is_a_type_of MyDict2');
80ok ( MyDict2->is_a_type_of(MyDict1), 'MyDict2 is_a_type_of MyDict1');
81ok (!MyDict1->is_a_type_of(MyDict3), 'MyDict1 NOT is_a_type_of MyDict3');
82ok (!MyDict2->is_a_type_of(MyDict3), 'MyDict2 NOT is_a_type_of MyDict3');
83ok ( subMyDict1->is_a_type_of(Dict), 'subMyDict1 type of Dict');
84ok ( subMyDict1->is_a_type_of(MyDict1), 'subMyDict1 type of MyDict1');
85ok ( subMyDict1->is_a_type_of(subMyDict1), 'subMyDict1 type of subMyDict1');
86ok ( subMyDict1->is_a_type_of(MyDict2), 'subMyDict1 type of MyDict2');
87
88ok ( MyTuple1->is_a_type_of(Tuple), 'MyTuple1 is_a_type_of Tuple');
89ok (!MyTuple1->is_a_type_of(Dict), 'MyTuple1 NOT is_a_type_of Dict');
90ok ( MyTuple1->is_a_type_of(MyTuple2), 'MyTuple1 is_a_type_of MyTuple2');
91ok ( MyTuple2->is_a_type_of(MyTuple1), 'MyTuple2 is_a_type_of MyTuple1');
92ok (!MyTuple1->is_a_type_of(MyTuple3), 'MyTuple1 NOT is_a_type_of MyTuple3');
93ok (!MyTuple2->is_a_type_of(MyTuple3), 'MyTuple2 NOT is_a_type_of MyTuple3');
94
a4a88fef 95## is_subtype_of
96
16aea7bf 97ok ( MyDict1->is_subtype_of(Dict), 'MyDict1 is_subtype_of Dict');
98ok (!MyDict1->is_subtype_of(Tuple), 'MyDict1 NOT is_subtype_of Tuple');
99ok (!MyDict1->is_subtype_of(MyDict2), 'MyDict1 is_subtype_of MyDict2');
100ok (!MyDict2->is_subtype_of(MyDict1), 'MyDict2 is_subtype_of MyDict1');
101ok (!MyDict1->is_subtype_of(MyDict3), 'MyDict1 NOT is_subtype_of MyDict3');
102ok (!MyDict2->is_subtype_of(MyDict3), 'MyDict2 NOT is_subtype_of MyDict3');
103ok ( subMyDict1->is_subtype_of(Dict), 'subMyDict1 is_subtype_of Dict');
104ok ( subMyDict1->is_subtype_of(MyDict1), 'subMyDict1 is_subtype_of MyDict1');
105ok (!subMyDict1->is_subtype_of(subMyDict1), 'subMyDict1 is_subtype_of subMyDict1');
106ok ( subMyDict1->is_subtype_of(MyDict2), 'subMyDict1 is_subtype_of MyDict2');
107
108ok ( MyTuple1->is_subtype_of(Tuple), 'MyTuple1 is_subtype_of Tuple');
109ok (!MyTuple1->is_subtype_of(Dict), 'MyTuple1 NOT is_subtype_of Dict');
110ok (!MyTuple1->is_subtype_of(MyTuple2), 'MyTuple1 is_subtype_of MyTuple2');
111ok (!MyTuple2->is_subtype_of(MyTuple1), 'MyTuple2 is_subtype_of MyTuple1');
112ok (!MyTuple1->is_subtype_of(MyTuple3), 'MyTuple1 NOT is_subtype_of MyTuple3');
113ok (!MyTuple2->is_subtype_of(MyTuple3), 'MyTuple2 NOT is_subtype_of MyTuple3');
a4a88fef 114