#!/usr/bin/perl
# Testing the basic usage of asa.pm
use strict;
BEGIN {
$| = 1;
$^W = 1;
}
use Test::More tests => 18;
my $duck = Duck->new;
isa_ok( $duck, 'Duck' );
can_ok( $duck, 'quack' );
ok( ! $duck->{human}, 'Duck is not human' );
is( $duck->quack, 'Quack', 'A Duck quacks' );
my $wereduck = WereDuck->new;
isa_ok( $wereduck, 'WereDuck' );
isa_ok( $wereduck, 'Lycanthrope' );
isa_ok( $wereduck, 'Duck' );
isa_ok( $wereduck, 'Horror' );
can_ok( $wereduck, 'morph' );
can_ok( $wereduck, 'quack' );
is( $wereduck->{human}, 1, 'A WereDuck is human' );
is( $wereduck->quack, 'Hi! I mean Quack!', 'A wereduck quacks' );
my $broken = BrokenDuck->new;
isa_ok( $broken, 'BrokenDuck' );
isa_ok( $broken, 'Lycanthrope' );
isa_ok( $broken, 'Duck' );
can_ok( $broken, 'morph' );
is( $broken->can('quack'), undef, "A BrokenDuck can't quack" );
eval "$broken->quack";
ok( $@, 'A BrokenDuck dies if it tries to quack' );
exit(0);
#####################################################################
# Packages used for testing
package Duck;
use strict;
use vars qw{$VERSION};
BEGIN {
$VERSION = '0.02';
}
sub new { bless {}, $_[0] }
sub quack { 'Quack' }
1;
###################
package Lycanthrope;
use strict;
use vars qw{$VERSION};
BEGIN {
$VERSION = '0.02';
}
sub new { bless { human => 1 }, $_[0] }
sub morph { 'HRALGLAHRLAHRAL' };
1;
###################
package WereDuck;
use strict;
use vars qw{$VERSION};
BEGIN {
$VERSION = '0.02';
}
use base 'Lycanthrope';
use asa 'Duck', 'Horror';
sub quack { 'Hi! I mean Quack!' }
1;
####################
package BrokenDuck;
use strict;
use vars qw{$VERSION};
BEGIN {
$VERSION = '0.02';
}
use base 'Lycanthrope';
use asa 'Duck';
1;