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

#
# Test the can() relations
#

use strict;
use Test;

use lib 't', '.', 't/testmods', 'testmods';
use C::D::E;

BEGIN { plan tests => 26 }

my $obj = C::D->new;
ok($obj);

ok(defined $obj->can('c'));
ok(not $obj->can('c_d_e'));
ok(defined $obj->can('a_b'));
ok(defined $obj->can('a'));

ok(defined C::D::E->can('c_d_e'));
ok(defined C::D::E->can('c_d'));
ok(defined C::D::E->can('c'));
ok(defined C::D->can('c_d'));
ok(defined C::D->can('c'));
ok(defined C->can('c'));

ok(defined C::D::E->can('a_b'));
ok(defined C::D::E->can('a'));
ok(defined C::D->can('a_b'));
ok(defined C::D->can('a'));
ok(not defined C->can('a_b'));
ok(not defined C->can('a'));

ok(not defined A::B->can('c_d'));
ok(not defined A::B->can('c'));
ok(not defined A->can('c_d'));
ok(not defined A->can('c'));

ok(defined C::D->can('willRealize'));
ok(defined C::D::E->can('willRealize'));
ok(!defined C->can('willRealize'));
ok(C::D->willRealize eq 'A::B');
ok(C::D::E->willRealize eq 'A::B');