Mouse::Util::does_role() respects $thing->does() method
[gitmo/Mouse.git] / t / 810_with_moose / 501_moose_coerce_mouse.t
CommitLineData
7a1781ae 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
53f38c53 6use Test::More skip_all => '[TODO] a Mouse class cannot extends a Moose class';
7a1781ae 7
8use Mouse::Spec;
9BEGIN {
10 eval{ require Moose && Moose->VERSION(Mouse::Spec->MooseVersion) };
11 plan skip_all => "Moose $Mouse::Spec::MooseVersion required for this test" if $@;
12 plan tests => 5;
13}
14
15use Test::Exception;
16
17{
18 package Headers;
19 use Mouse;
20 has 'foo' => ( is => 'rw' );
21}
22{
23 package Response;
24 use Mouse;
25 use Mouse::Util::TypeConstraints;
26
27 type 'HeadersType' => where { defined $_ && eval { $_->isa('Headers') } };
28 coerce 'HeadersType' =>
29 from 'HashRef' => via {
30 Headers->new(%{ $_ });
31 },
32 ;
33
34 has headers => (
35 is => 'rw',
36 isa => 'HeadersType',
37 coerce => 1,
38 );
39}
40{
41 package Mosponse;
42 use Moose;
43 extends qw(Response);
44 ::lives_ok { extends qw(Response) } "extend Mouse class with Moose";
45}
46
47{
48 my $r = Mosponse->new(headers => { foo => 'bar' });
49 isa_ok($r->headers, 'Headers');
50 lives_and {
51 is $r->headers->foo, 'bar';
52 };
53}
54
55{
56 my $r = Mosponse->new;
57 $r->headers({foo => 'yay'});
58 isa_ok($r->headers, 'Headers');
59 is($r->headers->foo, 'yay');
60}