From: 大沢 和宏 Date: Tue, 2 Dec 2008 10:27:16 +0000 (+0000) Subject: oops add test for coerce X-Git-Tag: 0.19~136^2~83 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=f374ae8668065019b4fe448b3917eb1dc0ef3feb;hp=4188b837041f2d3b244daf2c57ddecca151e7418;p=gitmo%2FMouse.git oops add test for coerce --- diff --git a/t/801-coerce.t b/t/801-coerce.t new file mode 100644 index 0000000..34c6f34 --- /dev/null +++ b/t/801-coerce.t @@ -0,0 +1,54 @@ +use strict; +use warnings; +use Test::More tests => 6; + +{ + package Headers; + use Mouse; + has 'foo' => ( is => 'rw' ); +} + +{ + package Response; + use Mouse; + use Mouse::TypeRegistry; + + subtype 'HeadersType' => sub { defined $_ && eval { $_->isa('Headers') } }; + coerce 'HeadersType' => +{ + HashRef => sub { + Headers->new(%{ $_ }); + }, + }; + + has headers => ( + is => 'rw', + isa => 'HeadersType', + coerce => 1, + ); + has lazy_build_coerce_headers => ( + is => 'rw', + isa => 'HeadersType', + coerce => 1, + lazy_build => 1, + ); + sub _build_lazy_build_coerce_headers { + Headers->new(foo => 'laziness++') + } + has lazy_coerce_headers => ( + is => 'rw', + isa => 'HeadersType', + coerce => 1, + lazy => 1, + default => sub { Headers->new(foo => 'laziness++') } + ); +} + +my $r = Response->new(headers => { foo => 'bar' }); +isa_ok($r->headers, 'Headers'); +is($r->headers->foo, 'bar'); +$r->headers({foo => 'yay'}); +isa_ok($r->headers, 'Headers'); +is($r->headers->foo, 'yay'); +is($r->lazy_coerce_headers->foo, 'laziness++'); +is($r->lazy_build_coerce_headers->foo, 'laziness++'); + diff --git a/t/802_coerce_multi_class.t b/t/802_coerce_multi_class.t new file mode 100644 index 0000000..915a144 --- /dev/null +++ b/t/802_coerce_multi_class.t @@ -0,0 +1,76 @@ +use strict; +use warnings; +use Test::More tests => 8; + +{ + package Response::Headers; + use Mouse; + has 'foo' => ( is => 'rw' ); +} +{ + package Request::Headers; + use Mouse; + has 'foo' => ( is => 'rw' ); +} + +{ + package Response; + use Mouse; + use Mouse::TypeRegistry; + + subtype 'Headers' => sub { defined $_ && eval { $_->isa('Response::Headers') } }; + coerce 'Headers' => +{ + HashRef => sub { + Response::Headers->new(%{ $_ }); + }, + }; + + has headers => ( + is => 'rw', + isa => 'Headers', + coerce => 1, + ); +} + +{ + package Request; + use Mouse; + use Mouse::TypeRegistry; + + subtype 'Headers' => sub { defined $_ && eval { $_->isa('Request::Headers') } }; + coerce 'Headers' => +{ + HashRef => sub { + Request::Headers->new(%{ $_ }); + }, + }; + + has headers => ( + is => 'rw', + isa => 'Headers', + coerce => 1, + ); +} + +{ + package Response; + subtype 'Headers' => sub { defined $_ && eval { $_->isa('Response::Headers') } }; + coerce 'Headers' => +{ + HashRef => sub { + Response::Headers->new(%{ $_ }); + }, + }; +} + +my $req = Request->new(headers => { foo => 'bar' }); +isa_ok($req->headers, 'Request::Headers'); +is($req->headers->foo, 'bar'); +$req->headers({foo => 'yay'}); +isa_ok($req->headers, 'Request::Headers'); +is($req->headers->foo, 'yay'); + +my $res = Response->new(headers => { foo => 'bar' }); +isa_ok($res->headers, 'Response::Headers'); +is($res->headers->foo, 'bar'); +$res->headers({foo => 'yay'}); +isa_ok($res->headers, 'Response::Headers'); +is($res->headers->foo, 'yay');