use strict; use warnings; use Test::More tests => 13; BEGIN { use_ok('director_abstract') } require_ok('director_abstract'); { package MyFoo; use base 'director_abstract::Foo'; sub ping { return 'MyFoo::ping()'; } } my $f = MyFoo->new(); is($f->ping, "MyFoo::ping()"); is($f->pong(),"Foo::pong();MyFoo::ping()"); { package MyExample1; use base 'director_abstract::Example1'; sub Color { my($self, $r, $g, $b) = @_; return $r; } } { package MyExample2; use base 'director_abstract::Example2'; sub Color { my($self, $r, $g, $b) = @_; return $g; } } { package MyExample3; use base 'director_abstract::Example3_i'; sub Color { my($self, $r, $g, $b) = @_; return $b; } } my $me1 = MyExample1->new(); isa_ok($me1, 'MyExample1'); is(director_abstract::Example1::get_color($me1, 1, 2, 3), 1, 'me1'); my $me2 = MyExample2->new(1,2); isa_ok($me2, 'MyExample2'); is(director_abstract::Example2::get_color($me2, 1, 2, 3), 2, 'me2'); my $me3 = MyExample3->new(); isa_ok($me3, 'MyExample3'); is(director_abstract::Example3_i::get_color($me3, 1, 2, 3), 3, 'me3'); eval { $me1 = director_abstract::Example1->new() }; like($@, qr/\babstract\b/i, 'E1.new()'); eval { $me2 = director_abstract::Example2->new() }; like($@, qr/Example2/, 'E2.new()'); eval { $me3 = director_abstract::Example3_i->new() }; like($@, qr/\babstract\b/i, 'E3.new()');