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