| #!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); |
| } |