committing progress
[catagits/Catalyst-Devel.git] / t / check_types.t
1 # t0m++
2 package My::Types;
3 use MooseX::Types -declare [qw/ ValidAppName ValidAppComponent /];
4
5 my $appname_re = qr/[\w:]+/;
6 my $regex = qr/$appname_re::(M|V|C|Model|View|Controller)::.*/;
7
8 subtype ValidAppName, 
9    as Str,
10    where { /^$appname_re$/ && ! /$regex/ };
11
12 subtype ValidAppComponent,
13    as Str,
14    where { /^$regex$/ };
15
16 subtype AppEnv,
17    as Str,
18    where { /\w/ };
19    
20 coerce ValidAppName,
21    from ValidAppComponent,
22    via { Catalyst::Utils::class2appclass($_); };
23    
24 coerce 'ValidAppEnv',
25    from Str,
26    via { Catalyst::Utils::class2env($_); };
27
28 coerce AppEnv,
29    from Str,
30    via { Catalyst::Utils::class2env($_) };
31
32 package main;
33 use Test::More 'no_plan';
34 use Moose::Util::TypeContraints;
35 use My::Types qw/ValidAppName ValidAppComponent AppEnv/;
36
37 my $app_tc = find_type_constraint(ValidAppName);
38 ok $app_tc;
39 ok !$app_tc->check('');
40 ok $app_tc->check('MyApp');
41
42 my $comp_tc = find_type_constraint(ValidAppComponent);
43 ok $comp_tc;
44 ok !$comp_tc->check('');
45 ok !$comp_tc->check('MyApp');
46 ok $comp_tc->check('MyApp::Model::Foo');
47
48 my $env_tc = my $comp_tc = find_type_constraint(AppEnv);
49 ok $env_tc;
50 #ok !$env_tc->check('');
51 #ok !$env_tc->check('
52 is $app_tc->coerce('MyApp::Model::Foo'), 'MyApp';
53
54 done_testing;
55