more tests for the mixed string and perl type constraints in union type constraints...
[gitmo/MooseX-Types.git] / t / 20_union_with_string_type.t
index 2d35deb..2b0bdfa 100644 (file)
@@ -2,20 +2,49 @@
 use strict;
 use warnings;
 
-use Test::More tests => 1;
+use Test::More tests => 14;
 
 my $exception;
 {
     package TypeLib;
 
-    use MooseX::Types -declare => [qw( MyUnionType MyStr )];
-    use MooseX::Types::Moose qw(Str Item);
+    use MooseX::Types -declare => [qw( MyUnionType Test1 Test2 Test3 MyStr )];
+    use MooseX::Types::Moose qw(Str Int Item Object);
 
     subtype MyUnionType, as Str|'Int';
     subtype MyStr, as Str;
 
     eval { coerce MyStr, from Item, via {"$_"} };
-    $exception = $@;
-}
+    my $exception = $@;
+
+       Test::More::ok !$@, 'types are not mutated by union with a string type';
+
+       subtype Test1, 
+         as Int | 'ArrayRef[Int]';
+       
+       Test::More::ok Test1->check(1), '1 is an Int';
+       Test::More::ok !Test1->check('a'),  'a is not an Int';
+       Test::More::ok Test1->check([1, 2, 3]),  'Passes ArrayRef';
+       Test::More::ok !Test1->check([1, 'a', 3]),  'Fails ArrayRef with a letter';
+       Test::More::ok !Test1->check({a=>1}), 'fails wrong ref type';
+
+       eval {
+       subtype Test2, 
+        as Int | 'IDONTEXIST';
+       };
 
-ok !$@, 'types are not mutated by union with a string type';
+       my $check = $@;
+
+       Test::More::ok $@, 'Got an error for bad Type'; 
+       Test::More::like $check,  qr/IDONTEXIST is not a type constraint/,  'correct error';
+
+       my $obj = subtype Test3, 
+         as Int | 'ArrayRef[Int]' | Object;
+
+       Test::More::ok Test3->check(1), '1 is an Int';
+       Test::More::ok !Test3->check('a'),  'a is not an Int';
+       Test::More::ok Test3->check([1, 2, 3]),  'Passes ArrayRef';
+       Test::More::ok !Test3->check([1, 'a', 3]),  'Fails ArrayRef with a letter';
+       Test::More::ok !Test3->check({a=>1}), 'fails wrong ref type';
+       Test::More::ok Test3->check($obj), 'Union allows Object';
+}