update ver
[gitmo/MooseX-Singleton.git] / t / 001-basic.t
CommitLineData
109b110b 1use strict;
2use warnings;
3use Test::More tests => 15;
4
5BEGIN {
6 package MooseX::Singleton::Test;
7 use MooseX::Singleton;
8
9 has bag => (
10 is => 'rw',
11 isa => 'HashRef[Int]',
7afceec3 12 default => sub { { default => 42 } },
109b110b 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
34my $mst = MooseX::Singleton::Test->instance;
35isa_ok($mst, 'MooseX::Singleton::Test', 'Singleton->instance returns a real instance');
36
7afceec3 37is($mst->distinct_keys, 1, "default keys");
109b110b 38
39$mst->add(foo => 10);
7afceec3 40is($mst->distinct_keys, 2, "added key");
109b110b 41
42$mst->add(bar => 5);
7afceec3 43is($mst->distinct_keys, 3, "added another key");
109b110b 44
45my $mst2 = MooseX::Singleton::Test->instance;
46isa_ok($mst2, 'MooseX::Singleton::Test', 'Singleton->instance returns a real instance');
47
7afceec3 48is($mst2->distinct_keys, 3, "keys from before");
109b110b 49
50$mst->add(baz => 2);
51
7afceec3 52is($mst->distinct_keys, 4, "attributes are shared even after ->instance");
53is($mst2->distinct_keys, 4, "attributes are shared even after ->instance");
109b110b 54
7afceec3 55is(MooseX::Singleton::Test->distinct_keys, 4, "Package->reader works");
109b110b 56
57MooseX::Singleton::Test->add(quux => 9000);
58
7afceec3 59is($mst->distinct_keys, 5, "Package->add works");
60is($mst2->distinct_keys, 5, "Package->add works");
61is(MooseX::Singleton::Test->distinct_keys, 5, "Package->add works");
109b110b 62
63MooseX::Singleton::Test->clear;
64
7afceec3 65is($mst->distinct_keys, 0, "Package->clear works");
66is($mst2->distinct_keys, 0, "Package->clear works");
67is(MooseX::Singleton::Test->distinct_keys, 0, "Package->clear works");
109b110b 68