use strict;
use warnings;
-use Test::More tests => 26;
+use Test::More;
use Test::Exception;
-BEGIN {
- use_ok('Moose');
-}
{
package HTTPHeader;
use Moose;
use Moose::Util::TypeConstraints;
-
+
coerce 'HTTPHeader'
- => from ArrayRef
+ => from ArrayRef
=> via { HTTPHeader->new(array => $_[0]) };
-
+
coerce 'HTTPHeader'
- => from HashRef
- => via { HTTPHeader->new(hash => $_[0]) };
-
+ => from HashRef
+ => via { HTTPHeader->new(hash => $_[0]) };
+
has 'array' => (is => 'ro');
- has 'hash' => (is => 'ro');
+ has 'hash' => (is => 'ro');
package Engine;
use strict;
use warnings;
use Moose;
-
- has 'header' => (is => 'rw', isa => 'HTTPHeader', coerce => 1);
+
+ has 'header' => (is => 'rw', isa => 'HTTPHeader', coerce => 1);
}
{
ok(!defined($engine->header->array), '... no array value set');
dies_ok {
- $engine->header("Foo");
+ $engine->header("Foo");
} '... dies with the wrong type, even after coercion';
lives_ok {
- $engine->header(HTTPHeader->new);
+ $engine->header(HTTPHeader->new);
} '... lives with the right type, even after coercion';
}
Engine->new(header => \(my $var));
} '... dies correctly with bad params';
+{
+ my $tc = Moose::Util::TypeConstraints::find_type_constraint('HTTPHeader');
+ isa_ok($tc, 'Moose::Meta::TypeConstraint', 'HTTPHeader TC');
+
+ my $from_aref = $tc->assert_coerce([ 1, 2, 3 ]);
+ isa_ok($from_aref, 'HTTPHeader', 'assert_coerce from aref to HTTPHeader');
+ is_deeply($from_aref->array, [ 1, 2, 3 ], '...and has the right guts');
+
+ my $from_href = $tc->assert_coerce({ a => 1 });
+ isa_ok($from_href, 'HTTPHeader', 'assert_coerce from href to HTTPHeader');
+ is_deeply($from_href->hash, { a => 1 }, '...and has the right guts');
+
+ throws_ok { $tc->assert_coerce('total garbage') }
+ qr/Validation failed for .HTTPHeader./,
+ "assert_coerce throws if result is not acceptable";
+}
+
+done_testing;