Mouse::Util::does_role() respects $thing->does() method
[gitmo/Mouse.git] / t / 040_type_constraints / 007_util_more_type_coercion.t
CommitLineData
b2b106d7 1#!/usr/bin/perl
5a592ad7 2# This is automatically generated by author/import-moose-test.pl.
3# DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!!
4use t::lib::MooseCompat;
b2b106d7 5
6use strict;
7use warnings;
8
5a592ad7 9use Test::More;
b2b106d7 10use Test::Exception;
11
12
b2b106d7 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
112dies_ok {
113 Engine->new(header => 'Foo');
114} '... dies correctly with bad params';
115
116dies_ok {
117 Engine->new(header => \(my $var));
118} '... dies correctly with bad params';
119
5a592ad7 120done_testing;