new test to outline the recursion support requirement and lots of small documentation...
[gitmo/MooseX-Types-Structured.git] / t / 10-recursion.t
CommitLineData
07a8693b 1## Test case donated by Steven Little
2
3BEGIN {
4 package Interpreter;
5 use Moose;
6 use Moose::Util::TypeConstraints;
7 use MooseX::Types::Structured qw(Dict Tuple);
8 use MooseX::Types::Moose qw(Int Str);
9 use MooseX::Types -declare => [qw(
10 Var
11 Const
12 Op
13 Expr
14 )];
15
16 subtype Var() => as Str();
17
18 subtype Const() => as Int() | Str();
19
20 enum Op() => qw[ + - ^ ];
21
22 subtype Expr() => as
23 Const()
24 | Tuple([Expr(), Op(), Expr()]) # binop
25 | Var();
26}
27
28{
29 package Foo;
30 BEGIN { Interpreter->import(':all') };
31 use Test::More 'no_plan';
32
33 ok is_Var('x'), q{passes is_Var('x')};
34 ok is_Const(1), q{passes is_Const(1)};
35 ok is_Const('Hello World'), q{passes is_Const};
36
37 ok is_Op('+'), q{passes is_Op('+')};
38 ok is_Op('-'), q{passes is_Op('-')};
39 ok is_Op('^'), q{passes is_Op('^')};
40
41 use Data::Dump qw/dump/;
42 #die dump Expr();
43 ok Expr->check([ 11, '+', 12]), '';
44 ok is_Expr([ 1, '+', 1]), q{passes is_Expr([ 1, '+', 1])};
45 ok is_Expr([ 1, '+', [ 1, '+', 1 ]]), q{passes is_Expr([ 1, '+', [ 1, '+', 1 ]])};
46}
47
48
49
50
51
52