Resolve some TODO tests about type constraints
[gitmo/Mouse.git] / t / 040_type_constraints / 007_util_more_type_coercion.t
1 #!/usr/bin/perl
2 # This is automatically generated by author/import-moose-test.pl.
3 # DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!!
4 use t::lib::MooseCompat;
5
6 use strict;
7 use warnings;
8
9 use Test::More;
10 use Test::Exception;
11
12
13 {
14     package HTTPHeader;
15     use Mouse;
16     use Mouse::Util::TypeConstraints;
17
18     coerce 'HTTPHeader'
19         => from ArrayRef
20             => via { HTTPHeader->new(array => $_[0]) };
21
22     coerce 'HTTPHeader'
23         => from HashRef
24             => via { HTTPHeader->new(hash => $_[0]) };
25
26     has 'array' => (is => 'ro');
27     has 'hash'  => (is => 'ro');
28
29     package Engine;
30     use strict;
31     use warnings;
32     use Mouse;
33
34     has 'header' => (is => 'rw', isa => 'HTTPHeader', coerce => 1);
35 }
36
37 {
38     my $engine = Engine->new();
39     isa_ok($engine, 'Engine');
40
41     # try with arrays
42
43     lives_ok {
44         $engine->header([ 1, 2, 3 ]);
45     } '... type was coerced without incident';
46     isa_ok($engine->header, 'HTTPHeader');
47
48     is_deeply(
49         $engine->header->array,
50         [ 1, 2, 3 ],
51         '... got the right array value of the header');
52     ok(!defined($engine->header->hash), '... no hash value set');
53
54     # try with hash
55
56     lives_ok {
57         $engine->header({ one => 1, two => 2, three => 3 });
58     } '... type was coerced without incident';
59     isa_ok($engine->header, 'HTTPHeader');
60
61     is_deeply(
62         $engine->header->hash,
63         { one => 1, two => 2, three => 3 },
64         '... got the right hash value of the header');
65     ok(!defined($engine->header->array), '... no array value set');
66
67     dies_ok {
68        $engine->header("Foo");
69     } '... dies with the wrong type, even after coercion';
70
71     lives_ok {
72        $engine->header(HTTPHeader->new);
73     } '... lives with the right type, even after coercion';
74 }
75
76 {
77     my $engine = Engine->new(header => [ 1, 2, 3 ]);
78     isa_ok($engine, 'Engine');
79
80     isa_ok($engine->header, 'HTTPHeader');
81
82     is_deeply(
83         $engine->header->array,
84         [ 1, 2, 3 ],
85         '... got the right array value of the header');
86     ok(!defined($engine->header->hash), '... no hash value set');
87 }
88
89 {
90     my $engine = Engine->new(header => { one => 1, two => 2, three => 3 });
91     isa_ok($engine, 'Engine');
92
93     isa_ok($engine->header, 'HTTPHeader');
94
95     is_deeply(
96         $engine->header->hash,
97         { one => 1, two => 2, three => 3 },
98         '... got the right hash value of the header');
99     ok(!defined($engine->header->array), '... no array value set');
100 }
101
102 {
103     my $engine = Engine->new(header => HTTPHeader->new());
104     isa_ok($engine, 'Engine');
105
106     isa_ok($engine->header, 'HTTPHeader');
107
108     ok(!defined($engine->header->hash), '... no hash value set');
109     ok(!defined($engine->header->array), '... no array value set');
110 }
111
112 dies_ok {
113     Engine->new(header => 'Foo');
114 } '... dies correctly with bad params';
115
116 dies_ok {
117     Engine->new(header => \(my $var));
118 } '... dies correctly with bad params';
119
120 done_testing;