13 use Moose::Util::TypeConstraints;
17 => via { HTTPHeader->new(array => $_[0]) };
21 => via { HTTPHeader->new(hash => $_[0]) };
23 has 'array' => (is => 'ro');
24 has 'hash' => (is => 'ro');
31 has 'header' => (is => 'rw', isa => 'HTTPHeader', coerce => 1);
35 my $engine = Engine->new();
36 isa_ok($engine, 'Engine');
41 $engine->header([ 1, 2, 3 ]);
42 }, undef, '... type was coerced without incident' );
43 isa_ok($engine->header, 'HTTPHeader');
46 $engine->header->array,
48 '... got the right array value of the header');
49 ok(!defined($engine->header->hash), '... no hash value set');
54 $engine->header({ one => 1, two => 2, three => 3 });
55 }, undef, '... type was coerced without incident' );
56 isa_ok($engine->header, 'HTTPHeader');
59 $engine->header->hash,
60 { one => 1, two => 2, three => 3 },
61 '... got the right hash value of the header');
62 ok(!defined($engine->header->array), '... no array value set');
65 $engine->header("Foo");
66 }, undef, '... dies with the wrong type, even after coercion' );
69 $engine->header(HTTPHeader->new);
70 }, undef, '... lives with the right type, even after coercion' );
74 my $engine = Engine->new(header => [ 1, 2, 3 ]);
75 isa_ok($engine, 'Engine');
77 isa_ok($engine->header, 'HTTPHeader');
80 $engine->header->array,
82 '... got the right array value of the header');
83 ok(!defined($engine->header->hash), '... no hash value set');
87 my $engine = Engine->new(header => { one => 1, two => 2, three => 3 });
88 isa_ok($engine, 'Engine');
90 isa_ok($engine->header, 'HTTPHeader');
93 $engine->header->hash,
94 { one => 1, two => 2, three => 3 },
95 '... got the right hash value of the header');
96 ok(!defined($engine->header->array), '... no array value set');
100 my $engine = Engine->new(header => HTTPHeader->new());
101 isa_ok($engine, 'Engine');
103 isa_ok($engine->header, 'HTTPHeader');
105 ok(!defined($engine->header->hash), '... no hash value set');
106 ok(!defined($engine->header->array), '... no array value set');
110 Engine->new(header => 'Foo');
111 }, undef, '... dies correctly with bad params' );
114 Engine->new(header => \(my $var));
115 }, undef, '... dies correctly with bad params' );
118 my $tc = Moose::Util::TypeConstraints::find_type_constraint('HTTPHeader');
119 isa_ok($tc, 'Moose::Meta::TypeConstraint', 'HTTPHeader TC');
121 my $from_aref = $tc->assert_coerce([ 1, 2, 3 ]);
122 isa_ok($from_aref, 'HTTPHeader', 'assert_coerce from aref to HTTPHeader');
123 is_deeply($from_aref->array, [ 1, 2, 3 ], '...and has the right guts');
125 my $from_href = $tc->assert_coerce({ a => 1 });
126 isa_ok($from_href, 'HTTPHeader', 'assert_coerce from href to HTTPHeader');
127 is_deeply($from_href->hash, { a => 1 }, '...and has the right guts');
129 like( exception { $tc->assert_coerce('total garbage') }, qr/Validation failed for .HTTPHeader./, "assert_coerce throws if result is not acceptable" );