The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#/usr/bin/perl -w

use strict;

use File::Spec;

use Test::More tests => 14;
use CGI;

use CGI::Session;

my $dir_name = File::Spec->tmpdir();

my $session = CGI::Session->new('id:static','testname',{Directory=>$dir_name});
ok($session);

# as class method
ok(CGI::Session->name,'name used as class method');

ok(CGI::Session->name('fluffy'),'name as class method w/ param');
ok(CGI::Session->name eq 'fluffy','name as class method w/ param effective?');

# as instance method
ok($session->name,'name as instance method');
ok($session->name eq CGI::Session->name,'instance method falls through to class');

ok($session->name('spot'),'instance method w/ param');

ok($session->name eq 'spot','instance method w/ param effective?');

ok(CGI::Session->name eq 'fluffy','instance method did not affect class method');

## test interface for setting session/cookie key name CGISESSID.
my $s2 = CGI::Session->new(
    'id:static',
    'testname',
    { Directory => $dir_name },
    { name => 'itchy' }
);

is $s2->name, 'itchy', 'constructor new with name for session/cookie key';
is( CGI::Session->name, 'fluffy', 'constructor name not affecting class');
is $session->name, 'spot', 'constructor on new session not affecting old';

## test from query
$s2 = CGI::Session->new(
    'id:static',
    CGI->new( 'itchy=2001' ),
    { Directory => $dir_name },
    { name => 'itchy' }
);

is $s2->id, 2001, 'session from query with new name';

## should die since it won't find value from query
eval {
    $s2 = CGI::Session->new(
        'id:static',
        CGI->new( 'CGISESSID=2001' ),
        { Directory => $dir_name },
        { name => 'itchy' }
    );
};

ok $@, "session in query with default name";