#!/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' );
}