Bread-Board
view release on metacpan or search on metacpan
t/003_block_injection.t view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use Test::More;
use Test::Moose;
use Test::Fatal;
use Bread::Board::BlockInjection;
use Bread::Board::SetterInjection;
use Bread::Board::Literal;
{
package Needle;
use Moose;
package Mexican::Black::Tar;
use Moose;
package Addict;
use Moose;
has 'needle' => (is => 'rw');
has 'spoon' => (is => 'rw');
has 'stash' => (is => 'rw');
}
my $s = Bread::Board::BlockInjection->new(
name => 'William',
class => 'Addict',
block => sub {
my $s = shift;
$s->class->new(%{ $s->params });
},
dependencies => {
needle => Bread::Board::SetterInjection->new(name => 'spike', class => 'Needle'),
spoon => Bread::Board::Literal->new(name => 'works', value => 'Spoon!'),
},
parameters => {
stash => { isa => 'Mexican::Black::Tar' }
}
);
isa_ok($s, 'Bread::Board::BlockInjection');
does_ok($s, 'Bread::Board::Service::WithDependencies');
does_ok($s, 'Bread::Board::Service::WithParameters');
does_ok($s, 'Bread::Board::Service');
{
my $i = $s->get(stash => Mexican::Black::Tar->new);
isa_ok($i, 'Addict');
isa_ok($i->needle, 'Needle');
is($i->spoon, 'Spoon!', '... got our literal service');
isa_ok($i->stash, 'Mexican::Black::Tar');
{
my $i2 = $s->get(stash => Mexican::Black::Tar->new);
isnt($i, $i2, '... calling it again returns an new object');
}
}
is($s->name, 'William', '... got the right name');
is($s->class, 'Addict', '... got the right class');
my $deps = $s->dependencies;
is_deeply([ sort keys %$deps ], [qw/needle spoon/], '... got the right dependency keys');
( run in 0.802 second using v1.01-cache-2.11-cpan-54e63673c56 )