Need to ignore override and super in the method list
[gitmo/Mouse.git] / t / 800_shikabased / 801-mousex_types.t
CommitLineData
5439cf97 1use strict;
2use warnings;
3use Test::More tests => 16;
4
5{
6 package Types;
7 use MouseX::Types -declare => [qw/ Headers /];
8 use MouseX::Types::Mouse 'HashRef';
9
3fa6f35d 10 type Headers, where { defined $_ && eval { $_->isa('Headers1') } };
5439cf97 11 coerce Headers,
12 from HashRef, via {
13 Headers1->new(%{ $_ });
14 },
15 ;
16}
17
18{
19 package Types2;
20 use MouseX::Types -declare => [qw/ Headers /];
21 use MouseX::Types::Mouse 'HashRef';
22
3fa6f35d 23 type Headers, where { defined $_ && eval { $_->isa('Headers2') } };
5439cf97 24 coerce Headers,
25 from HashRef, via {
26 Headers2->new(%{ $_ });
27 },
28 ;
29}
30
31{
32 package Headers1;
33 use Mouse;
34 has 'foo' => ( is => 'rw' );
35}
36
37{
38 package Headers2;
39 use Mouse;
40 has 'foo' => ( is => 'rw' );
41}
42
43{
44 package Response;
45 use Mouse;
46 BEGIN { Types->import(qw/ Headers /) }
47
48 has headers => (
49 is => 'rw',
50 isa => Headers,
51 coerce => 1,
52 );
53}
54
55{
56 package Request;
57 use Mouse;
58 BEGIN { Types->import(qw/ Headers /) }
59
60 has headers => (
61 is => 'rw',
62 isa => Headers,
63 coerce => 1,
64 );
65}
66
67{
68 package Response2;
69 use Mouse;
70 BEGIN { Types2->import(qw/ Headers /) }
71
72 has headers => (
73 is => 'rw',
74 isa => Headers,
75 coerce => 1,
76 );
77}
78
79{
80 package Request2;
81 use Mouse;
82 BEGIN { Types2->import(qw/ Headers /) }
83
84 has headers => (
85 is => 'rw',
86 isa => Headers,
87 coerce => 1,
88 );
89}
90
91my $res = Response->new(headers => { foo => 'bar' });
92isa_ok($res->headers, 'Headers1');
93is($res->headers->foo, 'bar');
94$res->headers({foo => 'yay'});
95isa_ok($res->headers, 'Headers1');
96is($res->headers->foo, 'yay');
97
98my $req = Request->new(headers => { foo => 'bar' });
99isa_ok($res->headers, 'Headers1');
100is($req->headers->foo, 'bar');
101$req->headers({foo => 'yay'});
102isa_ok($res->headers, 'Headers1');
103is($req->headers->foo, 'yay');
104
105$res = Response2->new(headers => { foo => 'bar' });
106isa_ok($res->headers, 'Headers2');
107is($res->headers->foo, 'bar');
108$res->headers({foo => 'yay'});
109isa_ok($res->headers, 'Headers2');
110is($res->headers->foo, 'yay');
111
112$req = Request2->new(headers => { foo => 'bar' });
113isa_ok($res->headers, 'Headers2');
114is($req->headers->foo, 'bar');
115$req->headers({foo => 'yay'});
116isa_ok($res->headers, 'Headers2');
117is($req->headers->foo, 'yay');
118