bump version to 0.16
[gitmo/MooseX-Singleton.git] / t / 001-basic.t
1 use strict;
2 use warnings;
3 use Test::More tests => 16;
4
5 BEGIN {
6     package MooseX::Singleton::Test;
7     use MooseX::Singleton;
8
9     has bag => (
10         is      => 'rw',
11         isa     => 'HashRef[Int]',
12         default => sub { { default => 42 } },
13     );
14
15     sub distinct_keys {
16         my $self = shift;
17         scalar keys %{ $self->bag };
18     }
19
20     sub clear {
21         my $self = shift;
22         $self->bag({});
23     }
24
25     sub add {
26         my $self = shift;
27         my $key = shift;
28         my $value = @_ ? shift : 1;
29
30         $self->bag->{$key} += $value;
31     }
32 }
33
34 my $mst = MooseX::Singleton::Test->instance;
35 isa_ok($mst, 'MooseX::Singleton::Test', 'Singleton->instance returns a real instance');
36
37 is($mst->distinct_keys, 1, "default keys");
38
39 $mst->add(foo => 10);
40 is($mst->distinct_keys, 2, "added key");
41
42 $mst->add(bar => 5);
43 is($mst->distinct_keys, 3, "added another key");
44
45 my $mst2 = MooseX::Singleton::Test->instance;
46 is($mst, $mst2, 'instances are the same object');
47 isa_ok($mst2, 'MooseX::Singleton::Test', 'Singleton->instance returns a real instance');
48
49 is($mst2->distinct_keys, 3, "keys from before");
50
51 $mst->add(baz => 2);
52
53 is($mst->distinct_keys, 4, "attributes are shared even after ->instance");
54 is($mst2->distinct_keys, 4, "attributes are shared even after ->instance");
55
56 is(MooseX::Singleton::Test->distinct_keys, 4, "Package->reader works");
57
58 MooseX::Singleton::Test->add(quux => 9000);
59
60 is($mst->distinct_keys, 5, "Package->add works");
61 is($mst2->distinct_keys, 5, "Package->add works");
62 is(MooseX::Singleton::Test->distinct_keys, 5, "Package->add works");
63
64 MooseX::Singleton::Test->clear;
65
66 is($mst->distinct_keys, 0, "Package->clear works");
67 is($mst2->distinct_keys, 0, "Package->clear works");
68 is(MooseX::Singleton::Test->distinct_keys, 0, "Package->clear works");
69