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