#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 20;
BEGIN {
unshift @INC => ('t');
}
# this will test if
BEGIN {
package Test::Class::LoadingTraitsWithColonsInThem;
use Class::Trait qw(Test::LoadingTraitsWithColonsInThem);
sub new { bless {} }
}
{
can_ok("Test::Class::LoadingTraitsWithColonsInThem", 'new');
my $test = Test::Class::LoadingTraitsWithColonsInThem->new();
can_ok($test, 'does');
ok($test->does('Test::LoadingTraitsWithColonsInThem'), '... our trait was compiled successfully');
can_ok($test, 'isLoaded');
is($test->isLoaded(), 'Test::LoadingTraitsWithColonsInThem', '... and our trait method is as we expected');
}
BEGIN {
package Test::Class::Another::ColonInTheName;
use Class::Trait qw(Test::Another::ColonInTheName);
sub new { bless {} }
}
{
can_ok("Test::Class::Another::ColonInTheName", 'new');
my $test = Test::Class::Another::ColonInTheName->new();
can_ok($test, 'does');
ok($test->does('Test::Another::ColonInTheName'), '... our trait was compiled successfully');
can_ok($test, 'isLoaded');
is($test->isLoaded(), 'Test::Another::ColonInTheName', '... and our trait method is as we expected');
}
# test some of the Trait lib
{
package Test::TEquality;
use Class::Trait qw(TEquality);
sub new {
my ($class, $num) = @_;
return bless { num => $num }, $class;
}
sub equalTo {
my ($left, $right) = @_;
if (ref($right)) {
return $left->{num} == $right->{num};
}
else {
return $left->{num} == $right;
}
}
}
# test TEquality
{
my $test1 = Test::TEquality->new(5);
my $test2 = Test::TEquality->new(5);
my $test3 = Test::TEquality->new(10);
ok(($test1 == $test2), '... our values compare correctly');
ok(($test2 == 5), '... our values compare correctly');
ok(($test1 != $test3), '... our values compare correctly');
ok($test1->isSameTypeAs($test2), '... our objects are the same type');
ok(!$test1->isSameTypeAs("test"), '... our objects are not the same type');
ok($test1->isExactly($test1), '... our objects are the same type');
ok(!$test1->isExactly($test2), '... our objects not are the same type');
}
{
package Test::TComparable;
use Class::Trait qw(TComparable);
sub new {
my ($class, $num) = @_;
return bless { num => $num }, $class;
}
sub compare {
my ($left, $right) = @_;
return $left->{num} <=> $right->{num};
}
}
{
my $test1 = Test::TComparable->new(1);
my $test2 = Test::TComparable->new(5);
my $test3 = Test::TComparable->new(10);
my @sorted = sort { $a <=> $b } $test3, $test1, $test2;
is("$sorted[0]", "$test1", '... got the right first item');
is("$sorted[1]", "$test2", '... got the right second item');
is("$sorted[2]", "$test3", '... got the right third item');
}