#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 22;
BEGIN {
unshift @INC => ('t/test_lib', '/test_lib');
}
# we have to use it directly because it uses an INIT block to flatten traits
use BasicTrait;
can_ok(BasicTrait => 'getName');
is(BasicTrait->getName(), 'TSimple', '... and it should have the method from the trait');
ok(BasicTrait->does("TSimple"), '.. BasicTrait is TSimple');
ok(exists($BasicTrait::{"TRAITS"}), '... the $TRAITS are properly stored');
my $trait;
{
no strict 'refs';
# get the trait out
$trait = ${"BasicTrait::TRAITS"};
}
# check to see what it is
isa_ok($trait, 'Class::Trait::Config');
# now examine the trait itself
can_ok($trait, 'name');
is($trait->name, 'TSimple', '... get the traits name');
can_ok($trait, 'sub_traits');
is(ref($trait->sub_traits), "ARRAY", '... our sub_trait is an array ref');
ok(eq_array($trait->sub_traits, []), '... both should be empty');
can_ok($trait, 'requirements');
is(ref($trait->requirements), "HASH", '... our requirements is an hash ref');
ok(eq_hash($trait->requirements, {}), '... both should be empty');
can_ok($trait, 'overloads');
is(ref($trait->overloads), "HASH", '... our overloads is an hash ref');
ok(eq_hash($trait->overloads, {}), '... both should be empty');
can_ok($trait, 'conflicts');
is(ref($trait->conflicts), "HASH", '... our conflicts is an hash ref');
ok(eq_hash($trait->conflicts, {}), '... both should be empty');
can_ok($trait, 'methods');
is(ref($trait->methods), "HASH", '... our methods is an hash ref');
ok(eq_hash($trait->methods, { "getName" => 'TSimple::getName' }), '... both should NOT be empty');