Make Mouse::Util::load_class return the argument class name, which can remove several...
[gitmo/Mouse.git] / t / 810_with_moose / 501_moose_coerce_mouse.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More skip_all => '[TODO] a Mouse class cannot extends a Moose class';
7
8 use Mouse::Spec;
9 BEGIN {
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
15 use 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 }