Commit | Line | Data |
471c4f09 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More tests => 26; |
7 | use Test::Exception; |
8 | |
9 | BEGIN { |
10 | use_ok('Moose'); |
11 | } |
12 | |
13 | { |
14 | package HTTPHeader; |
471c4f09 |
15 | use Moose; |
05d9eaf6 |
16 | use Moose::Util::TypeConstraints; |
471c4f09 |
17 | |
18 | coerce 'HTTPHeader' |
19 | => from ArrayRef |
41e007e4 |
20 | => via { HTTPHeader->new(array => $_[0]) }; |
21 | |
22 | coerce 'HTTPHeader' |
471c4f09 |
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 Moose; |
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 | |