stas 2003/11/07 00:52:44
Added: t/modules cgi2.t cgipost2.t cgiupload2.t
t/response/TestModules cgi2.pm cgipost2.pm cgiupload2.pm
Log:
replicate all cgi tests to run as well under 'SetHandler modperl'
(requires CGI.pm 3.01, not released at the moment ;)
Revision Changes Path
1.1 modperl-2.0/t/modules/cgi2.t
Index: cgi2.t
===================================================================
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestRequest;
use Apache::TestUtil;
use Apache::Build ();
my $build = Apache::Build->build_config;
use constant HAVE_LWP => have_lwp();
my $tests = 4;
$tests += 1 if HAVE_LWP;
plan tests => $tests, have
have_min_module_version(CGI => 3.01);
my $module = 'TestModules::cgi2';
my $location = '/' . Apache::TestRequest::module2path($module);
my($res, $str);
sok {
my $url = "$location?PARAM=2";
$res = GET $url;
$str = $res->content;
t_cmp("ok 2", $str, "GET $url");
};
sok {
my $content = 'PARAM=%33';
$str = POST_BODY $location, content => $content;
t_cmp("ok 3", $str, "POST $location\n$content");
};
if (HAVE_LWP) {
sok {
$str = UPLOAD_BODY $location, content => 4;
t_cmp("ok 4", $str, 'file upload');
};
}
sok {
my $header = 'Content-type';
$res = GET $location;
t_cmp(qr{^text/test-output},
$res->header($header),
"$header header");
};
sok {
my $header = 'X-Perl-Module';
$res = GET $location;
t_cmp($module,
$res->header($header),
"$header header");
};
1.1 modperl-2.0/t/modules/cgipost2.t
Index: cgipost2.t
===================================================================
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest qw(POST_BODY_ASSERT);
my $module = 'TestModules::cgipost2';
my $url = '/' . Apache::TestRequest::module2path($module);
my @data = (25, 50, 75, 100, 125, 150);
plan tests => scalar(@data), have_min_module_version(CGI => 3.01);
foreach my $post (@data) {
my %param = ();
foreach my $key (1 .. $post) {
$param{$key} = 'data' x $key;
}
my $post_data = join '&', map { "$_=$param{$_}" }
sort { $a <=> $b } keys %param;
my $expected = join ':', map { $param{$_} }
sort { $a <=> $b } keys %param;
my $e_length = length $expected;
my $received = POST_BODY_ASSERT $url, content => $post_data;
my $r_length = length $received;
t_debug "expected $e_length bytes, received $r_length bytes\n";
ok ($expected eq $received);
}
1.1 modperl-2.0/t/modules/cgiupload2.t
Index: cgiupload2.t
===================================================================
use strict;
use warnings FATAL => 'all';
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest;
use Apache::Build ();
my $build = Apache::Build->build_config;
plan tests => 2, have have_lwp(),
have_min_module_version(CGI => 3.01);
my $location = "/TestModules__cgiupload2";
my $filename;
my $pod = 'pod/perlfunc.pod';
for (@INC) {
if (-e "$_/$pod") {
$filename = "$_/$pod";
last;
}
}
$filename ||= '../Makefile';
for (1,2) {
my $str = UPLOAD_BODY $location, filename => $filename;
my $body_len = length $str;
my $file_len = -s $filename;
t_debug "body_len=$body_len, file_len=$file_len";
ok $body_len == $file_len;
}
1.1 modperl-2.0/t/response/TestModules/cgi2.pm
Index: cgi2.pm
===================================================================
package TestModules::cgi2;
# this handler doesn't use the :Apache layer, so CGI.pm needs to do
# $r->read(...) instead of read(STDIN,...)
use strict;
use warnings FATAL => 'all';
use Apache::compat ();
use CGI ();
use Apache::Const -compile => 'OK';
sub handler {
my $r = shift;
unless ($ENV{MOD_PERL}) {
die "\$ENV{MOD_PERL} is not set";
}
if ($CGI::Q) {
die "CGI.pm globals were not reset";
}
unless ($CGI::MOD_PERL) {
die "CGI.pm does not think this is mod_perl";
}
my $cgi = CGI->new($r);
my $param = $cgi->param('PARAM');
my $httpupload = $cgi->param('HTTPUPLOAD');
$r->print($cgi->header('-type' => 'text/test-output',
'-X-Perl-Module' => __PACKAGE__));
if ($httpupload) {
no strict;
local $/;
my $content = <$httpupload>;
$r->print("ok $content");
}
elsif ($param) {
$r->print("ok $param");
}
else {
$r->print("no param or upload data\n");
}
Apache::OK;
}
1;
1.1 modperl-2.0/t/response/TestModules/cgipost2.pm
Index: cgipost2.pm
===================================================================
package TestModules::cgipost2;
# this handler doesn't use the :Apache layer, so CGI.pm needs to do
# $r->read(...) instead of read(STDIN,...)
use strict;
use warnings FATAL => 'all';
use Apache::compat ();
use CGI ();
use Apache::Const -compile => 'OK';
sub handler {
my $r = shift;
$r->content_type('text/plain');
my $cgi = CGI->new($r);
$r->print(join ":", map { $cgi->param($_) } $cgi->param);
Apache::OK;
}
1;
__END__
1.1 modperl-2.0/t/response/TestModules/cgiupload2.pm
Index: cgiupload2.pm
===================================================================
package TestModules::cgiupload2;
# this handler doesn't use the :Apache layer, so CGI.pm needs to do
# $r->read(...) instead of read(STDIN,...)
use strict;
use warnings FATAL => 'all';
use Apache::compat ();
use CGI ();
use Apache::Const -compile => 'OK';
sub handler {
my $r = shift;
my $cgi = CGI->new($r);
local $\;
local $/;
my $file = $cgi->param('filename');
$r->print(<$file>);
Apache::OK;
}
1;