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

use lib 't/lib';
use Test::More 'no_plan';
use Test::NoWarnings;

require_ok('mixin');
require_ok('mixin::with');


package Dog;
sub speak { "Bark!\n" }
sub new { my $class = shift;  bless {}, $class }


package Dog::Small;
use base 'Dog';
sub speak { "Yip!\n"; }


package Dog::Retriever;
use mixin::with 'Dog';
sub fetch { "Get your own stinking $_[1]\n" }


package Dog::Small::Retriever;
use base 'Dog::Small';
use mixin 'Dog::Retriever';


package main;
my $small_retriever = Dog::Small::Retriever->new;
is( $small_retriever->speak,            "Yip!\n" );
is( $small_retriever->fetch('ball'),    "Get your own stinking ball\n" );


package Hamish;
use base  'Dog';
use mixin 'Dog::Hamish';


package main;
my $hamish = Hamish->new;
isa_ok( $hamish, 'Hamish' );
is( $hamish->speak,                     "Bark!\n" );
is( $hamish->burglers,                  'burglers are everywhere!' );