do not know where all these dollar signs came from :)
[gitmo/MooseX-Types-Structured.git] / t / 06-api.t
1 BEGIN {
2         use strict;
3         use warnings;
4         use Test::More tests=>56;
5 }
6
7 use MooseX::Types::Structured qw(Dict Tuple);
8 use MooseX::Types::Moose qw(Int Str Object ArrayRef HashRef);
9 use MooseX::Types -declare => [qw(
10     MyDict1 MyDict2 MyDict3 subMyDict3 subMyDict1
11     MyTuple1 MyTuple2 MyTuple3 subMyTuple3
12 )];
13
14 ## Create some sample Dicts
15
16 subtype MyDict1,
17  as Dict[name=>Str, age=>Int];
18
19 subtype subMyDict1,
20  as MyDict1;
21
22 subtype MyDict2,
23  as Dict[name=>Str, age=>Int];
24  
25 subtype MyDict3,
26  as Dict[key=>Int, anotherkey=>Str];
27  
28 subtype subMyDict3,
29  as MyDict3;
30
31 ## Create some sample Tuples
32
33 subtype MyTuple1,
34  as Tuple[Int,Int,Str];
35
36 subtype MyTuple2,
37  as Tuple[Int,Int,Str];
38  
39 subtype MyTuple3,
40  as Tuple[Object, HashRef];
41
42 subtype subMyTuple3,
43  as MyTuple3;
44
45 ## Test equals
46
47 ok ( MyDict1->equals(MyDict2), 'MyDict1 == MyDict2');
48 ok ( MyDict2->equals(MyDict1), 'MyDict2 == MyDict1');
49 ok (!MyDict1->equals(MyDict3), 'MyDict1 == MyDict3');
50 ok (!MyDict2->equals(MyDict3), 'MyDict2 == MyDict3');
51 ok (!MyDict3->equals(MyDict2), 'MyDict3 == MyDict2');
52 ok (!MyDict3->equals(MyDict1), 'MyDict3 == MyDict1');
53
54 ok ( MyTuple1->equals(MyTuple2), 'MyTuple1 == MyTuple2');
55 ok ( MyTuple2->equals(MyTuple1), 'MyTuple2 == MyTuple1');
56 ok (!MyTuple1->equals(MyTuple3), 'MyTuple1 == MyTuple3');
57 ok (!MyTuple2->equals(MyTuple3), 'MyTuple2 == MyTuple3');
58 ok (!MyTuple3->equals(MyTuple2), 'MyTuple3 == MyTuple2');
59 ok (!MyTuple3->equals(MyTuple1), 'MyTuple3 == MyTuple1');
60
61 ok ( MyDict1->equals(MyDict2), 'MyDict1 == MyDict2');
62 ok ( MyDict2->equals(MyDict1), 'MyDict2 == MyDict1');
63 ok (!MyDict1->equals(MyDict3), 'MyDict1 == MyDict3');
64 ok (!MyDict2->equals(MyDict3), 'MyDict2 == MyDict3');
65 ok (!MyDict3->equals(MyDict2), 'MyDict3 == MyDict2');
66 ok (!MyDict3->equals(MyDict1), 'MyDict3 == MyDict1');
67
68 ok ( MyTuple1->equals(MyTuple2), 'MyTuple1 == MyTuple2');
69 ok ( MyTuple2->equals(MyTuple1), 'MyTuple2 == MyTuple1');
70 ok (!MyTuple1->equals(MyTuple3), 'MyTuple1 == MyTuple3');
71 ok (!MyTuple2->equals(MyTuple3), 'MyTuple2 == MyTuple3');
72 ok (!MyTuple3->equals(MyTuple2), 'MyTuple3 == MyTuple2');
73 ok (!MyTuple3->equals(MyTuple1), 'MyTuple3 == MyTuple1');
74
75 ## Test is_a_type_of
76
77 ok ( MyDict1->is_a_type_of(Dict), 'MyDict1 is_a_type_of Dict');
78 ok (!MyDict1->is_a_type_of(Tuple), 'MyDict1 NOT is_a_type_of Tuple');
79 ok ( MyDict1->is_a_type_of(MyDict2), 'MyDict1 is_a_type_of MyDict2');
80 ok ( MyDict2->is_a_type_of(MyDict1), 'MyDict2 is_a_type_of MyDict1');
81 ok (!MyDict1->is_a_type_of(MyDict3), 'MyDict1 NOT is_a_type_of MyDict3');
82 ok (!MyDict2->is_a_type_of(MyDict3), 'MyDict2 NOT is_a_type_of MyDict3');
83 ok ( subMyDict1->is_a_type_of(Dict), 'subMyDict1 type of Dict');
84 ok ( subMyDict1->is_a_type_of(MyDict1), 'subMyDict1 type of MyDict1');
85 ok ( subMyDict1->is_a_type_of(subMyDict1), 'subMyDict1 type of subMyDict1');
86 ok ( subMyDict1->is_a_type_of(MyDict2), 'subMyDict1 type of MyDict2');
87
88 ok ( MyTuple1->is_a_type_of(Tuple), 'MyTuple1 is_a_type_of Tuple');
89 ok (!MyTuple1->is_a_type_of(Dict), 'MyTuple1 NOT is_a_type_of Dict');
90 ok ( MyTuple1->is_a_type_of(MyTuple2), 'MyTuple1 is_a_type_of MyTuple2');
91 ok ( MyTuple2->is_a_type_of(MyTuple1), 'MyTuple2 is_a_type_of MyTuple1');
92 ok (!MyTuple1->is_a_type_of(MyTuple3), 'MyTuple1 NOT is_a_type_of MyTuple3');
93 ok (!MyTuple2->is_a_type_of(MyTuple3), 'MyTuple2 NOT is_a_type_of MyTuple3');
94
95 ## is_subtype_of
96
97 ok ( MyDict1->is_subtype_of(Dict), 'MyDict1 is_subtype_of Dict');
98 ok (!MyDict1->is_subtype_of(Tuple), 'MyDict1 NOT is_subtype_of Tuple');
99 ok (!MyDict1->is_subtype_of(MyDict2), 'MyDict1 is_subtype_of MyDict2');
100 ok (!MyDict2->is_subtype_of(MyDict1), 'MyDict2 is_subtype_of MyDict1');
101 ok (!MyDict1->is_subtype_of(MyDict3), 'MyDict1 NOT is_subtype_of MyDict3');
102 ok (!MyDict2->is_subtype_of(MyDict3), 'MyDict2 NOT is_subtype_of MyDict3');
103 ok ( subMyDict1->is_subtype_of(Dict), 'subMyDict1 is_subtype_of Dict');
104 ok ( subMyDict1->is_subtype_of(MyDict1), 'subMyDict1 is_subtype_of MyDict1');
105 ok (!subMyDict1->is_subtype_of(subMyDict1), 'subMyDict1 is_subtype_of subMyDict1');
106 ok ( subMyDict1->is_subtype_of(MyDict2), 'subMyDict1 is_subtype_of MyDict2');
107
108 ok ( MyTuple1->is_subtype_of(Tuple), 'MyTuple1 is_subtype_of Tuple');
109 ok (!MyTuple1->is_subtype_of(Dict), 'MyTuple1 NOT is_subtype_of Dict');
110 ok (!MyTuple1->is_subtype_of(MyTuple2), 'MyTuple1 is_subtype_of MyTuple2');
111 ok (!MyTuple2->is_subtype_of(MyTuple1), 'MyTuple2 is_subtype_of MyTuple1');
112 ok (!MyTuple1->is_subtype_of(MyTuple3), 'MyTuple1 NOT is_subtype_of MyTuple3');
113 ok (!MyTuple2->is_subtype_of(MyTuple3), 'MyTuple2 NOT is_subtype_of MyTuple3');
114