(Re-)organize Method Accessor, implementing has ... reader => $r, accessor => $a...
[gitmo/Mouse.git] / t / 501_moose_coerce_mouse.t
CommitLineData
3c40a225 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More;
eab81545 7use Test::Exception;
3c40a225 8BEGIN {
90fe520e 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) };
3c40a225 11 plan tests => 5;
12}
13
eab81545 14use Test::Exception;
3c40a225 15
16{
17 package Headers;
18 use Mouse;
19 has 'foo' => ( is => 'rw' );
20}
21{
22 package Response;
23 use Mouse;
3b46bd49 24 use Mouse::Util::TypeConstraints;
3c40a225 25
0d9fea22 26 type 'HeadersType' => where { defined $_ && eval { $_->isa('Headers') } };
61a02a3a 27 coerce 'HeadersType' =>
28 from 'HashRef' => via {
3c40a225 29 Headers->new(%{ $_ });
30 },
61a02a3a 31 ;
3c40a225 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' });
3c40a225 48 isa_ok($r->headers, 'Headers');
90fe520e 49 lives_and {
50 is $r->headers->foo, 'bar';
51 };
9a16e6d1 52}
53
54{
55 my $r = Mosponse->new;
3c40a225 56 $r->headers({foo => 'yay'});
57 isa_ok($r->headers, 'Headers');
58 is($r->headers->foo, 'yay');
59}