use strict;
use warnings;
use Test::More import => ['!pass'];
plan tests => 10;
my $test_counter = 0;
{
package MySingleton;
use base qw(Dancer::Object::Singleton);
__PACKAGE__->attributes( qw/foo/ );
sub init {
my ($class, $instance) = @_;
$test_counter++;
$instance->foo('bar');
}
}
eval { MySingleton->new() };
like $@, qr/you can't call 'new'/, 'new unauthorized';
eval { MySingleton->clone() };
like $@, qr/you can't call 'clone'/, 'clone unauthorized';
can_ok 'MySingleton', 'foo';
my $instance = MySingleton->instance();
ok $instance, 'instance build';
is $test_counter, 1, 'counter incremented';
is $instance->foo, 'bar', 'attribute is set';
$instance->foo('baz');
is $instance->foo, 'baz', 'attribute changed';
my $instance2 = MySingleton->instance();
ok $instance2, 'instance retrieved';
is $instance2, $instance, 'instance is the same';
is $test_counter, 1, 'counter was not incremented';