ASP4
view release on metacpan or search on metacpan
lib/ASP4/UserAgent.pm view on Meta::CPAN
{
my ($data) = split /;/, $v;
my ($name,$val) = map { ASP4::SimpleCGI->unescape( $_ ) } split /\=/, $data;
$s->add_cookie( $name => $val );
}# end foreach()
}# end if()
}# end while()
}# end foreach()
$s->context->r->pool->call_cleanup_handlers();
# $s->context->DESTROY;
return $response;
}# end _setup_response()
sub _setup_cgi
{
my ($s, $req) = @_;
if( $s->{referer} )
{
($s->{referer}) = $req->uri =~ m/.*?(\/[^\?]+)/;
$req->referer( $s->{referer} );
}
else
{
$req->referer('');
}# end if()
no warnings 'uninitialized';
(my ($uri_no_args), $ENV{QUERY_STRING} ) = split /\?/, $req->uri;
$ENV{SERVER_NAME} = $ENV{HTTP_HOST} = 'localhost';
unless( $req->uri =~ m@^/handlers@ )
{
$ENV{SCRIPT_FILENAME} = $s->config->web->www_root . $uri_no_args;
if( -d $ENV{SCRIPT_FILENAME} )
{
$ENV{SCRIPT_FILENAME} =~ s{/$}{};
$ENV{SCRIPT_FILENAME} .= "/index.asp";
}# end if()
$ENV{SCRIPT_NAME} = $uri_no_args;
}# end unless()
# User-Agent:
$req->header( 'User-Agent' => 'test-useragent v2.0' );
$ENV{HTTP_USER_AGENT} = 'test-useragent v2.0';
# Cookies:
$req->header( 'Cookie' => $ENV{HTTP_COOKIE} = $s->http_cookie );
if( $ENV{REQUEST_METHOD} =~ m/^post$/i )
{
# Set up the basic params:
return ASP4::SimpleCGI->new(
querystring => $ENV{QUERY_STRING},
body => $req->content,
content_type => $req->headers->{'content-type'},
content_length => $req->headers->{'content-length'},
);
}
else
{
# Simple 'GET' request:
return ASP4::SimpleCGI->new( querystring => $ENV{QUERY_STRING} );
}# end if()
}# end _setup_cgi()
sub DESTROY
{
my $s = shift;
undef(%$s);
}# end DESTROY()
1;# return true:
=pod
=head1 NAME
ASP4::UserAgent - Execute ASP4 requests without a web server.
=head1 SYNOPSIS
B<NOTE:> 99.99% of the time you will access this via L<ASP4::API>.
my HTTP::Response $res = $api->ua->get('/index.asp?foo=bar');
my $res = $api->ua->post('/handlers/user.login', [
username => 'willy',
password => 'wonka',
]);
my $res = $api->ua->upload('/handlers/file.upload', [
foo => 'bar',
baz => 'bux',
file => ['/home/john/avatar.jpg']
]);
# Some form testing:
my ($form) = HTML::Form->parse( $res->content, '/' );
$form->find_input('username')->value('bob');
my $res = $api->ua->submit_form( $form );
# Add/remove a cookie:
$api->ua->add_cookie( "the-boss" => "me" );
$api->remove_cookie( "the-boss" );
=head1 DESCRIPTION
Enables unit-testing ASP4 applications by providing the ability to execuite web
pages from your code, without a webserver.
=head1 PUBLIC METHODS
=head2 get( $url )
Calls C<$url> and returns the L<HTTP::Response> result.
( run in 2.501 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )