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

use strict;
use warnings;

use Test::More tests => 14;

BEGIN { 
	# load our test library
	unshift @INC => qw(t/test_lib/ test_lib/);
	
	# now we start testing
	# test we can load generics
	use_ok('generics');

}

use Session;

BEGIN {
	can_ok("generics", 'has_generic_params');
	ok(generics->has_generic_params("Session"), '... session has generic params');
}

# assign the generics
use generics Session => (
	SESSION_TIMEOUT => 20,
	SESSION_ID_LENGTH => sub { 50 }
	);

# now create a session object
can_ok("Session", 'new');
my $s = Session->new();

isa_ok($s, "Session");

can_ok($s, 'getTimeoutLength');
cmp_ok($s->getTimeoutLength(), '==', 20, '... it should be 20');
cmp_ok($s->SESSION_TIMEOUT(), '==', 20, '... it should be 20');

can_ok($s, 'getSessionId');
my $session_id = $s->getSessionId();

ok($session_id, '... session id was succefully generated');

cmp_ok(length($session_id), '==', 50, '... it should be 50 characters long');
cmp_ok($s->SESSION_ID_LENGTH(), '==', 50, '... it should be 50');


# now examine the innards
can_ok("generics", 'dump_params');
my %params = generics->dump_params("Session");
ok(eq_hash(
		\%params,
		{
			SESSION_TIMEOUT => 20,
			SESSION_ID_LENGTH => 50
		}
		), '... the generics should be the same');