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::Header;
use Test::More tests => 13;
use Test::Exception;

my %env;
my $header = tie my %header, 'CGI::Header', {}, \%env;

%{ $header->header } = ();
is $header{Server}, undef;
ok !exists $header{Server};
my $value = 'Apache/1.3.27 (Unix)';
is $header->set( Server => $value ), $value;
is_deeply $header->header, { -server => 'Apache/1.3.27 (Unix)' };

%{ $header->header } = ( -server => 'Apache/1.3.27 (Unix)' );
is $header{Server}, 'Apache/1.3.27 (Unix)';
ok exists $header{Server};
$header->nph( 1 );
is_deeply $header->header, { -nph => 1 }, '-server should be deleted';

%{ $header->header } = ( -nph => 1 );

%{ $header->env } = ();
is $header{Server}, 'cmdline';
ok exists $header{Server};

%{ $header->env } = ( SERVER_SOFTWARE => 'Apache/1.3.27 (Unix)' );
is $header{Server}, 'Apache/1.3.27 (Unix)';
ok exists $header{Server};

my $expected = qr{^Modification of a read-only value attempted};
throws_ok { $header{Server} = 'Apache/1.3.27 (Unix)' } $expected;
throws_ok { delete $header{Server} } $expected;