fix is subtype of (sortof)
[gitmo/MooseX-Types-Structured.git] / t / 06-api.t
index 2c9dc3e..cbfb687 100644 (file)
@@ -1,14 +1,14 @@
 BEGIN {
        use strict;
        use warnings;
-       use Test::More tests=>68;
+       use Test::More tests=>83;
 }
 
 use Moose::Util::TypeConstraints;
 use MooseX::Types::Structured qw(Dict Tuple);
-use MooseX::Types::Moose qw(Int Str Object ArrayRef HashRef);
+use MooseX::Types::Moose qw(Int Str Item Object ArrayRef HashRef);
 use MooseX::Types -declare => [qw(
-    MyDict1 MyDict2 MyDict3 subMyDict3 subMyDict1
+    MyDict1 MyDict2 MyDict3 MyDict4 subMyDict3 subMyDict1
     MyTuple1 MyTuple2 MyTuple3 subMyTuple3
 )];
 
@@ -29,6 +29,9 @@ subtype MyDict3,
 subtype subMyDict3,
  as MyDict3;
 
+subtype MyDict4,
+ as Dict[name=>Str, age=>Item];
+
 ## Create some sample Tuples
 
 subtype MyTuple1,
@@ -62,9 +65,15 @@ ok (!MyTuple3->equals(MyTuple1), 'MyTuple3 == MyTuple1');
 ok ( MyDict1->equals(MyDict2), 'MyDict1 == MyDict2');
 ok ( MyDict2->equals(MyDict1), 'MyDict2 == MyDict1');
 ok (!MyDict1->equals(MyDict3), 'MyDict1 == MyDict3');
+ok (!MyDict1->equals(MyDict4), 'MyDict1 == MyDict3');
 ok (!MyDict2->equals(MyDict3), 'MyDict2 == MyDict3');
+ok (!MyDict2->equals(MyDict4), 'MyDict2 == MyDict3');
 ok (!MyDict3->equals(MyDict2), 'MyDict3 == MyDict2');
+ok (!MyDict3->equals(MyDict4), 'MyDict3 == MyDict2');
 ok (!MyDict3->equals(MyDict1), 'MyDict3 == MyDict1');
+ok (!MyDict4->equals(MyDict1), 'MyDict3 == MyDict1');
+ok (!MyDict4->equals(MyDict2), 'MyDict3 == MyDict1');
+ok (!MyDict4->equals(MyDict3), 'MyDict3 == MyDict1');
 
 ok ( MyTuple1->equals(MyTuple2), 'MyTuple1 == MyTuple2');
 ok ( MyTuple2->equals(MyTuple1), 'MyTuple2 == MyTuple1');
@@ -75,6 +84,7 @@ ok (!MyTuple3->equals(MyTuple1), 'MyTuple3 == MyTuple1');
 
 ## Test is_a_type_of
 
+ok ( MyDict1->is_a_type_of(HashRef), 'MyDict1 is_a_type_of HashRef');
 ok ( MyDict1->is_a_type_of(Dict), 'MyDict1 is_a_type_of Dict');
 ok (!MyDict1->is_a_type_of(Tuple), 'MyDict1 NOT is_a_type_of Tuple');
 ok ( MyDict1->is_a_type_of(MyDict2), 'MyDict1 is_a_type_of MyDict2');
@@ -85,6 +95,13 @@ ok ( subMyDict1->is_a_type_of(Dict), 'subMyDict1 type of Dict');
 ok ( subMyDict1->is_a_type_of(MyDict1), 'subMyDict1 type of MyDict1');
 ok ( subMyDict1->is_a_type_of(subMyDict1), 'subMyDict1 type of subMyDict1');
 ok ( subMyDict1->is_a_type_of(MyDict2), 'subMyDict1 type of MyDict2');
+ok ( MyDict4->is_a_type_of(HashRef), 'MyDict4 is_a_type_of HashRef');
+ok ( MyDict4->is_a_type_of(Dict), 'MyDict4 is_a_type_of Dict');
+ok (!MyDict4->is_a_type_of(Tuple), 'MyDict4 NOT is_a_type_of Tuple');
+ok (!MyDict4->is_a_type_of(MyDict2), 'MyDict4 NOT is_a_type_of MyDict2');
+ok ( MyDict2->is_a_type_of(MyDict4), 'MyDict2 is_a_type_of MyDict4');
+ok (!MyDict4->is_a_type_of(MyDict3), 'MyDict4 NOT is_a_type_of MyDict3');
+
 
 ok ( MyTuple1->is_a_type_of(Tuple), 'MyTuple1 is_a_type_of Tuple');
 ok (!MyTuple1->is_a_type_of(Dict), 'MyTuple1 NOT is_a_type_of Dict');
@@ -95,15 +112,17 @@ ok (!MyTuple2->is_a_type_of(MyTuple3), 'MyTuple2 NOT is_a_type_of MyTuple3');
 
 ## is_subtype_of
 
+ok ( MyDict1->is_subtype_of(HashRef), 'MyDict1 is_subtype_of HashRef');
 ok ( MyDict1->is_subtype_of(Dict), 'MyDict1 is_subtype_of Dict');
+ok ( MyDict1->is_subtype_of(MyDict4), 'MyDict1 is_subtype_of MyDict4');
 ok (!MyDict1->is_subtype_of(Tuple), 'MyDict1 NOT is_subtype_of Tuple');
-ok (!MyDict1->is_subtype_of(MyDict2), 'MyDict1 is_subtype_of MyDict2');
-ok (!MyDict2->is_subtype_of(MyDict1), 'MyDict2 is_subtype_of MyDict1');
+ok (!MyDict1->is_subtype_of(MyDict2), 'MyDict1 NOT is_subtype_of MyDict2');
+ok (!MyDict2->is_subtype_of(MyDict1), 'MyDict2 NOT is_subtype_of MyDict1');
 ok (!MyDict1->is_subtype_of(MyDict3), 'MyDict1 NOT is_subtype_of MyDict3');
 ok (!MyDict2->is_subtype_of(MyDict3), 'MyDict2 NOT is_subtype_of MyDict3');
 ok ( subMyDict1->is_subtype_of(Dict), 'subMyDict1 is_subtype_of Dict');
 ok ( subMyDict1->is_subtype_of(MyDict1), 'subMyDict1 is_subtype_of MyDict1');
-ok (!subMyDict1->is_subtype_of(subMyDict1), 'subMyDict1 is_subtype_of subMyDict1');
+ok (!subMyDict1->is_subtype_of(subMyDict1), 'subMyDict1 NOT is_subtype_of subMyDict1');
 ok ( subMyDict1->is_subtype_of(MyDict2), 'subMyDict1 is_subtype_of MyDict2');
 
 ok ( MyTuple1->is_subtype_of(Tuple), 'MyTuple1 is_subtype_of Tuple');