Commit | Line | Data |
a4a88fef |
1 | BEGIN { |
2 | use strict; |
3 | use warnings; |
e327145a |
4 | use Test::More tests=>68; |
a4a88fef |
5 | } |
6 | |
e327145a |
7 | use Moose::Util::TypeConstraints; |
16aea7bf |
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; |
a4a88fef |
45 | |
46 | ## Test equals |
47 | |
16aea7bf |
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'); |
a4a88fef |
54 | |
16aea7bf |
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'); |
a4a88fef |
61 | |
fe1fd33c |
62 | ok ( MyDict1->equals(MyDict2), 'MyDict1 == MyDict2'); |
63 | ok ( MyDict2->equals(MyDict1), 'MyDict2 == MyDict1'); |
64 | ok (!MyDict1->equals(MyDict3), 'MyDict1 == MyDict3'); |
65 | ok (!MyDict2->equals(MyDict3), 'MyDict2 == MyDict3'); |
66 | ok (!MyDict3->equals(MyDict2), 'MyDict3 == MyDict2'); |
67 | ok (!MyDict3->equals(MyDict1), 'MyDict3 == MyDict1'); |
68 | |
69 | ok ( MyTuple1->equals(MyTuple2), 'MyTuple1 == MyTuple2'); |
70 | ok ( MyTuple2->equals(MyTuple1), 'MyTuple2 == MyTuple1'); |
71 | ok (!MyTuple1->equals(MyTuple3), 'MyTuple1 == MyTuple3'); |
72 | ok (!MyTuple2->equals(MyTuple3), 'MyTuple2 == MyTuple3'); |
73 | ok (!MyTuple3->equals(MyTuple2), 'MyTuple3 == MyTuple2'); |
74 | ok (!MyTuple3->equals(MyTuple1), 'MyTuple3 == MyTuple1'); |
af1d00c9 |
75 | |
a4a88fef |
76 | ## Test is_a_type_of |
77 | |
16aea7bf |
78 | ok ( MyDict1->is_a_type_of(Dict), 'MyDict1 is_a_type_of Dict'); |
79 | ok (!MyDict1->is_a_type_of(Tuple), 'MyDict1 NOT is_a_type_of Tuple'); |
80 | ok ( MyDict1->is_a_type_of(MyDict2), 'MyDict1 is_a_type_of MyDict2'); |
81 | ok ( MyDict2->is_a_type_of(MyDict1), 'MyDict2 is_a_type_of MyDict1'); |
82 | ok (!MyDict1->is_a_type_of(MyDict3), 'MyDict1 NOT is_a_type_of MyDict3'); |
83 | ok (!MyDict2->is_a_type_of(MyDict3), 'MyDict2 NOT is_a_type_of MyDict3'); |
84 | ok ( subMyDict1->is_a_type_of(Dict), 'subMyDict1 type of Dict'); |
85 | ok ( subMyDict1->is_a_type_of(MyDict1), 'subMyDict1 type of MyDict1'); |
86 | ok ( subMyDict1->is_a_type_of(subMyDict1), 'subMyDict1 type of subMyDict1'); |
87 | ok ( subMyDict1->is_a_type_of(MyDict2), 'subMyDict1 type of MyDict2'); |
88 | |
89 | ok ( MyTuple1->is_a_type_of(Tuple), 'MyTuple1 is_a_type_of Tuple'); |
90 | ok (!MyTuple1->is_a_type_of(Dict), 'MyTuple1 NOT is_a_type_of Dict'); |
91 | ok ( MyTuple1->is_a_type_of(MyTuple2), 'MyTuple1 is_a_type_of MyTuple2'); |
92 | ok ( MyTuple2->is_a_type_of(MyTuple1), 'MyTuple2 is_a_type_of MyTuple1'); |
93 | ok (!MyTuple1->is_a_type_of(MyTuple3), 'MyTuple1 NOT is_a_type_of MyTuple3'); |
94 | ok (!MyTuple2->is_a_type_of(MyTuple3), 'MyTuple2 NOT is_a_type_of MyTuple3'); |
95 | |
a4a88fef |
96 | ## is_subtype_of |
97 | |
16aea7bf |
98 | ok ( MyDict1->is_subtype_of(Dict), 'MyDict1 is_subtype_of Dict'); |
99 | ok (!MyDict1->is_subtype_of(Tuple), 'MyDict1 NOT is_subtype_of Tuple'); |
100 | ok (!MyDict1->is_subtype_of(MyDict2), 'MyDict1 is_subtype_of MyDict2'); |
101 | ok (!MyDict2->is_subtype_of(MyDict1), 'MyDict2 is_subtype_of MyDict1'); |
102 | ok (!MyDict1->is_subtype_of(MyDict3), 'MyDict1 NOT is_subtype_of MyDict3'); |
103 | ok (!MyDict2->is_subtype_of(MyDict3), 'MyDict2 NOT is_subtype_of MyDict3'); |
104 | ok ( subMyDict1->is_subtype_of(Dict), 'subMyDict1 is_subtype_of Dict'); |
105 | ok ( subMyDict1->is_subtype_of(MyDict1), 'subMyDict1 is_subtype_of MyDict1'); |
106 | ok (!subMyDict1->is_subtype_of(subMyDict1), 'subMyDict1 is_subtype_of subMyDict1'); |
107 | ok ( subMyDict1->is_subtype_of(MyDict2), 'subMyDict1 is_subtype_of MyDict2'); |
108 | |
109 | ok ( MyTuple1->is_subtype_of(Tuple), 'MyTuple1 is_subtype_of Tuple'); |
110 | ok (!MyTuple1->is_subtype_of(Dict), 'MyTuple1 NOT is_subtype_of Dict'); |
111 | ok (!MyTuple1->is_subtype_of(MyTuple2), 'MyTuple1 is_subtype_of MyTuple2'); |
112 | ok (!MyTuple2->is_subtype_of(MyTuple1), 'MyTuple2 is_subtype_of MyTuple1'); |
113 | ok (!MyTuple1->is_subtype_of(MyTuple3), 'MyTuple1 NOT is_subtype_of MyTuple3'); |
114 | ok (!MyTuple2->is_subtype_of(MyTuple3), 'MyTuple2 NOT is_subtype_of MyTuple3'); |
a4a88fef |
115 | |
e327145a |
116 | ## Test manual parameterizing |
117 | |
118 | PARAMETERIZE: { |
119 | |
120 | ok (my $int = Moose::Util::TypeConstraints::find_or_parse_type_constraint('Int'), 'Got Int'); |
121 | ok (my $str = Moose::Util::TypeConstraints::find_or_parse_type_constraint('Str'), 'Got Str'); |
122 | ok (my $hashref = Moose::Util::TypeConstraints::find_or_parse_type_constraint('HashRef[Int]'), 'Got HashRef'); |
123 | |
124 | ## Test Dict->parameterize |
125 | ok (my $test_dict = Dict(), 'Created Test Dict'); |
126 | ok (my $person = $test_dict->parameterize(name=>$str, age=>$int), 'Parameterized It'); |
127 | ok ($person->check({name=>'John', age=>21}), 'Passed'); |
128 | ok ($person->check({age=>25, name=>'User'}), 'Passed'); |
129 | |
130 | ## Test Tuple->parameterize |
131 | ok (my $test_tuple = Tuple(), 'Created Test Tuple'); |
132 | ok (my $int_and_hashref = $test_tuple->parameterize($int, $hashref), 'Parameterized It'); |
133 | ok ($int_and_hashref->check([1, {key=>2, key2=>3}]), "Passed"); |
134 | ok (!$int_and_hashref->check(['a', {key=>2, key2=>3}]), "Not Passed"); |
135 | ok (!$int_and_hashref->check([1, {key=>'a', key2=>3}]), "Not Passed"); |
136 | } |