theory 2004/10/27 11:00:37
Modified: perl-framework/Apache-Test Changes perl-framework/Apache-Test/lib/Apache TestRequest.pm Log: Separated the $RedirectOK package variable from the setting of the same information by passing the "requests_redirectable" parameter to the user_agent() method. This allows us to keep finer control over when the module sets the value and when the user sets the value. Done by adding a separate $REDIR lexical variable to handle when it is set internally. I hope I've added enough comments to make it clear to future hackers of this crazy module how it's supposed to work. Revision Changes Path 1.188 +8 -3 httpd-test/perl-framework/Apache-Test/Changes Index: Changes =================================================================== RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/Changes,v retrieving revision 1.187 retrieving revision 1.188 diff -u -r1.187 -r1.188 --- Changes 23 Oct 2004 15:41:10 -0000 1.187 +++ Changes 27 Oct 2004 18:00:37 -0000 1.188 @@ -15,9 +15,14 @@ fix problem with multiple all.t files where only the final file was being run through the test harness. [Geoffrey Young] -Documented that redirection does not with "POST" requests in -Apache::TestRequest unless LWP is installed. Also modified -the redirect_ok() method to ensure that such is the case. +Documented that redirection does not work with "POST" requests in +Apache::TestRequest unless LWP is installed. [David Wheeler] + +Separated the setting of the undocumented $RedirectOK package +variable by users of Apache::TestRequest from when it is set +internally by passing the "requests_redirectable" parameter to +the user_agent() method. This allows users to override the +behavior set by the user_agent() method without replacing it. [David Wheeler] 1.103 +20 -11 httpd-test/perl-framework/Apache-Test/lib/Apache/TestRequest.pm Index: TestRequest.pm =================================================================== RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRequest.pm,v retrieving revision 1.102 retrieving revision 1.103 diff -u -r1.102 -r1.103 --- TestRequest.pm 26 Oct 2004 01:48:16 -0000 1.102 +++ TestRequest.pm 27 Oct 2004 18:00:37 -0000 1.103 @@ -82,6 +82,7 @@ @ISA = qw(LWP::UserAgent); my $UA; +my $REDIR = $have_lwp ? undef : 1; sub module { my $module = shift; @@ -116,16 +117,19 @@ if (exists $args->{requests_redirectable}) { my $redir = $args->{requests_redirectable}; if (ref $redir and (@$redir > 1 or $redir->[0] ne 'POST')) { - $RedirectOK = $have_lwp ? undef : 1; + # Set our internal flag if there's no LWP. + $REDIR = $have_lwp ? undef : 1; } elsif ($redir) { if ($have_lwp) { $args->{requests_redirectable} = [ qw/GET HEAD POST/ ]; - $RedirectOK = undef; + $REDIR = undef; } else { - $RedirectOK = 1; + # Set our internal flag. + $REDIR = 1; } } else { - $RedirectOK = 0; + # Make sure our internal flag is false if there's no LWP. + $REDIR = $have_lwp ? undef : 0; } } @@ -199,14 +203,19 @@ \%wanted_args; } -$RedirectOK = 1; - sub redirect_ok { my $self = shift; - return $self->SUPER::redirect_ok(@_) - if $have_lwp && ! defined $RedirectOK; - return 0 if shift->method eq 'POST'; - $RedirectOK; + if ($have_lwp) { + # Return user setting or let LWP handle it. + return $RedirectOK if defined $RedirectOK; + return $self->SUPER::redirect_ok(@_); + } + + # No LWP. We don't support redirect on POST. + return 0 if $self->method eq 'POST'; + # Return user setting or our internal calculation. + return $RedirectOK if defined $RedirectOK; + return $REDIR; } my %credentials; @@ -331,7 +340,7 @@ sub UPLOAD { my($url, $pass, $keep) = prepare(@_); - local $RedirectOK = exists $keep->{redirect_ok} + local $RedirectOK = exists $keep->{redirect_ok} ? $keep->{redirect_ok} : $RedirectOK;