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 => 17;

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 Base;
use Derived;

BEGIN {
	ok(generics->has_generic_params("Base"), '... Derived has generic params');
	ok(generics->has_generic_params("Derived"), '... Derived has generic params');
}

# assign the generics

use generics Derived => (
	TEST => 500,
	DERIVED_TEST => [ 1 .. 10 ]
	);

# now create a derived session object
can_ok("Derived", 'new');
my $d = Derived->new();

isa_ok($d, "Base");

can_ok($d, 'TEST');
cmp_ok($d->TEST(), '==', 500, '... it should be 500');

can_ok($d, 'TEST_2');
is($d->TEST_2(), "Hello World", '... it should be "Hello World"');

can_ok($d, 'DERIVED_TEST');
ok(eq_array($d->DERIVED_TEST(), [1 .. 10]), '... it should be the same array');

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

isa_ok($b, "Base");

can_ok($d, 'TEST');
cmp_ok($b->TEST(), '==', 100, '... it should be 100');

can_ok($b, 'TEST_2');
is($b->TEST_2(), "Hello World", '... it should be "Hello World"');