The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use CGI::Cookie;
use CGI::Header;
use Test::More tests => 4;

my $cookie1 = CGI::Cookie->new(
    -name  => 'foo',
    -value => 'bar',
);

my $cookie2 = CGI::Cookie->new(
    -name  => 'bar',
    -value => 'baz',
);

subtest 'default' => sub {
    my $header = tie my %header, 'CGI::Header';
    is $header{Set_Cookie}, undef;
    ok !exists $header{Set_Cookie};
    is delete $header{Set_Cookie}, undef;
    is_deeply $header->header, {};
};

subtest 'a CGI::Cookie object' => sub {
    my $header = tie my %header, 'CGI::Header';
    $header{Set_Cookie} = $cookie1;
    is $header->header->{-cookie}, $cookie1;
    is $header{Set_Cookie}, $cookie1; 
    ok exists $header{Set_Cookie};
    #is_deeply [ each %header ], [ 'Set-Cookie', $cookie1 ];
    is delete $header{Set_Cookie}, $cookie1;
    is_deeply $header->header, {};
};

subtest 'CGI::Cookie objects' => sub {
    my @cookies = ( $cookie1, $cookie2 );
    my $header  = tie my %header, 'CGI::Header';

    $header{Set_Cookie} = \@cookies;
    is_deeply $header->header, { -cookie => \@cookies };
    is $header{Set_Cookie}, \@cookies;
    ok exists $header{Set_Cookie};

    #is_deeply [ each %header ], [ 'Set-Cookie', \@cookies ];

    #my @headers;
    #$header->each(sub { push @headers, @_ });
    #is_deeply [ @headers[0..3] ], [
    #    'Set-Cookie', $cookie1,
    #    'Set-Cookie', $cookie2,
    #];

    is_deeply delete $header{Set_Cookie}, \@cookies;
    is_deeply $header->header, {};
};

subtest '-cookie and -date' => sub {
    my $header = tie my %header, 'CGI::Header';
    $header{Date} = 'Sat, 07 Jul 2012 05:05:09 GMT';
    is $header->set( Set_Cookie => $cookie1 ), $cookie1;
    is_deeply $header->header, { -cookie => $cookie1 };
};