bb1beadd6995b3782ff42f8dfda12a0c3229eb68
[gitmo/MooseX-AttributeHelpers.git] / t / 204_trait_number.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 20;
7 use Test::Moose;
8
9 BEGIN {
10     use_ok('MooseX::AttributeHelpers');   
11 }
12
13 {
14     package Real;
15     use Moose;
16
17     has 'integer' => (
18         traits    => [qw/MooseX::AttributeHelpers::Trait::Number/],
19         is        => 'ro',
20         isa       => 'Int',
21         default   => sub { 5 },
22         provides  => {
23             set => 'set',
24             add => 'add',
25             sub => 'sub',
26             mul => 'mul',
27             div => 'div',
28             mod => 'mod',
29             abs => 'abs',
30         }
31     );
32 }
33
34 my $real = Real->new;
35 isa_ok($real, 'Real');
36
37 can_ok($real, $_) for qw[
38     set add sub mul div mod abs
39 ];
40
41 is $real->integer, 5, 'Default to five';
42
43 $real->add(10);
44
45 is $real->integer, 15, 'Add ten for fithteen';
46
47 $real->sub(3);
48
49 is $real->integer, 12, 'Subtract three for 12';
50
51 $real->set(10);
52
53 is $real->integer, 10, 'Set to ten';
54
55 $real->div(2);
56
57 is $real->integer, 5, 'divide by 2';
58
59 $real->mul(2);
60
61 is $real->integer, 10, 'multiplied by 2';
62
63 $real->mod(2);
64
65 is $real->integer, 0, 'Mod by 2';
66
67 $real->set(7);
68
69 $real->mod(5);
70
71 is $real->integer, 2, 'Mod by 5';
72
73 $real->set(-1);
74
75 $real->abs;
76
77 is $real->integer, 1, 'abs 1';
78
79 ## test the meta
80
81 my $attr = $real->meta->get_attribute('integer');
82 does_ok($attr, 'MooseX::AttributeHelpers::Trait::Number');
83
84 is_deeply($attr->provides, {
85     set => 'set',
86     add => 'add',
87     sub => 'sub',
88     mul => 'mul',
89     div => 'div',
90     mod => 'mod',
91     abs => 'abs',
92 }, '... got the right provides mapping');
93