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