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

set_fixed_time( 1341637509 );
my $now = 'Sat, 07 Jul 2012 05:05:09 GMT';

my $header = tie my %header, 'CGI::Header';

%{ $header->header } = ();
is $header{Date}, undef;
ok !exists $header{Date};
is delete $header{Date}, undef;
is_deeply $header->header, {};

%{ $header->header } = ( -date => q{} );
is $header{Date}, q{};
ok exists $header{Date};
is delete $header{Date}, q{};
is_deeply $header->header, {};

%{ $header->header } = ( -date => 'Sat, 07 Jul 2012 05:05:10 GMT' );
is $header{Date}, 'Sat, 07 Jul 2012 05:05:10 GMT';
ok exists $header{Date};
is delete $header{Date}, 'Sat, 07 Jul 2012 05:05:10 GMT';
is_deeply $header->header, {};

%{ $header->header } = ( -nph => 1 );
is $header{Date}, $now;
ok exists $header{Date};

%{ $header->header } = ( -nph => 0 );
is $header{Date}, undef;
ok !exists $header{Date};

%{ $header->header } = ( -cookie => 'ID=123456; path=/' );
is $header{Date}, $now;
ok exists $header{Date};

%{ $header->header } = ();
$header{Date} = 'Sat, 07 Jul 2012 05:05:09 GMT';
is_deeply $header->header, { -date => 'Sat, 07 Jul 2012 05:05:09 GMT' };