blob: c756b55ece68c4f127e905c6e5d70ab75206884b [file] [log] [blame]
#!perl
use strict;
use Apache::testold;
eval {
require Apache::Request;
require Apache::Cookie;
require CGI::Cookie;
};
my $r = shift;
$r->send_http_header('text/plain');
unless (have_module "Apache::Cookie" and Apache::Request->can('upload')) {
print "1..0\n";
print $@ if $@;
print "$INC{'Apache/Request.pm'}\n";
return;
}
my $i = 0;
my $tests = 33;
$tests += 7 if $r->headers_in->get("Cookie");
print "1..$tests\n";
my $letter = 'a';
for my $name (qw(one two three)) {
my $c = Apache::Cookie->new($r,
-name => $name,
-value => ["bar_$name", $letter],
-expires => '+3M',
-path => '/'
);
my $cc = CGI::Cookie->new(
-name => $name,
-value => ["bar_$name", $letter],
-expires => '+3M',
-path => '/'
);
++$letter;
$c->bake;
my $cgi_as_string = $cc->as_string;
my $as_string = $c->as_string;
my $header_out = ($r->err_headers_out->get("Set-Cookie"))[-1];
my @val = $c->value;
print "VALUE: @val\n";
for my $v ("string", [@val]) {
$c->value($v);
my @arr = $c->value;
my $n = @arr;
if (ref $v) {
test ++$i, $n == 2;
}
else {
test ++$i, $n == 1;
}
print " VALUE: @arr ($n)\n";
$c->value(\@val); #reset
}
for (1,0) {
my $secure = $c->secure;
$c->secure($_);
print "secure: $secure\n";
}
print "as_string: `$as_string'\n";
print "header_out: `$header_out'\n";
print "cgi cookie: `$cgi_as_string\n";
test ++$i, cookie_eq($as_string, $header_out);
test ++$i, cookie_eq($as_string, $cgi_as_string);
}
my (@Hargs) = (
"-name" => "key",
"-values" => {qw(val two)},
"-domain" => ".cp.net",
);
my (@Aargs) = (
"-name" => "key",
"-values" => [qw(val two)],
"-domain" => ".cp.net",
);
my (@Sargs) = (
"-name" => "key",
"-values" => 'one',
"-domain" => ".cp.net",
);
my $done_meth = 0;
for my $rv (\@Hargs, \@Aargs, \@Sargs) {
my $c1 = Apache::Cookie->new($r, @$rv);
my $c2 = CGI::Cookie->new(@$rv);
for ($c1, $c2) {
$_->expires("+3h");
}
for my $meth (qw(as_string name domain path expires secure)) {
my $one = $c1->$meth() || "";
my $two = $c2->$meth() || "";
print "Apache::Cookie: $meth => $one\n";
print "CGI::Cookie: $meth => $two\n";
test ++$i, cookie_eq($one, $two);
}
}
if(my $string = $r->headers_in->get('Cookie')) {
print $string, $/;
my %done = ();
print "SCALAR context (as_string method):\n";
print " Apache::Cookie:\n";
my $hv = Apache::Cookie->new($r)->parse($string);
for (sort keys %$hv) {
print " $_ => ", $hv->{$_}->as_string, $/;
$done{$_} = $hv->{$_}->as_string;
}
print " CGI::Cookie:\n";
$hv = CGI::Cookie->parse($string);
for (sort keys %$hv) {
print " $_ => ", $hv->{$_}->as_string, $/;
test ++$i, cookie_eq($done{$_}, $hv->{$_}->as_string);
}
%done = ();
print "ARRAY context (value method):\n";
print " Apache::Cookie:\n";
my %hv = Apache::Cookie->new($r)->parse($string);
my %fetch = Apache::Cookie->fetch;
test ++$i, keys %hv == keys %fetch;
for (sort keys %hv) {
$done{$_} = join ", ", $hv{$_}->value;
print " $_ => $done{$_}\n";
}
print " CGI::Cookie:\n";
%hv = CGI::Cookie->parse($string);
for (sort keys %hv) {
my $val = join ", ", $hv{$_}->value;
test ++$i, cookie_eq($done{$_}, $val);
print " $_ => $val\n";
}
}
else {
print "NO Cookie set";
}
{
my $cgi_exp = CGI::expires('-1d', 'cookie');
my $cookie_exp = Apache::Cookie->expires('-1d');
print "cookie: $cookie_exp\ncgi: $cgi_exp\n";
test ++$i, cookie_eq($cookie_exp, $cgi_exp);
}
{
my $cgi_exp = CGI::expires('-1d', 'http');
my $apr_exp = Apache::Request->expires('-1d');
print "apr: $apr_exp\ncgi: $cgi_exp\n";
test ++$i, cookie_eq($apr_exp, $cgi_exp);
}
test ++$i, 1;
sub cookie_eq {
my($one, $two) = @_;
unless ($one eq $two) {
print STDERR "cookie mismatch:\n",
"`$one'\n", " vs.\n", "`$two'\n";
}
($one && $two) || (!$one && !$two);
}