use strict; use warnings FATAL => 'all'; use Apache::Test; use Apache::TestRequest; use Apache::TestUtil; my $havecgi = have_cgi(); my $pathinfo = "/foo/bar"; ## ## mode path, filerc, filebody, cgirc, cgibody ## my %tests = ( default => [ "", "404","Not Found", "200","_${pathinfo}_" ], on => [ "/on", "200","_${pathinfo}_","200","_${pathinfo}_" ], off => [ "/off","404","Not Found", "404","Not Found" ] ); my @files = ("", "/index.shtml"); push @files, "/test.sh" if ($havecgi); my $numtests = ((scalar keys %tests) * (scalar @files) * 4); plan tests => $numtests, need need_apache(2), need_module('include'), need_lwp; my $loc = "/apache/acceptpathinfo"; foreach my $mode (keys %tests) { foreach my $file (@files) { foreach my $pinf ("","$pathinfo") { my ($expectedrc, $expectedbody); if ($pinf eq "") { $expectedrc = "200"; $expectedbody = "_\\(none\\)_"; } else { if ($file eq "") { $expectedrc = "404"; $expectedbody = "Not Found"; } elsif ($file eq "/index.shtml") { $expectedrc = $tests{$mode}[1]; $expectedbody = $tests{$mode}[2]; } else { $expectedrc = $tests{$mode}[3]; $expectedbody = $tests{$mode}[4]; } } my $req = $loc.$tests{$mode}[0].$file.$pinf; my $resp = GET $req; ok t_cmp($resp->code, $expectedrc, "AcceptPathInfo $mode return code for $req" ); my $actual = super_chomp($resp->content); ok t_cmp($actual, qr/$expectedbody/, "AcceptPathInfo $mode body for $req" ); } } } sub super_chomp { my ($body) = shift; ## super chomp - all leading and trailing \n (and \r for win32) $body =~ s/^[\n\r]*//; $body =~ s/[\n\r]*$//; ## and all the rest change to spaces $body =~ s/\n/ /g; $body =~ s/\r//g; #rip out all remaining \r's $body; }