summaryrefslogtreecommitdiff
path: root/t/attributes/misc_attribute_coerce_lazy.t
diff options
context:
space:
mode:
Diffstat (limited to 't/attributes/misc_attribute_coerce_lazy.t')
-rw-r--r--t/attributes/misc_attribute_coerce_lazy.t48
1 files changed, 48 insertions, 0 deletions
diff --git a/t/attributes/misc_attribute_coerce_lazy.t b/t/attributes/misc_attribute_coerce_lazy.t
new file mode 100644
index 0000000..341e55d
--- /dev/null
+++ b/t/attributes/misc_attribute_coerce_lazy.t
@@ -0,0 +1,48 @@
+use strict;
+use warnings;
+
+use Test::More;
+use Test::Fatal;
+
+
+
+{
+ package HTTPHeader;
+ use Moose;
+
+ has 'array' => (is => 'ro');
+ has 'hash' => (is => 'ro');
+}
+
+{
+ package Request;
+ use Moose;
+ use Moose::Util::TypeConstraints;
+
+ subtype Header =>
+ => as Object
+ => where { $_->isa('HTTPHeader') };
+
+ coerce Header
+ => from ArrayRef
+ => via { HTTPHeader->new(array => $_[0]) }
+ => from HashRef
+ => via { HTTPHeader->new(hash => $_[0]) };
+
+ has 'headers' => (
+ is => 'rw',
+ isa => 'Header',
+ coerce => 1,
+ lazy => 1,
+ default => sub { [ 'content-type', 'text/html' ] }
+ );
+}
+
+my $r = Request->new;
+isa_ok($r, 'Request');
+
+is( exception {
+ $r->headers;
+}, undef, '... this coerces and passes the type constraint even with lazy' );
+
+done_testing;