#!./perl use strict; use warnings; use utf8; use open qw( :utf8 :std ); require q(./test.pl); plan(tests => 4); =pod This tests the classic diamond inheritance pattern. / \ \ / =cut { package Diᚪၚd_A; sub hèllò { 'Diᚪၚd_A::hèllò' } } { package Diᚪၚd_B; use base 'Diᚪၚd_A'; } { package Diᚪၚd_C; use base 'Diᚪၚd_A'; sub hèllò { 'Diᚪၚd_C::hèllò' } } { package Diᚪၚd_D; use base ('Diᚪၚd_B', 'Diᚪၚd_C'); use mro 'dfs'; } ok(eq_array( mro::get_linear_isa('Diᚪၚd_D'), [ qw(Diᚪၚd_D Diᚪၚd_B Diᚪၚd_A Diᚪၚd_C) ] ), '... got the right MRO for Diᚪၚd_D'); is(Diᚪၚd_D->hèllò, 'Diᚪၚd_A::hèllò', '... method resolved itself as expected'); is(Diᚪၚd_D->can('hèllò')->(), 'Diᚪၚd_A::hèllò', '... can(method) resolved itself as expected'); is(UNIVERSAL::can("Diᚪၚd_D", 'hèllò')->(), 'Diᚪၚd_A::hèllò', '... can(method) resolved itself as expected');