1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use Test::More; 7 8use Bread::Board; 9 10{ 11 package My::Foo; 12 use Moose; 13} 14 15{ 16 # typemap directly getting a service object ... 17 my $c = container 'MyTestContainer' => as { 18 typemap 'My::Foo' => (service 'my_foo' => (class => 'My::Foo')); 19 }; 20 21 ok($c->has_type_mapping_for('My::Foo'), '... have a type mapping for My::Foo'); 22 is( 23 $c->get_type_mapping_for('My::Foo'), 24 $c->fetch('my_foo'), 25 '... the type mapping for My::Foo is the my_foo service' 26 ); 27 28 { 29 my $foo = $c->resolve( service => 'my_foo' ); 30 isa_ok($foo, 'My::Foo'); 31 } 32 { 33 my $foo = $c->resolve( type => 'My::Foo' ); 34 isa_ok($foo, 'My::Foo'); 35 } 36} 37 38{ 39 # typemap mapping to a service object name ... 40 my $c = container 'MyTestContainer' => as { 41 service 'my_foo' => (class => 'My::Foo'); 42 typemap 'My::Foo' => 'my_foo'; 43 }; 44 45 ok($c->has_type_mapping_for('My::Foo'), '... have a type mapping for My::Foo'); 46 is( 47 $c->get_type_mapping_for('My::Foo'), 48 $c->fetch('my_foo'), 49 '... the type mapping for My::Foo is the my_foo service' 50 ); 51 52 { 53 my $foo = $c->resolve( service => 'my_foo' ); 54 isa_ok($foo, 'My::Foo'); 55 } 56 { 57 my $foo = $c->resolve( type => 'My::Foo' ); 58 isa_ok($foo, 'My::Foo'); 59 } 60} 61 62{ 63 # typemap mapping to a service object name 64 # that is a path to a sub-container service 65 my $c = container 'MyTestContainer' => as { 66 67 container 'MyTestSubContainer' => as { 68 service 'my_foo' => (class => 'My::Foo'); 69 }; 70 71 typemap 'My::Foo' => 'MyTestSubContainer/my_foo'; 72 }; 73 74 ok($c->has_type_mapping_for('My::Foo'), '... have a type mapping for My::Foo'); 75 is( 76 $c->get_type_mapping_for('My::Foo'), 77 $c->fetch('MyTestSubContainer/my_foo'), 78 '... the type mapping for My::Foo is the MyTestSubContainer/my_foo service' 79 ); 80 81 { 82 my $foo = $c->resolve( service => 'MyTestSubContainer/my_foo' ); 83 isa_ok($foo, 'My::Foo'); 84 } 85 { 86 my $foo = $c->resolve( type => 'My::Foo' ); 87 isa_ok($foo, 'My::Foo'); 88 } 89} 90 91done_testing; 92