I was trying to get GET, POST and other Apache::TestRequest methods to
accept a pre-existing HTTP::Request object, rather than pass arguments
that will construct one.

The reason, I was trying to use HTML::TreeBuilder and
HTTP::Request::Form to fill-out a form and submit that, rather than raw
POST, e.g.:

my $content = get_content($url);

my $tree = HTML::TreeBuilder->new;

my @forms = $tree->find_by_tag_name('form');
die "What, no forms in $url?" unless @forms;
my $f = HTTP::Request::Form->new($forms[0], $url);
$f->field("foo", $foo);
$f->field("bar", $bar);
my $req = $f->press();

and now

POST $req;

With the patch below the basic thing works. The issues I've encountered
so far:
- requiring full url, since Apache::TestRequest won't expand it for you)
- redirects aren't handled
- doesn't seem to work with shortcuts like POST_BODY

The patch simply gives another functionality to the $url argument to any
of the public methods in Apache::TestRequest, to allow an object to be
passed in addition to the string url.

I'm not sure whether it's worth trying to add this functionality, or
just have the test create its own $UA.

Index: lib/Apache/TestRequest.pm
--- lib/Apache/TestRequest.pm (revision 585204)
+++ lib/Apache/TestRequest.pm (working copy)
@@ -200,6 +200,9 @@
my $url = shift;
Carp::croak("no url passed") unless defined $url;

+ # is a request object?
+ return $url if ref $url;
return $url if $url =~ m,^(\w+):/,;
$url = "/$url" unless $url =~ m,^/,;

@@ -473,7 +476,7 @@
sub lwp_call {
my($name, $shortcut) = (shift, shift);

- my $r = (\&{$name})->(@_);
+ my $r = ($_[0] && ref $_[0]) ? $_[0] : (\&{$name})->(@_);

Carp::croak("$name(@_) didn't return a response object") unless $r;

Search Discussions

Discussion Posts

Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 1 of 5 | next ›
Discussion Overview
grouptest-dev @
categoriesmodperl, perl
postedOct 16, '07 at 7:09p
activeOct 18, '07 at 6:18p



site design / logo © 2018 Grokbase