#!/usr/bin/perl
use strict;
use warnings;
use Test::More tests => 26;
BEGIN {
use_ok('MooseX::AttributeHelpers');
}
{
package Real;
use Moose;
has 'integer' => (
metaclass => 'Number',
is => 'ro',
isa => 'Int',
default => sub { 5 },
provides => {
set => 'set',
add => 'add',
sub => 'sub',
mul => 'mul',
div => 'div',
mod => 'mod',
abs => 'abs',
},
curries => {
add => {inc => [ 1 ]},
sub => {dec => [ 1 ]},
mod => {odd => [ 2 ]},
div => {cut_in_half => [ 2 ]}
}
);
}
my $real = Real->new;
isa_ok($real, 'Real');
can_ok($real, $_) for qw[
set add sub mul div mod abs inc dec odd cut_in_half
];
is $real->integer, 5, 'Default to five';
$real->add(10);
is $real->integer, 15, 'Add ten for fithteen';
$real->sub(3);
is $real->integer, 12, 'Subtract three for 12';
$real->set(10);
is $real->integer, 10, 'Set to ten';
$real->div(2);
is $real->integer, 5, 'divide by 2';
$real->mul(2);
is $real->integer, 10, 'multiplied by 2';
$real->mod(2);
is $real->integer, 0, 'Mod by 2';
$real->set(7);
$real->mod(5);
is $real->integer, 2, 'Mod by 5';
$real->set(-1);
$real->abs;
is $real->integer, 1, 'abs 1';
$real->set(12);
$real->inc;
is $real->integer, 13, 'inc 12';
$real->dec;
is $real->integer, 12, 'dec 13';
## test the meta
my $attr = $real->meta->get_attribute('integer');
isa_ok($attr, 'MooseX::AttributeHelpers::Number');
is_deeply($attr->provides, {
set => 'set',
add => 'add',
sub => 'sub',
mul => 'mul',
div => 'div',
mod => 'mod',
abs => 'abs',
}, '... got the right provides mapping');