use strict;
use warnings;
-use Test::More;
-
-BEGIN {
- eval "use HTTP::Headers; use Params::Coerce; use URI;";
- plan skip_all => "HTTP::Headers & Params::Coerce & URI required for this test" if $@;
- plan no_plan => 1;
-}
-
+use Test::More tests => 1;
use Test::Exception;
BEGIN {
use_ok('Moose');
}
-
-{
- package Request;
- use strict;
- use warnings;
- use Moose;
-
- use HTTP::Headers ();
- use Params::Coerce ();
- use URI ();
-
- subtype Header
- => as Object
- => where { $_->isa('HTTP::Headers') };
-
- coerce Header
- => from ArrayRef
- => via { HTTP::Headers->new( @{ $_ } ) }
- => from HashRef
- => via { HTTP::Headers->new( %{ $_ } ) };
-
- subtype Uri
- => as Object
- => where { $_->isa('URI') };
-
- coerce Uri
- => from Object
- => via { $_->isa('URI') ? $_ : Params::Coerce::coerce( 'URI', $_ ) }
- => from Str
- => via { URI->new( $_, 'http' ) };
-
- subtype Protocol
- => as Str
- => where { /^HTTP\/[0-9]\.[0-9]$/ };
-
-
- has 'base' => (is => 'rw', isa => 'Uri', coerce => 1);
- has 'url' => (is => 'rw', isa => 'Uri', coerce => 1);
- has 'method' => (is => 'rw', isa => 'Str');
- has 'protocol' => (is => 'rw', isa => 'Protocol');
- has 'headers' => (
- is => 'rw',
- isa => 'Header',
- coerce => 1,
- default => sub { HTTP::Headers->new }
- );
-}
-
-my $r = Request->new;
-isa_ok($r, 'Request');
-
-{
- my $header = $r->headers;
- isa_ok($header, 'HTTP::Headers');
-
- is($r->headers->content_type, '', '... got no content type in the header');
-
- $r->headers( { content_type => 'text/plain' } );
-
- my $header2 = $r->headers;
- isa_ok($header2, 'HTTP::Headers');
- isnt($header, $header2, '... created a new HTTP::Header object');
-
- is($header2->content_type, 'text/plain', '... got the right content type in the header');
-
- $r->headers( [ content_type => 'text/html' ] );
-
- my $header3 = $r->headers;
- isa_ok($header3, 'HTTP::Headers');
- isnt($header2, $header3, '... created a new HTTP::Header object');
-
- is($header3->content_type, 'text/html', '... got the right content type in the header');
-
- $r->headers( HTTP::Headers->new(content_type => 'application/pdf') );
-
- my $header4 = $r->headers;
- isa_ok($header4, 'HTTP::Headers');
- isnt($header3, $header4, '... created a new HTTP::Header object');
-
- is($header4->content_type, 'application/pdf', '... got the right content type in the header');
-
- dies_ok {
- $r->headers('Foo')
- } '... dies when it gets bad params';
-}
-
-{
- is($r->protocol, undef, '... got nothing by default');
-
- lives_ok {
- $r->protocol('HTTP/1.0');
- } '... set the protocol correctly';
- is($r->protocol, 'HTTP/1.0', '... got nothing by default');
-
- dies_ok {
- $r->protocol('http/1.0');
- } '... the protocol died with bar params correctly';
-}
-