Commit | Line | Data |
3c40a225 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use Test::More; |
eab81545 |
7 | use Test::Exception; |
3c40a225 |
8 | BEGIN { |
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 |
14 | use 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 | } |