1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Test::More; 7use Test::Moose; 8 9use Bread::Board; 10 11{ 12 package FileLogger; 13 use Moose; 14 has 'log_file' => (is => 'ro', required => 1); 15 16 package MyApplication; 17 use Moose; 18 has 'logger' => (is => 'ro', isa => 'FileLogger', required => 1); 19} 20 21 22my $file_service = service 'log_file' => "logfile.log"; 23 24does_ok($file_service, 'Bread::Board::Service'); 25 26my $logger_service = service 'logger' => ( 27 class => 'FileLogger', 28 lifecycle => 'Singleton', 29 dependencies => { 30 log_file => depends_on('log_file'), 31 } 32); 33 34does_ok($logger_service, 'Bread::Board::Service'); 35 36my $app_service = service 'application' => ( 37 class => 'MyApplication', 38 dependencies => { 39 logger => depends_on('logger'), 40 } 41); 42 43does_ok($app_service, 'Bread::Board::Service'); 44 45my $bunyan_service = alias 'paul_bunyan' => 'logger'; 46 47does_ok($bunyan_service, 'Bread::Board::Service'); 48isa_ok($bunyan_service, 'Bread::Board::Service::Alias'); 49 50my $c = container 'MyApp'; 51 52isa_ok($c, 'Bread::Board::Container'); 53 54foreach ( $file_service, $logger_service, $app_service, $bunyan_service) { 55 $c->add_service($_); 56} 57 58my $logger = $c->resolve( service => 'logger' ); 59isa_ok($logger, 'FileLogger'); 60 61is($logger->log_file, 'logfile.log', '... got the right logfile dep'); 62 63is($c->fetch('logger/log_file')->service, $c->fetch('log_file'), '... got the right value'); 64is($c->fetch('logger/log_file')->get, 'logfile.log', '... got the right value'); 65 66my $app = $c->resolve( service => 'application' ); 67isa_ok($app, 'MyApplication'); 68 69isa_ok($app->logger, 'FileLogger'); 70is($app->logger, $logger, '... got the right logger (singleton)'); 71 72my $bunyan = $c->resolve( service => 'paul_bunyan' ); 73isa_ok($bunyan, 'FileLogger'); 74is($bunyan, $logger, 'standalone alias works.'); 75 76done_testing; 77