Re-implementation. This uses a bit of Moose meta magic to get real singletons.
[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]',
12 default => sub { {} },
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
37is($mst->distinct_keys, 0, "no keys yet");
38
39$mst->add(foo => 10);
40is($mst->distinct_keys, 1, "one key");
41
42$mst->add(bar => 5);
43is($mst->distinct_keys, 2, "two keys");
44
45my $mst2 = MooseX::Singleton::Test->instance;
46isa_ok($mst2, 'MooseX::Singleton::Test', 'Singleton->instance returns a real instance');
47
48is($mst2->distinct_keys, 2, "two keys, from before");
49
50$mst->add(baz => 2);
51
52is($mst->distinct_keys, 3, "three keys");
53is($mst2->distinct_keys, 3, "attributes are shared even after ->instance");
54
55is(MooseX::Singleton::Test->distinct_keys, 3, "three keys even when Package->distinct_keys");
56
57MooseX::Singleton::Test->add(quux => 9000);
58
59is($mst->distinct_keys, 4, "Package->add works fine");
60is($mst2->distinct_keys, 4, "Package->add works fine");
61is(MooseX::Singleton::Test->distinct_keys, 4, "Package->add works fine");
62
63MooseX::Singleton::Test->clear;
64
65is($mst->distinct_keys, 0, "Package->clear works fine");
66is($mst2->distinct_keys, 0, "Package->clear works fine");
67is(MooseX::Singleton::Test->distinct_keys, 0, "Package->clear works fine");
68