Move t/100_with_moose t/810_with_moose
[gitmo/Mouse.git] / t / 810_with_moose / 501_moose_coerce_mouse.t
diff --git a/t/810_with_moose/501_moose_coerce_mouse.t b/t/810_with_moose/501_moose_coerce_mouse.t
new file mode 100644 (file)
index 0000000..1c2bd07
--- /dev/null
@@ -0,0 +1,60 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Test::More;
+
+use Mouse::Spec;
+BEGIN {
+    eval{ require Moose && Moose->VERSION(Mouse::Spec->MooseVersion) };
+    plan skip_all => "Moose $Mouse::Spec::MooseVersion required for this test" if $@;
+    plan tests => 5;
+}
+
+use Test::Exception;
+
+{
+    package Headers;
+    use Mouse;
+    has 'foo' => ( is => 'rw' );
+}
+{
+    package Response;
+    use Mouse;
+    use Mouse::Util::TypeConstraints;
+
+    type 'HeadersType' => where { defined $_ && eval { $_->isa('Headers') } };
+    coerce  'HeadersType' =>
+        from 'HashRef' => via {
+            Headers->new(%{ $_ });
+        },
+    ;
+
+    has headers => (
+        is     => 'rw',
+        isa    => 'HeadersType',
+        coerce => 1,
+    );
+}
+{
+    package Mosponse;
+    use Moose;
+    extends qw(Response);
+    ::lives_ok { extends qw(Response) } "extend Mouse class with Moose";
+}
+
+{
+    my $r = Mosponse->new(headers => { foo => 'bar' });
+    isa_ok($r->headers, 'Headers');
+    lives_and {
+        is $r->headers->foo, 'bar';
+    };
+}
+
+{
+    my $r = Mosponse->new;
+    $r->headers({foo => 'yay'});
+    isa_ok($r->headers, 'Headers');
+    is($r->headers->foo, 'yay');
+}