071f231f7c5d01e62db5a650b8383c062f9a479d
[gitmo/MooseX-Types-Structured.git] / t / 01-basic.t
1 use strict;
2 use warnings;
3
4 use Test::More tests=>14;
5
6 use_ok 'MooseX::Meta::TypeConstraint::Structured';
7 use_ok 'Moose::Util::TypeConstraints';
8
9 ok my $int = find_type_constraint('Int') => 'Got Int';
10 ok my $str = find_type_constraint('Str') => 'Got Str';
11 ok my $arrayref = find_type_constraint('ArrayRef') => 'Got ArrayRef';
12
13 my $list_tc = MooseX::Meta::TypeConstraint::Structured->new(
14     name => 'list_tc',
15     parent => $arrayref,
16     type_constraints => [$int, $str],
17     constraint_generator=> sub {
18         my @type_constraints = @{shift @_};            
19         my @values = @{shift @_};
20
21         while(my $type_constraint = shift @type_constraints) {
22             my $value = shift @values || return;
23             $type_constraint->check($value) || return;
24         }
25         if(@values) {
26             return;
27         } else {
28             return 1;
29         }
30     }
31 );
32
33 isa_ok $list_tc, 'MooseX::Meta::TypeConstraint::Structured';
34
35 ok !$arrayref->check() => 'Parent undef fails';
36 ok !$list_tc->check() => 'undef fails';
37 ok !$list_tc->check(1) => '1 fails';
38 ok !$list_tc->check([]) => '[] fails';
39 ok !$list_tc->check([1]) => '[1] fails';
40 ok !$list_tc->check([1,2,3]) => '[1,2,3] fails';
41 ok !$list_tc->check(['a','b']) => '["a","b"] fails';
42
43 ok $list_tc->check([1,'a']) => '[1,"a"] passes';