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

# Load testing for Method::Alias

use strict;
use lib ();
use File::Spec::Functions ':ALL';
BEGIN {
	$| = 1;
	unless ( $ENV{HARNESS_ACTIVE} ) {
		require FindBin;
		$FindBin::Bin = $FindBin::Bin; # Avoid a warning
		chdir catdir( $FindBin::Bin, updir() );
		lib->import(
			catdir('blib', 'arch'),
			catdir('blib', 'lib' ),
			catdir('lib'),
			);
	}
}

use Test::More tests => 10;




# Test the test package
is( Foo->foo,  1, '->foo returns as expected'           );
is( Foo->bar,  1, 'A single alias works as expected'    );
is( Foo->baz,  1, 'A duplicate alias works as expected' );
is( Foo->blah, 1, 'Double alias works as expected'     );







#####################################################################
# Testing Package

package Foo;

use Test::More;
use Method::Alias 'bar'  => 'foo',
                  'baz'  => 'foo',
                  'blah' => 'bar';

sub foo { 1 }

ok( Method::Alias->import( 'this', 'foo' ),
	'Direct call to import returns true' );
is( Foo->this, 1, 'Resulting alias is created' );





#####################################################################
# Testing Subclass

package Foo::Bar;

use Test::More;

use strict;
use base 'Foo';

sub foo { 2 }

# When we call bar from THIS class, we should now get 2
is( Foo->foo, 1, '->foo from original returns as expected' );
is( Foo::Bar->foo, 2, '->from from subclass returns as expected' );
is( Foo::Bar->bar, 2, '->bar from subclass returns as expected' );
is( Foo::Bar->blah, 2, 'Double from subclass returns as expected' );

1;