X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F002-init.t;fp=t%2F002-init.t;h=2c2589756310fc5af7b4b915994f618fea138cf4;hb=1de95613f2dfae86af1a8f548d66d1de842e7201;hp=0000000000000000000000000000000000000000;hpb=b375b147ae0615bfe819dad1b2233ebf3fd90fc3;p=gitmo%2FMooseX-Singleton.git diff --git a/t/002-init.t b/t/002-init.t new file mode 100644 index 0000000..2c25897 --- /dev/null +++ b/t/002-init.t @@ -0,0 +1,52 @@ +use strict; +use warnings; +use Test::More tests => 8; + +my $i = 0; +sub new_singleton_pkg { + my $pkg_name = sprintf 'MooseX::Singleton::Test%s', $i++; + eval qq{ + package $pkg_name; + use MooseX::Singleton; + has number => (is => 'rw', isa => 'Num', required => 1); + has string => (is => 'rw', isa => 'Str', default => 'Hello!'); + }; + + return $pkg_name; +} + +eval { new_singleton_pkg()->instance; }; +like( + $@, + qr/\QAttribute (number) is required/, + q{can't get the Singleton if requires attrs and we don't provide them}, +); + +eval { new_singleton_pkg()->string; }; +like( + $@, + qr/\QAttribute (number) is required/, + q{can't call any Singleton attr reader if Singleton can't be inited}, +); + +for my $pkg (new_singleton_pkg) { + my $mst = $pkg->new(number => 5); + isa_ok($mst, $pkg); + + is($mst->number, 5, "the instance has the given attribute value"); + + is( + $pkg->number, + 5, + "the class method, called directly, returns the given attribute value" + ); + + eval { $pkg->new(number => 3) }; + ok($@, "can't make new singleton with conflicting attributes"); + + my $second = eval { $pkg->new }; + ok(!$@, "...but a second ->new without args is okay"); + + is($second->number, 5, "...we get the originally inited number from it"); +} +