allow inlining if the type has been subsequently defined
[gitmo/MooseX-Types.git] / t / 15_recursion.t
CommitLineData
e7d06577 1## Test case inspired by Stevan Little
2
3BEGIN {
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 {
a344ca96 23 use Test::More;
e7d06577 24
077ac262 25 ## Grab the newly created test type constraint
e7d06577 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
077ac262 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';
e7d06577 48
077ac262 49 ok ! RecursiveHashRef->check({key=>{subkey=>"value",subkey2=>{ssubkey=>[1,2,3]}}})
50 => 'Properly invalidates bad value deeply';
e7d06577 51
a344ca96 52 done_testing;
53}