4bafb43ca711a406f3829dc6927144c87383e3e8
[gitmo/MooseX-Types.git] / t / 15_recursion.t
1 ## Test case inspired by Stevan Little
2
3 BEGIN {
4     package MooseX::Types::Test::Recursion;
5     
6     use Moose;
7
8     use Moose::Util::TypeConstraints;
9     use MooseX::Types::Moose qw(Str HashRef);
10     use MooseX::Types -declare => [qw(
11         RecursiveHashRef
12     )];
13
14     ## Define a recursive subtype and Cthulhu save us.
15     subtype RecursiveHashRef()
16      => as HashRef[Str() | RecursiveHashRef()];
17 }
18
19 {
20     package MooseX::Types::Test::Recursion::TestRunner;
21     
22     BEGIN {
23         use Test::More;
24         
25         ## Grab the newly created test type constraint
26         MooseX::Types::Test::Recursion->import(':all');
27     };
28
29     
30     ok RecursiveHashRef->check({key=>"value"})
31      => 'properly validated {key=>"value"}';
32      
33     ok RecursiveHashRef->check({key=>{subkey=>"value"}})
34      => 'properly validated {key=>{subkey=>"value"}}';
35      
36     ok RecursiveHashRef->check({
37         key=>{
38             subkey=>"value",
39             subkey2=>{
40                 ssubkey1=>"value3",
41                 ssubkey2=>"value4"
42             }
43         }
44     }) => 'properly validated deeper recursive values';
45     
46     ok ! RecursiveHashRef->check({key=>[1,2,3]})
47      => 'Properly invalidates bad value';
48      
49     ok ! RecursiveHashRef->check({key=>{subkey=>"value",subkey2=>{ssubkey=>[1,2,3]}}})
50      => 'Properly invalidates bad value deeply';
51
52     done_testing;
53 }