31d301f589fed5d34e94c1402e918d93fe1a5ee4
[gitmo/Moose.git] / t / 040_type_constraints / 027_parameterize_from.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 12;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Moose::Util::TypeConstraints');           
11 }
12
13 # testing the parameterize method
14
15 {
16         my $parameterizable = subtype 'parameterizable_hashref',
17                 as 'HashRef';
18                 
19         my $parameterized = subtype 'parameterized_hashref',
20                 as 'HashRef[Int]';
21                 
22         my $int = Moose::Util::TypeConstraints::find_type_constraint('Int');
23                 
24         my $from_parameterizable = $parameterizable->parameterize($int);
25         
26         isa_ok $parameterizable, 'Moose::Meta::TypeConstraint::Parameterizable',
27          => 'Got expected type instance';
28
29         package Test::Moose::Meta::TypeConstraint::Parameterizable;
30         use Moose;
31         
32         has parameterizable => (is=>'rw', isa=>$parameterizable);
33         has parameterized => (is=>'rw', isa=>$parameterized);
34         has from_parameterizable => (is=>'rw', isa=>$from_parameterizable);
35 }
36
37 # Create and check a dummy object
38
39 ok my $params = Test::Moose::Meta::TypeConstraint::Parameterizable->new()
40  => 'Create Dummy object for testing';
41  
42 isa_ok $params, 'Test::Moose::Meta::TypeConstraint::Parameterizable'
43  => 'isa correct type';
44
45 # test parameterizable
46
47 lives_ok sub {
48         $params->parameterizable({a=>'Hello', b=>'World'});
49 } => 'No problem setting parameterizable';
50
51 is_deeply $params->parameterizable, {a=>'Hello', b=>'World'}
52  => 'Got expected values';
53
54 # test parameterized
55
56 lives_ok sub {
57         $params->parameterized({a=>1, b=>2});
58 } => 'No problem setting parameterized';
59
60 is_deeply $params->parameterized, {a=>1, b=>2}
61  => 'Got expected values';
62  
63 throws_ok sub {
64         $params->parameterized({a=>'Hello', b=>'World'});
65 }, qr/Attribute \(parameterized\) does not pass the type constraint/
66  => 'parameterized throws expected error';
67
68 # test from_parameterizable
69
70 lives_ok sub {
71         $params->from_parameterizable({a=>1, b=>2});
72 } => 'No problem setting from_parameterizable';
73
74 is_deeply $params->from_parameterizable, {a=>1, b=>2}
75  => 'Got expected values';
76  
77 throws_ok sub {
78         $params->from_parameterizable({a=>'Hello', b=>'World'});
79 }, qr/Attribute \(from_parameterizable\) does not pass the type constraint/
80  => 'from_parameterizable throws expected error';